PiDqQueryCreate
NTSTATUS __stdcall PiDqQueryCreate(PI_DQ_QUERY **Query){
VOID ***v1;
VOID ***v2;
char v3;
NTSTATUS v4;
VOID **PoolWithTag;
VOID **v6;
signed __int64 v7;
v2 = v1;
v3 = (char)Query;
v4 = 0;
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0xE8ui64, 1483763280i64);
v6 = PoolWithTag;
if( !PoolWithTag )
return -1073741670;
memset(PoolWithTag, 0i64, 0xE8u);
*((_DWORD *)v6 + 53) = 1;
v7 = _InterlockedIncrement64((_QWORD *)&PnpReplaceEvent + 242);
v6[8] = 0i64;
v6[28] = (VOID *)v7;
RtlInitializeGenericTableAvl(
(PRTL_AVL_TABLE)(v6 + 9),
(PRTL_AVL_COMPARE_ROUTINE)PiDqCompareAddresses,
(PRTL_AVL_ALLOCATE_ROUTINE)PiDqAllocateGenericTableEntry,
(PRTL_AVL_FREE_ROUTINE)PiDqFreeGenericTableEntry,
0i64);
v6[25] = v6 + 24;
v6[24] = v6 + 24;
if( v3 )
*((_DWORD *)v6 + 54) |= 2u;
SeCaptureSubjectContext((INT64)(v6 + 4));
*v2 = v6;
return v4;
}Referenced by:
PiDqDispatch