EtwpObjectHandleEnumCallback

UINT8 __fastcall EtwpObjectHandleEnumCallback(
        _HANDLE_TABLE *ObjectTable,
        _HANDLE_TABLE_ENTRY *ObjectTableEntry,
        VOID *HandleId,
        VOID *Context){
  bool v4; 
  int v5; 
  __int16 v7; 
  unsigned __int64 v8; 
  void *v11; 
  unsigned int v12; 
  _WORD *v13; 
  unsigned int v14; 
  unsigned int v15; 
  int v16; 
  unsigned int v17; 
  UINT64 v18; 
  _OBJECT_NAME_INFORMATION *PoolWithTag; 
  int v20; 
  int Length; 
  __int64 v22; 
  unsigned int *v23; 
  UINT64 Flag; 
  UINT64 v26; 
  UINT64 ReturnLength; 
  unsigned __int64 v28; 
  int v29; 
  unsigned int v30; 
  __int16 v31; 
  int v32; 
  __int16 v33; 
  EVENT_DATA_DESCRIPTOR EventData; 
  wchar_t *Buffer; 
  int v36; 
  int v37; 
  v4 = *((_BYTE *)Context + 64) != 0;
  LODWORD(ReturnLength) = 0;
  v5 = *((_DWORD *)Context + 11);
  v7 = 4391 - v4;
  v8 = (ObjectTableEntry->LowValue >> 16) & 0xFFFFFFFFFFFFFFF0ui64;
  v32 = 0;
  v33 = 0;
  v29 = v5;
  v11 = (void *)(v8 + 48);
  v30 = (unsigned int)HandleId;
  v28 = v8 + 48;
  if( *((_BYTE *)Context + 68) )
    v30 = (unsigned int)HandleId | 0x80000000;
  v12 = 1;
  v13 = (_WORD *)*((_QWORD *)Context + 1);
  v31 = (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, 0x54777445u);
  ExUnlockHandleTableEntry(ObjectTable, ObjectTableEntry);
  v18 = *((unsigned __int16 *)Context + 12);
  PoolWithTag = (_OBJECT_NAME_INFORMATION *)*((_QWORD *)Context + 2);
  EventData.Ptr = (unsigned __int64)&v28;
  LODWORD(ReturnLength) = v18;
  *(_QWORD *)&EventData.Size = 18i64;
  while( 1 )
  {
    v20 = ObQueryNameString(v11, PoolWithTag, v18, &ReturnLength);
    if( v20 != -1073741820 )
      break;
    if( PoolWithTag != *((_OBJECT_NAME_INFORMATION **)Context + 2) )
      ExFreePoolWithTag(PoolWithTag, 0);
    PoolWithTag = (_OBJECT_NAME_INFORMATION *)ExAllocatePoolWithTag(
                                                PagedPool,
                                                (unsigned int)ReturnLength,
                                                0x74777445ui64);
    if( !PoolWithTag )
      break;
    v18 = (unsigned int)ReturnLength;
  }
  ObfDereferenceObjectWithTag(v11, 0x54777445ui64);
  if( !v20 )
  {
    Length = 0x2000;
    if( PoolWithTag->Name.Length < 0x2000u )
      Length = PoolWithTag->Name.Length;
    v12 = 2;
    Buffer = PoolWithTag->Name.Buffer;
    v36 = Length;
    v37 = 0;
  }
  v22 = 2i64 * v12;
  LODWORD(v26) = 4200450;
  LOWORD(Flag) = v7;
  *((_QWORD *)&EventData.Size + v22) = 2i64;
  v23 = (unsigned int *)*((_QWORD *)Context + 4);
  *(&EventData.Ptr + v22) = (unsigned __int64)&EtwpNull;
  EtwpLogKernelEvent(&EventData, *((_QWORD *)v23 + 135), *v23, v12 + 1, Flag, v26);
  if( PoolWithTag && PoolWithTag != *((_OBJECT_NAME_INFORMATION **)Context + 2) )
    ExFreePoolWithTag(PoolWithTag, 0);
  return 0;
}

Referenced by:

No references.