PiDqQueryRelease
VOID __stdcall PiDqQueryRelease(_PI_DQ_QUERY *Query){
__int64 v2;
__int64 v3;
void *v4;
__int64 v5;
if( _InterlockedExchangeAdd(Query + 53, 0xFFFFFFFF) == 1 )
{
if( (byte_140C130BA & 0x40) != 0 )
McTemplateK0p_EtwWriteTransfer(
(__int64)Query,
(const _EVENT_DESCRIPTOR *)KMPnPEvt_DevQuery_QueryStop,
*((const _GUID **)Query + 3),
Query);
PiDqQueryFreeActiveData(Query);
v4 = (void *)*((_QWORD *)Query + 3);
if( v4 )
ExFreePoolWithTag(v4, 0x6370726Bu);
v5 = *((_QWORD *)Query + 2);
if( v5 )
MesHandleFree(v5, v2, v3);
SeReleaseSubjectContext((PSECURITY_SUBJECT_CONTEXT)Query + 1);
ExFreePoolWithTag(Query, 0x58706E50u);
}
}Referenced by:
PiDqDispatch
PiDqObjectManagerServiceActionQueue
PiDqObjectManagerUnregisterQuery