IommuDomainAttachDevice

NTSTATUS __stdcall IommuDomainAttachDevice(_LONGLONG a1, _DEVICE_OBJECT *a2, INT64 a3, INT64 a4){
  __int64 v5; 
  int v6; 
  int v7; 
  int DeviceId; 
  _HALP_ALLOC_CONTEXT *v9; 
  UINT8 *v10; 
  UINT8 *v11; 
  unsigned __int8 CurrentIrql; 
  UINT8 **v14; 

  v5 = *(_QWORD *)&a1;
  v6 = a4;
  v7 = a3;
  DeviceId = HalpIommuGetDeviceId(a2);
  if( DeviceId < 0 )
    return DeviceId;
  if( !v7 && v6 == 1 )
  {
    DeviceId = HalpIommuCreateDevice(0i64);
    if( DeviceId >= 0 )
    {
      DeviceId = HalpIommuJoinDmaDomain(0i64, v5);
      if( DeviceId >= 0 )
      {
        v10 = HalpMmAllocCtxAlloc(v9, 0x38ui64);
        v11 = v10;
        if( v10 )
        {
          *(_QWORD *)v10 = 0i64;
          *((_QWORD *)v10 + 1) = 0i64;
          *((_DWORD *)v10 + 6) = 0;
          *((_QWORD *)v10 + 4) = 0i64;
          *((_QWORD *)v10 + 2) = a2;
          *((_DWORD *)v10 + 7) = 1;
          *((_QWORD *)v10 + 5) = v5;
          *((_QWORD *)v10 + 6) = 0i64;
          CurrentIrql = KeGetCurrentIrql();
          __writecr8(0xCui64);
          KxAcquireSpinLock((UINT64 *)&CmpDummyThreadEvent + 514);
          v14 = (UINT8 **)*(&CmpDummyThreadEvent + 513);
          if( (_UNKNOWN *)**(&CmpDummyThreadEvent + 513) != (_UNKNOWN *)((char *)&CmpDummyThreadEvent + 4096) )
            __fastfail(3u);
          *(_QWORD *)v11 = (char *)&CmpDummyThreadEvent + 4096;
          *((_QWORD *)v11 + 1) = v14;
          *v14 = v11;
          *(&CmpDummyThreadEvent + 513) = v11;
          KxReleaseSpinLock((UINT64 *)&CmpDummyThreadEvent + 514);
          __writecr8(CurrentIrql);
        }
        else
        {
          return -1073741670;
        }
      }
    }
    return DeviceId;
  }
  return -1073741583;
}

Referenced by:

No references.