EtwTraceObject

VOID __stdcall EtwTraceObject(UINT16 HookId, _OBJECT_HEADER *ObjectHeader){
  unsigned __int8 v4; 
  unsigned int v5; 
  unsigned int v6; 
  unsigned int v7; 
  bool v8; 
  __int64 v9; 
  __int64 v10; 
  int v11; 
  _WORD *v12; 
  int v13; 
  unsigned int v14; 
  __int128 v15; 
  __int64 v16[2]; 

  v4 = ObHeaderCookie ^ ObjectHeader->TypeIndex ^ BYTE1(ObjectHeader);
  v5 = 0;
  v15 = 0i64;
  v6 = *(_DWORD *)(ObTypeIndexTable[v4] + 192);
  v14 = v6;
  v7 = *(_DWORD *)(EtwpHostSiloState + 4224);
  v8 = !_BitScanForward((unsigned int *)&v9, v7);
  if( !v8 )
  {
    do
    {
      v7 &= v7 - 1;
      v10 = 32i64 * (unsigned int)v9 + EtwpHostSiloState + 4260;
      if( v10 )
      {
        if( (*(_DWORD *)(v10 + 16) & 0x80u) != 0 )
        {
          v11 = 0;
          v12 = (_WORD *)(0x140000000i64 + 20 * v9 + 12687392);
          if( *v12 )
          {
            while( 1 )
            {
              v13 = ExCheckSingleFilter(v6, *(unsigned int *)&v12[2 * v11 + 2]);
              v6 = v14;
              if( v13 )
                break;
              if( ++v11 >= (unsigned int)(unsigned __int16)*v12 )
                goto LABEL_9;
            }
            v5 |= 1 << v9;
          }
        }
      }
LABEL_9:
      v8 = !_BitScanForward((unsigned int *)&v9, v7);
    }
    while( !v8 );
    if( v5 )
    {
      v16[1] = 16i64;
      *(_QWORD *)&v15 = &ObjectHeader->Body;
      WORD4(v15) = v4;
      v16[0] = (__int64)&v15;
      EtwpTraceKernelEventWithFilter((__int64)v16, 1u, v5, HookId, 273684738);
    }
  }
}

Referenced by:

ObpDeregisterObject
ObpRegisterObject