PopFxTraceDeviceRegistration
VOID __stdcall PopFxTraceDeviceRegistration(_POP_FX_DEVICE *FxDevice, UINT8 Rundown){
const _EVENT_DESCRIPTOR *v4;
PEPHANDLE__ *v5;
const _EVENT_DESCRIPTOR *v6;
unsigned int v7;
__int64 *v8;
unsigned int v9;
__int64 *v10;
__int64 v11;
__int64 v12;
unsigned int v13;
VOID **PoolWithTag;
VOID **a7;
__int64 v16;
unsigned int v17;
VOID **v18;
__int64 v19;
__int64 v20;
UINT64 v21;
__int64 i;
__int64 v23;
int v24;
_POP_FX_PERF_INFO *v25;
INT64 a6;
const _EVENT_DESCRIPTOR *EventDescriptor;
UINT64 VetoMasks;
int v29;
if( Rundown )
{
v4 = &POP_ETW_EVENT_DEVICE_REGISTRATION_RUNDOWN;
}
else
{
PopFxAddLogEntry(*((_QWORD *)FxDevice + 6), 0, 1, *((unsigned int *)FxDevice + 207));
v4 = (const _EVENT_DESCRIPTOR *)POP_ETW_EVENT_DEVICE_REGISTRATION;
}
if( PopDiagHandleRegistered && EtwEventEnabled(PopDiagHandle, v4) )
{
v5 = (PEPHANDLE__ *)*((_QWORD *)FxDevice + 7);
VetoMasks = 0i64;
v29 = 0;
PopPepGetDeviceVetoMasks(v5, &VetoMasks);
PopDiagTraceFxDeviceRegistration(
v4,
*((_QWORD *)FxDevice + 6),
*((_QWORD *)FxDevice + 8),
*(_DWORD *)(*((_QWORD *)FxDevice + 6) + 156i64),
*((_DWORD *)FxDevice + 8),
*((_QWORD *)FxDevice + 6) + 128i64,
*((_DWORD *)FxDevice + 207),
(INT64)&VetoMasks);
v6 = (const _EVENT_DESCRIPTOR *)POP_ETW_EVENT_COMPONENT_REGISTRATION_RUNDOWN;
if( !Rundown )
v6 = &POP_ETW_EVENT_COMPONENT_REGISTRATION;
EventDescriptor = v6;
if( EtwEventEnabled(PopDiagHandle, v6) )
{
v7 = *((_DWORD *)FxDevice + 207);
if( v7 )
{
v8 = (__int64 *)*((_QWORD *)FxDevice + 104);
v9 = *(_DWORD *)(*v8 + 156);
if( v7 > 1 )
{
v10 = v8 + 1;
v11 = v7 - 1;
do
{
v12 = *v10;
v13 = v9;
++v10;
v9 = *(_DWORD *)(v12 + 156);
if( v9 <= v13 )
v9 = v13;
--v11;
}
while( v11 );
}
PoolWithTag = ExAllocatePoolWithTag(1ui64, 28 * v9, 1297630800i64);
a7 = PoolWithTag;
if( PoolWithTag )
{
v16 = v9;
v17 = 0;
v18 = &PoolWithTag[3 * v16];
v19 = 0i64;
do
{
v20 = *(_QWORD *)(v19 + *((_QWORD *)FxDevice + 104));
memset(v18, 0i64, 4 * *(_DWORD *)(v20 + 156));
PopPepGetComponentVetoMasks(*((PEPHANDLE__ **)FxDevice + 7), v17, (UINT64 *)v18, v21);
for( i = 0i64; (unsigned int)i < *(_DWORD *)(v20 + 156); HIDWORD(a7[v23 + 2]) = v24 )
{
v23 = 3 * i;
a7[v23] = *(VOID **)(*(_QWORD *)(v20 + 160) + 24 * i);
a7[v23 + 1] = *(VOID **)(*(_QWORD *)(v20 + 160) + 24 * i + 8);
LODWORD(a7[v23 + 2]) = *(_DWORD *)(*(_QWORD *)(v20 + 160) + 24 * i + 16);
v24 = *((_DWORD *)v18 + i);
i = (unsigned int)(i + 1);
}
LODWORD(a6) = *(_DWORD *)(v20 + 156);
PopDiagTraceFxComponentRegistration(
EventDescriptor,
*((_QWORD *)FxDevice + 6),
v17,
*(int *)(v20 + 88) < 0,
*(_DWORD *)(v20 + 152),
a6,
(INT64)a7);
v25 = *(_POP_FX_PERF_INFO **)(v20 + 424);
if( v25 )
PopFxTracePerfRegistration(v25, Rundown);
++v17;
v19 += 8i64;
}
while( v17 < v7 );
ExFreePoolWithTag(a7, 0x4D584650u);
}
}
}
}
}Referenced by:
PopDiagTraceFxRundown
PopFxRegisterDevice