EtwpInitLoggerContext

_WMI_LOGGER_CONTEXT *__fastcall EtwpInitLoggerContext(_UNICODE_STRING *LoggerName, UINT64 LoggerMode){
  int Length; 
  int v3; 
  unsigned int v5; 
  unsigned int v6; 
  VOID *PoolWithTag; 
  INT64 v8; 
  UINT8 *v9; 
  WCHAR v10; 
  __int64 v11; 
  int v12; 
  int v13; 
  unsigned int MaximumProcessorCount; 
  UINT8 *v16; 
  __int64 *v17; 
  Length = LoggerName->Length;
  v3 = LoggerMode;
  v5 = 0;
  v6 = 0;
  if( (LoggerMode & 0x10000000) == 0 )
  {
    MaximumProcessorCount = KeQueryMaximumProcessorCountEx(0xFFFFu);
    if( MaximumProcessorCount > 0x20 )
      v5 = 8 * MaximumProcessorCount;
    if( (v3 & 0x400) != 0 )
      v6 = 8 * MaximumProcessorCount;
  }
  PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNxCacheAligned, v5 + Length + 1330 + 2 * v6, 0x4C777445ui64);
  v8 = (INT64)PoolWithTag;
  if( !PoolWithTag )
    return 0i64;
  memset((INT64)PoolWithTag, 0i64);
  v9 = (UINT8 *)(v8 + 1328);
  if( v5 )
  {
    *(_QWORD *)(v8 + 1040) = v9;
    v9 += v5;
  }
  if( v6 )
  {
    *(_QWORD *)(v8 + 1280) = v9;
    v16 = &v9[v6];
    *(_QWORD *)(v8 + 1288) = v16;
    v9 = &v16[v6];
  }
  memmove(v9, (UINT8 *)LoggerName->Buffer, LoggerName->Length);
  RtlInitUnicodeString((PUNICODE_STRING)(v8 + 152), (PCWSTR)v9, v10);
  *(_DWORD *)(v8 + 12) = v3;
  *(_DWORD *)(v8 + 32) = 0xFFFF;
  *(_DWORD *)(v8 + 28) = -1072889856;
  *(_DWORD *)(v8 + 20) = -1072496640;
  *(_DWORD *)(v8 + 24) = -1072562176;
  *(_DWORD *)(v8 + 316) = (v3 & 0x1000000) != 0 ? 1 : 512;
  if( v3 < 0 && (v3 & 0x1000000) != 0 )
    *(_DWORD *)(v8 + 12) = v3 & 0x7FFFFFFF;
  if( EtwpFileSystemReady )
    _InterlockedOr((volatile signed __int32 *)(v8 + 832), 4u);
  if( (v3 & 0x8000) != 0 )
  {
    v17 = (__int64 *)(v8 + 288);
LABEL_29:
    *(_QWORD *)(v8 + 280) = v17;
    goto LABEL_12;
  }
  if( (v3 & 0x4000) != 0 )
  {
    v17 = EtwpGlobalSequence;
    goto LABEL_29;
  }
LABEL_12:
  *(_QWORD *)(v8 + 1296) = -1i64;
  *(_DWORD *)(v8 + 336) = 1;
  v11 = *(_QWORD *)(*(_QWORD *)qword_140C4E388 + 6928i64) << 12 >> 20;
  if( (unsigned int)v11 <= 0x200 )
  {
    *(_DWORD *)(v8 + 4) = 0x2000;
  }
  else
  {
    v12 = 0x10000;
    if( (unsigned int)v11 <= 0x400 )
      v12 = 0x4000;
    *(_DWORD *)(v8 + 4) = v12;
  }
  v13 = 2 * EtwpQueryUsedProcessorCount(v8);
  *(_DWORD *)(v8 + 240) = v13;
  if( (v3 & 0x4000000) == 0 )
    goto LABEL_17;
  if( EtwpInitializeCompression(v8) >= 0 )
  {
    *(_DWORD *)(v8 + 240) += 4;
    v13 = *(_DWORD *)(v8 + 240);
LABEL_17:
    *(_DWORD *)(v8 + 252) = v13 + 22;
    KeQuerySystemTimePrecise((_LARGE_INTEGER *)(v8 + 808));
    KeInitializeMutex((_KMUTANT *)(v8 + 648), 0i64);
    *(_QWORD *)(v8 + 704) = 0i64;
    *(_QWORD *)(v8 + 352) = v8 + 344;
    *(_QWORD *)(v8 + 344) = v8 + 344;
    *(_WORD *)(v8 + 1048) = 0;
    *(_QWORD *)(v8 + 64) = v8 + 72;
    *(_QWORD *)(v8 + 72) = 0i64;
    *(_QWORD *)(v8 + 80) = v8 + 88;
    *(_QWORD *)(v8 + 88) = 0i64;
    *(_QWORD *)(v8 + 104) = v8 + 96;
    *(_QWORD *)(v8 + 96) = v8 + 96;
    *(_QWORD *)(v8 + 120) = v8 + 112;
    *(_QWORD *)(v8 + 112) = v8 + 112;
    *(_QWORD *)(v8 + 1032) = v8 + 1024;
    *(_QWORD *)(v8 + 1024) = v8 + 1024;
    *(_QWORD *)(v8 + 1056) = 0i64;
    *(_QWORD *)(v8 + 712) = 0i64;
    KeInitializeEvent((_KEVENT *)(v8 + 472), NotificationEvent, 0);
    KeInitializeEvent((_KEVENT *)(v8 + 496), SynchronizationEvent, 0);
    KeInitializeTimerEx((PKTIMER)(v8 + 520), SynchronizationTimer);
    KeInitializeDpc((PRKDPC)(v8 + 584), EtwpLoggerDpc, (PVOID)v8);
    return(_WMI_LOGGER_CONTEXT *)v8;
  }
  ExFreePoolWithTag((PVOID)v8, 0);
  return 0i64;
}

Referenced by:

EtwpStartLogger