IopExceptionCleanup

VOID __stdcall IopExceptionCleanup(PVOID FileObject, PIRP Irp, PVOID EventObject, PVOID KernelEvent){
  void *MasterIrp; 
  _MDL *MdlAddress; 

  MasterIrp = Irp->AssociatedIrp.MasterIrp;
  if( MasterIrp )
    ExFreePoolWithTag(MasterIrp, 0);
  MdlAddress = Irp->MdlAddress;
  if( MdlAddress )
    IoFreeMdl(MdlAddress);
  IoFreeIrp(Irp);
  if( (*((_DWORD *)FileObject + 20) & 2) != 0 )
    IopReleaseFileObjectLock((PADAPTER_OBJECT)FileObject);
  if( EventObject )
    HalPutDmaAdapter((PADAPTER_OBJECT)EventObject);
  if( KernelEvent )
    ExFreePoolWithTag(KernelEvent, 0);
  HalPutDmaAdapter((PADAPTER_OBJECT)FileObject);
}

Referenced by:

IopXxxControlFile
NtSetVolumeInformationFile