EtwpObjectHandleEnumCallback
UINT8 __stdcall EtwpObjectHandleEnumCallback(
_HANDLE_TABLE *ObjectTable,
_HANDLE_TABLE_ENTRY *ObjectTableEntry,
VOID *HandleId,
VOID *Context){
bool v4;
int v5;
UINT16 v7;
unsigned __int64 v8;
VOID *v11;
unsigned int v12;
_WORD *v13;
unsigned int v14;
unsigned int v15;
int v16;
unsigned int v17;
UINT64 v18;
VOID **PoolWithTag;
NTSTATUS v20;
int v21;
__int64 v22;
__int64 v23;
UINT64 NumberOfBytes;
unsigned __int64 v26;
int v27;
unsigned int v28;
__int16 v29;
int v30;
__int16 v31;
__int64 *v32;
__int64 v33[2];
int v34;
int v35;
v4 = *((_BYTE *)Context + 64) != 0;
LODWORD(NumberOfBytes) = 0;
v5 = *((_DWORD *)Context + 11);
v7 = 4391 - v4;
v8 = (ObjectTableEntry->LowValue >> 16) & 0xFFFFFFFFFFFFFFF0ui64;
v30 = 0;
v31 = 0;
v27 = v5;
v11 = (VOID *)(v8 + 48);
v28 = (unsigned int)HandleId;
v26 = v8 + 48;
if( *((_BYTE *)Context + 68) )
v28 = (unsigned int)HandleId | 0x80000000;
v12 = 1;
v13 = (_WORD *)*((_QWORD *)Context + 1);
v29 = (unsigned __int8)(BYTE1(v8) ^ ObHeaderCookie ^ *(_BYTE *)(v8 + 24));
if( v13 )
{
v14 = 0;
if( !*v13 )
{
LABEL_8:
ExUnlockHandleTableEntry(ObjectTable, ObjectTableEntry);
return 0;
}
v15 = *(_DWORD *)(ObTypeIndexTable[(unsigned __int8)ObHeaderCookie ^ BYTE1(v8) ^ (unsigned __int64)*(unsigned __int8 *)(v8 + 24)]
+ 192);
while( !(unsigned int)ExCheckSingleFilter(v15, *(unsigned int *)&v13[2 * v14 + 2]) )
{
v14 = v16 + 1;
if( v14 >= v17 )
goto LABEL_8;
}
}
ObfReferenceObjectWithTag(v11, 0x54777445ui64);
ExUnlockHandleTableEntry(ObjectTable, ObjectTableEntry);
v18 = *((unsigned __int16 *)Context + 12);
PoolWithTag = (VOID **)*((_QWORD *)Context + 2);
v32 = (__int64 *)&v26;
LODWORD(NumberOfBytes) = v18;
v33[0] = 18i64;
while( 1 )
{
v20 = ObQueryNameString(v11, (_OBJECT_NAME_INFORMATION *)PoolWithTag, v18, &NumberOfBytes);
if( v20 != -1073741820 )
break;
if( PoolWithTag != *((VOID ***)Context + 2) )
ExFreePoolWithTag(PoolWithTag, 0);
PoolWithTag = ExAllocatePoolWithTag(1ui64, (unsigned int)NumberOfBytes, 1953985605i64);
if( !PoolWithTag )
break;
v18 = (unsigned int)NumberOfBytes;
}
ObfDereferenceObjectWithTag(v11, 0x54777445ui64);
if( !v20 )
{
v21 = 0x2000;
if( *(_WORD *)PoolWithTag < 0x2000u )
v21 = *(unsigned __int16 *)PoolWithTag;
v12 = 2;
v33[1] = (__int64)PoolWithTag[1];
v34 = v21;
v35 = 0;
}
v22 = 2i64 * v12;
v33[v22] = 2i64;
v23 = *((_QWORD *)Context + 4);
v33[v22 - 1] = (__int64)&EtwpNull;
EtwpLogKernelEvent((__int64)&v32, *(_ETW_SILODRIVERSTATE **)(v23 + 1080), *(_DWORD *)v23, v12 + 1, v7, 0x401802u);
if( PoolWithTag && PoolWithTag != *((VOID ***)Context + 2) )
ExFreePoolWithTag(PoolWithTag, 0);
return 0;
}Referenced by:
No references.