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