EtwpObjectTypeRundown
VOID __stdcall EtwpObjectTypeRundown(UINT64 LoggerId, UINT8 Start){
VOID **PoolWithTag;
NTSTATUS v5;
__int16 v6;
unsigned __int16 *v7;
UINT16 v8;
unsigned int i;
__int16 v10;
unsigned int v11;
_ETW_SILODRIVERSTATE *v12;
UINT64 NumberOfBytes;
__int16 v14;
__int64 v15;
int v16;
int v17;
__int64 v18;
int v19;
int v20;
NumberOfBytes = 1024i64;
PoolWithTag = 0i64;
v14 = 0;
while( 1 )
{
if( PoolWithTag )
ExFreePoolWithTag(PoolWithTag, 0);
PoolWithTag = ExAllocatePoolWithTag(1ui64, (unsigned int)NumberOfBytes, 1953985605i64);
if( !PoolWithTag )
break;
v5 = ZwQueryObject(0i64, ObjectTypesInformation, PoolWithTag, (unsigned int)NumberOfBytes, &NumberOfBytes);
if( v5 != -1073741820 )
{
if( v5 >= 0 )
{
v16 = 4;
v6 = -(Start != 0);
v15 = (__int64)&NumberOfBytes + 4;
v17 = 0;
v7 = (unsigned __int16 *)(PoolWithTag + 1);
v8 = v6 + 4389;
for( i = 0;
i < *(_DWORD *)PoolWithTag;
v7 = (unsigned __int16 *)((char *)v7 + ((v7[1] + 7i64) & 0xFFFFFFFFFFFFFFF8ui64) + 104) )
{
if( i )
{
v10 = *((unsigned __int8 *)v7 + 90);
v20 = 0;
v11 = *(_DWORD *)LoggerId;
v12 = *(_ETW_SILODRIVERSTATE **)(LoggerId + 1080);
WORD2(NumberOfBytes) = v10;
v18 = *((_QWORD *)v7 + 1);
v19 = *v7 + 2;
EtwpLogKernelEvent((__int64)&v15, v12, v11, 2u, v8, 0x401802u);
}
++i;
}
}
ExFreePoolWithTag(PoolWithTag, 0);
return;
}
}
}Referenced by:
EtwpKernelTraceRundown