PiDqQueryRelease

VOID __fastcall PiDqQueryRelease(VOID *P){
  void *v2; 
  if( _InterlockedExchangeAdd((volatile signed __int32 *)P + 53, 0xFFFFFFFF) == 1 )
  {
    if( (byte_140C130BA & 0x40) != 0 )
      McTemplateK0p_EtwWriteTransfer((INT64)P, (EVENT_DESCRIPTOR *)&KMPnPEvt_DevQuery_QueryStop, *((GUID **)P + 3), P);
    PiDqQueryFreeActiveData((INT64)P);
    v2 = (void *)*((_QWORD *)P + 3);
    if( v2 )
      ExFreePoolWithTag(v2, 0x6370726Bu);
    if( *((_QWORD *)P + 2) )
      MesHandleFree();
    SeReleaseSubjectContext((_SECURITY_SUBJECT_CONTEXT *)P + 1);
    ExFreePoolWithTag(P, 0x58706E50u);
  }
}

Referenced by:

PiDqDispatch
PiDqObjectManagerServiceActionQueue
PiDqObjectManagerUnregisterQuery