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