EtwpCreateUmReplyObject

NTSTATUS __stdcall EtwpCreateUmReplyObject(_ETW_GUID_ENTRY *GuidEntry, PVOID *Handle, _ETW_REG_ENTRY **RegEntryPtr){
  VOID **PoolWithTag; 
  _KQUEUE *v7; 
  UINT64 v8; 
  int inserted; 
  PVOID v10; 
  __int64 v11; 
  char v12; 
  _QWORD *v13; 
  _ETW_REG_ENTRY *v14; 
  VOID *v16; 
  VOID *v17; 
  UINT64 ObjectBodySize; 
  PVOID *Handlea; 
  UINT64 v20; 
  PVOID NewObject; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  PVOID Object; 

  memset(&ObjectAttributes.Length + 1, 0, 20);
  memset(&ObjectAttributes.Attributes + 1, 0, 20);
  NewObject = 0i64;
  Object = 0i64;
  ObjectAttributes.Length = 48;
  ObjectAttributes.Attributes = 64;
  PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x48ui64, 1903653957i64);
  v7 = (_KQUEUE *)PoolWithTag;
  if( !PoolWithTag )
    return -1073741801;
  memset(PoolWithTag, 0i64, 0x48u);
  KeInitializeQueue(v7, 0i64);
  LODWORD(v20) = 0;
  LOBYTE(v8) = 1;
  LODWORD(Handlea) = 0;
  LODWORD(ObjectBodySize) = 112;
  inserted = ObCreateObjectEx(
               0i64,
               EtwpRegistrationObjectType,
               &ObjectAttributes,
               v8,
               v16,
               ObjectBodySize,
               (UINT64)Handlea,
               v20,
               &Object,
               0i64);
  if( inserted < 0 )
  {
    ExFreePoolWithTag(v7, 0);
  }
  else
  {
    v10 = Object;
    memset(Object, 0i64, 0x70u);
    *((_WORD *)v10 + 49) = 4;
    *((_QWORD *)v10 + 6) = v7;
    EtwpReferenceGuidEntry(GuidEntry);
    *((_QWORD *)v10 + 4) = GuidEntry;
    ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)&ExBootDevicesRemovedEvent + 170, 0i64);
    v11 = *(&ExBootDevicesRemovedEvent + 168);
    if( *(_UNKNOWN **)(*(&ExBootDevicesRemovedEvent + 168) + 8i64) != (_UNKNOWN *)((char *)&ExBootDevicesRemovedEvent
                                                                                  + 1344) )
      __fastfail(3u);
    *(_QWORD *)v10 = *(&ExBootDevicesRemovedEvent + 168);
    *((_QWORD *)v10 + 1) = (char *)&ExBootDevicesRemovedEvent + 1344;
    *(_QWORD *)(v11 + 8) = v10;
    *(&ExBootDevicesRemovedEvent + 168) = v10;
    v12 = _InterlockedExchangeAdd64((_QWORD *)&ExBootDevicesRemovedEvent + 170, 0xFFFFFFFFFFFFFFFFui64);
    if( (v12 & 2) != 0 && (v12 & 4) == 0 )
      ExfTryToWakePushLock((_EX_PUSH_LOCK *)&ExBootDevicesRemovedEvent + 170);
    KeAbPostRelease((char *)&ExBootDevicesRemovedEvent + 1360);
    v13 = (char *)Object + 16;
    *((_QWORD *)Object + 3) = (char *)Object + 16;
    *v13 = v13;
    _InterlockedOr16((volatile signed __int16 *)v10 + 49, 0x80u);
    v14 = (_ETW_REG_ENTRY *)Object;
    LODWORD(v17) = 0;
    inserted = ObInsertObjectEx(Object, 0i64, 0x804ui64, 1ui64, (UINT64)v17, &NewObject, Handle);
    if( inserted >= 0 )
      *RegEntryPtr = v14;
  }
  return inserted;
}

Referenced by:

EtwpEnableGuid
EtwpNotifyGuid