IopFreeMiniCompletionPacket

VOID __fastcall IopFreeMiniCompletionPacket(struct SLIST_ENTRY *P){
  void(__fastcall *v2)(struct SLIST_ENTRY *, _SLIST_ENTRY *); 
  struct _KPRCB *CurrentPrcb; 
  __int64 v4; 
  if( LOBYTE(P[1].Next) != 4 )
  {
    CurrentPrcb = KeGetCurrentPrcb();
    v4 = *((_QWORD *)CurrentPrcb + 270);
    ++*(_DWORD *)(v4 + 28);
    if( *(_WORD *)v4 >= *(_WORD *)(v4 + 16) )
    {
      ++*(_DWORD *)(v4 + 32);
      v4 = *((_QWORD *)CurrentPrcb + 271);
      ++*(_DWORD *)(v4 + 28);
      if( *(_WORD *)v4 >= *(_WORD *)(v4 + 16) )
      {
        ++*(_DWORD *)(v4 + 32);
        ExFreePoolWithTag(P, 0);
        return;
      }
      if( LOBYTE(P[1].Next) != 3 )
      {
LABEL_7:
        RtlpInterlockedPushEntrySList((PSLIST_HEADER)v4, P);
        return;
      }
    }
    else if( LOBYTE(P[1].Next) != 3 )
    {
      goto LABEL_7;
    }
    ExReturnPoolQuota(P);
    goto LABEL_7;
  }
  v2 = (void(__fastcall *)(struct SLIST_ENTRY *, _SLIST_ENTRY *))*((_QWORD *)&P[3].Next + 1);
  if( v2 )
  {
    v2(P, P[4].Next);
  }
  else if( *((_BYTE *)&P[4].Next + 8) )
  {
    ExFreePoolWithTag(P, 0);
  }
}

Referenced by:

AlpcpAllocateCompletionPacketLookaside
IoFreeMiniCompletionPacket
IoRemoveIoCompletion
IopFreeCompletionListPackets