CmAddPanelDevice

NTSTATUS __fastcall CmAddPanelDevice(VOID *ProcessHandle, VOID *BaseAddress, INT64 a3){
  __int64(__fastcall *v6)(VOID *, VOID *, __int64); 
  int v7; 
  NTSTATUS v8; 
  NTSTATUS v9; 
  int v10; 
  __int64 v12[12]; 

  memset(v12, 0i64, 0x58u);
  v6 = (__int64(__fastcall *)(VOID *, VOID *, __int64))*((_QWORD *)ProcessHandle + 63);
  v12[2] = (__int64)BaseAddress;
  v12[3] = a3;
  if( v6 )
  {
    v7 = v6(ProcessHandle, BaseAddress, 6i64);
    if( v7 == -1073741822 )
    {
      v6 = 0i64;
    }
    else
    {
      if( v7 == -1073741536 )
        return v12[0];
      if( v7 )
        return -1073741595;
    }
  }
  v8 = CmAddPanelDeviceWorker(ProcessHandle, BaseAddress, (const WCHAR *)v12[3], &v12[4]);
  v9 = v8;
  if( v6 )
  {
    LODWORD(v12[0]) = v8;
    v10 = v6(ProcessHandle, BaseAddress, 6i64);
    if( v10 != -1073741822 )
    {
      if( v10 != -1073741536 )
      {
        if( !v10 )
          goto LABEL_8;
        return -1073741595;
      }
      return v12[0];
    }
  }
LABEL_8:
  if( !LOBYTE(v12[4]) )
    PnpObjectRaiseDevicesChangeEvent((__int64)ProcessHandle, (__int64)BaseAddress, 6i64);
  return v9;
}

Referenced by:

CmUpdateDevicePanel