EtwpCreateUmReplyObject

NTSTATUS __stdcall EtwpCreateUmReplyObject(_ETW_GUID_ENTRY *GuidEntry, PVOID *Handle, _ETW_REG_ENTRY **RegEntryPtr){
  _KQUEUE *PoolWithTag; 
  _KQUEUE *v7; 
  NTSTATUS inserted; 
  PADAPTER_OBJECT v9; 
  __int64 v10; 
  char v11; 
  PADAPTER_OBJECT v12; 
  _ETW_REG_ENTRY *v13; 
  __int64 v15; 
  __int64 v16; 
  PVOID NewObject; 
  int v18[2]; 
  __int64 v19; 
  __int64 v20; 
  int v21; 
  int v22; 
  __int128 v23; 
  PADAPTER_OBJECT DmaAdapter; 
  v18[1] = 0;
  v22 = 0;
  NewObject = 0i64;
  DmaAdapter = 0i64;
  v19 = 0i64;
  v20 = 0i64;
  v18[0] = 48;
  v21 = 64;
  v23 = 0i64;
  PoolWithTag = (_KQUEUE *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x48ui64, 0x71777445ui64);
  v7 = PoolWithTag;
  if( !PoolWithTag )
    return -1073741801;
  memset((INT64)PoolWithTag, 0i64);
  KeInitializeQueue(v7, 0i64);
  inserted = ObCreateObjectEx(0, EtwpRegistrationObjectType, (__int64)v18, 1, v15, 112, 0, 0, &DmaAdapter, 0i64);
  if( inserted < 0 )
  {
    ExFreePoolWithTag(v7, 0);
  }
  else
  {
    v9 = DmaAdapter;
    memset((INT64)DmaAdapter, 0i64);
    v9[6].Size = 4;
    *(_QWORD *)&v9[3].Version = v7;
    EtwpReferenceGuidEntry(GuidEntry);
    *(_QWORD *)&v9[2].Version = GuidEntry;
    ExAcquirePushLockExclusiveEx((UINT64)&EtwpReplyListLock, 0i64);
    v10 = EtwpReplyListHead;
    if( *(__int64 **)(EtwpReplyListHead + 8) != &EtwpReplyListHead )
      __fastfail(3u);
    *(_QWORD *)&v9->Version = EtwpReplyListHead;
    v9->DmaOperations = (_DMA_OPERATIONS *)&EtwpReplyListHead;
    *(_QWORD *)(v10 + 8) = v9;
    EtwpReplyListHead = (__int64)v9;
    v11 = _InterlockedExchangeAdd64((volatile signed __int64 *)&EtwpReplyListLock, 0xFFFFFFFFFFFFFFFFui64);
    if( (v11 & 2) != 0 && (v11 & 4) == 0 )
      ExfTryToWakePushLock((volatile INT64 *)&EtwpReplyListLock);
    KeAbPostRelease(&EtwpReplyListLock);
    v12 = DmaAdapter + 1;
    DmaAdapter[1].DmaOperations = (_DMA_OPERATIONS *)&DmaAdapter[1];
    *(_QWORD *)&v12->Version = v12;
    _InterlockedOr16((volatile signed __int16 *)&v9[6].Size, 0x80u);
    v13 = (_ETW_REG_ENTRY *)DmaAdapter;
    LODWORD(v16) = 0;
    inserted = ObInsertObjectEx(DmaAdapter, 0i64, 0x804ui64, 1ui64, v16, &NewObject, Handle);
    if( inserted >= 0 )
      *RegEntryPtr = v13;
  }
  return inserted;
}

Referenced by:

EtwpEnableGuid
EtwpNotifyGuid