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