PopFxCreateDeviceCommon
NTSTATUS __stdcall PopFxCreateDeviceCommon(
const VOID **Id,
POP_FX_PLUGIN *Flags,
POP_FX_PLUGIN *OutputFxDevice,
UINT64 a4,
__m128 **OutputFxDevicea){
int v5;
int v6;
VOID **PoolWithTag;
VOID **v8;
_UNICODE_STRING v10;
_UNICODE_STRING v11;
v11 = 0i64;
v5 = a4;
v6 = PopFxDuplicateUniqueId(Id, &v11);
if( v6 >= 0 )
{
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x4B8ui64, 1297630800i64);
v8 = PoolWithTag;
if( PoolWithTag )
{
memset(PoolWithTag, 0i64, 0x4B8u);
v10 = v11;
v8[45] = 0i64;
v8[140] = v8 + 115;
*(_UNICODE_STRING *)(v8 + 27) = v10;
v8[26] = v8 + 25;
v8[25] = v8 + 25;
v8[118] = v8;
v8[73] = v8 + 72;
v8[72] = v8 + 72;
v8[48] = v8 + 47;
v8[47] = v8 + 47;
v8[57] = PopFxIdleTimeoutDpcRoutine;
v8[40] = PopFxDeviceWork;
v8[117] = PopFxDirectedPowerTransitionWorker;
v8[126] = v8 + 125;
v8[125] = v8 + 125;
v8[135] = PopFxDirectedWorkOrderWatchdog;
v8[115] = 0i64;
v8[46] = 0i64;
v8[124] = 0i64;
v8[136] = v8 + 122;
v8[121] = v8 + 122;
v8[1] = v8;
*v8 = v8;
*((_WORD *)v8 + 284) = 0;
*((_BYTE *)v8 + 570) = 6;
*((_DWORD *)v8 + 143) = 1;
*((_BYTE *)v8 + 368) = 9;
v8[49] = 0i64;
*((_DWORD *)v8 + 107) = 0;
*((_WORD *)v8 + 212) = 0;
*((_DWORD *)v8 + 108) = 275;
v8[58] = v8;
v8[61] = 0i64;
v8[56] = 0i64;
v8[41] = v8;
v8[38] = 0i64;
v8[144] = 0i64;
*((_BYTE *)v8 + 992) = 8;
v8[127] = 0i64;
*((_DWORD *)v8 + 263) = 0;
*((_WORD *)v8 + 524) = 0;
*((_DWORD *)v8 + 264) = 275;
v8[139] = 0i64;
v8[134] = 0i64;
IoInitializeRemoveLockEx((PIO_REMOVE_LOCK)(v8 + 34), 0x4D584650u, 0, 0, 0x20u);
*((_DWORD *)v8 + 58) = ((v5 & 4) != 0) + 1;
*((_DWORD *)v8 + 206) = v5;
*OutputFxDevicea = (__m128 *)v8;
return v6;
}
v6 = -1073741670;
}
if( v11.Buffer )
ExFreePoolWithTag(v11.Buffer, 0x4D584650u);
return v6;
}Referenced by:
PopFxAcpiRegisterDevice
PopFxRegisterDeviceWorker