IopFreeMiniCompletionPacket

VOID __stdcall IopFreeMiniCompletionPacket(_IOP_MINI_COMPLETION_PACKET *MiniPacket){
  void(__fastcall *v2)(_IOP_MINI_COMPLETION_PACKET *, _QWORD); 
  struct _KPRCB *CurrentPrcb; 
  _GENERAL_LOOKASIDE *P; 

  if( *((_BYTE *)MiniPacket + 16) != 4 )
  {
    CurrentPrcb = KeGetCurrentPrcb();
    P = CurrentPrcb->PPLookasideList[7].P;
    ++P->TotalFrees;
    if( LOWORD(P->ListHead.Alignment) >= P->Depth )
    {
      ++P->FreeMisses;
      P = CurrentPrcb->PPLookasideList[7].L;
      ++P->TotalFrees;
      if( LOWORD(P->ListHead.Alignment) >= P->Depth )
      {
        ++P->FreeMisses;
        ExFreePoolWithTag(MiniPacket, 0);
        return;
      }
      if( *((_BYTE *)MiniPacket + 16) != 3 )
      {
LABEL_7:
        RtlpInterlockedPushEntrySList(&P->ListHead, (PSLIST_ENTRY)MiniPacket);
        return;
      }
    }
    else if( *((_BYTE *)MiniPacket + 16) != 3 )
    {
      goto LABEL_7;
    }
    ExReturnPoolQuota(MiniPacket);
    goto LABEL_7;
  }
  v2 = (void(__fastcall *)(_IOP_MINI_COMPLETION_PACKET *, _QWORD))*((_QWORD *)MiniPacket + 7);
  if( v2 )
  {
    v2(MiniPacket, *((_QWORD *)MiniPacket + 8));
  }
  else if( *((_BYTE *)MiniPacket + 72) )
  {
    ExFreePoolWithTag(MiniPacket, 0);
  }
}

Referenced by:

AlpcpAllocateCompletionPacketLookaside
IoFreeMiniCompletionPacket
IoRemoveIoCompletion
IopFreeCompletionListPackets