PoFxRegisterCoreDevice

NTSTATUS __fastcall PoFxRegisterCoreDevice(_UNICODE_STRING *Id, INT64 a2, _POP_FX_DEVICE **a3){
  VOID **v6; 
  VOID **v7; 
  __int64 v8; 
  __int64 v9; 
  NTSTATUS v10; 
  int v12[20]; 
  __int64 v13; 

  memset(v12, 0i64, sizeof(v12));
  v6 = 0i64;
  v13 = 0i64;
  if( Id && *(_DWORD *)a2 == 1 && *(_QWORD *)(a2 + 24) )
  {
    v7 = PopFxConvertV1Components(a2 + 48, *(_DWORD *)(a2 + 4));
    v6 = v7;
    if( !v7 )
    {
      v10 = -1073741670;
      goto LABEL_9;
    }
    *(_QWORD *)v12 = *(_QWORD *)(a2 + 8);
    *(_QWORD *)&v12[2] = *(_QWORD *)(a2 + 16);
    *(_QWORD *)&v12[4] = *(_QWORD *)(a2 + 32);
    *(_QWORD *)&v12[12] = *(_QWORD *)(a2 + 24);
    v10 = PopFxRegisterDeviceWorker(
            0i64,
            Id,
            (__int128 *)v12,
            (__int64)v7,
            (_KNOWN_CONTROLLER_TYPE)*(_DWORD *)(a2 + 4),
            *(_QWORD *)(a2 + 40),
            0,
            0i64,
            (__int64)&v13);
    if( v10 < 0 )
    {
      v13 = 0i64;
    }
    else
    {
      PopFxInsertDevice(v9, v8, v13);
      v10 = 0;
    }
  }
  else
  {
    v10 = -1073741811;
  }
  if( v6 )
    ExFreePoolWithTag(v6, 0x4D584650u);
LABEL_9:
  *a3 = (_POP_FX_DEVICE *)v13;
  return v10;
}

Referenced by:

HalpDmaInitPowerManagement
HalpInterruptInitPowerManagement
HalpTimerInitPowerManagement
PoFxRegisterDebugger