PiDqQueryEvaluateFilter
NTSTATUS __stdcall PiDqQueryEvaluateFilter(PI_DQ_QUERY *Query, WCHAR *ObjectName, UINT8 *Matched){
__int64 v3;
HPNPOPCTX *v5;
__int64 v8;
VOID **PoolWithTag;
int v10;
INT64 v12[2];
__int128 v13;
__int128 v14;
INT64 v15;
HPNPOPCTX *hPnpOpCtx;
v3 = *((_QWORD *)Query + 3);
LODWORD(v15) = 0;
v5 = 0i64;
*(_OWORD *)v12 = 0i64;
*Matched = 0;
v13 = 0i64;
v14 = 0i64;
v8 = *(unsigned int *)(v3 + 80);
hPnpOpCtx = 0i64;
PoolWithTag = ExAllocatePoolWithTag(1ui64, 48 * v8, 1483763280i64);
if( PoolWithTag )
{
memset(PoolWithTag, 0i64, 48 * *(_DWORD *)(*((_QWORD *)Query + 3) + 80i64));
LODWORD(v12[1]) = *(_DWORD *)(*((_QWORD *)Query + 3) + 80i64);
*(_QWORD *)&v13 = PoolWithTag;
*(_QWORD *)&v14 = ObjectName;
*((_QWORD *)&v14 + 1) = Query;
PiPnpRtlBeginOperation(&hPnpOpCtx);
v10 = FilterEval(
(INT64)PiDqPropertyCallback,
(INT64)v12,
*(unsigned int *)(*((_QWORD *)Query + 3) + 80i64),
*(_QWORD *)(*((_QWORD *)Query + 3) + 88i64),
&v15);
if( v10 >= 0 )
*Matched = (_DWORD)v15 != 0;
PnpFreeDevPropertyArray(DWORD2(v13), PoolWithTag, 0x58706E50u);
v5 = hPnpOpCtx;
}
else
{
v10 = -1073741670;
}
if( (unsigned __int64)(v12[0] - 1) <= 0xFFFFFFFFFFFFFFFDui64 )
ZwClose(v12[0]);
if( v5 )
PiPnpRtlEndOperation(v5);
return v10;
}Referenced by:
PiDqQueryApplyObjectEvent