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