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