IopAllocateMiniCompletionPacket

_IOP_MINI_COMPLETION_PACKET *__stdcall IopAllocateMiniCompletionPacket(UINT8 PacketType, UINT8 Quota){
  UINT8 v3; 
  struct _KPRCB *CurrentPrcb; 
  _GENERAL_LOOKASIDE *P; 
  _IOP_MINI_COMPLETION_PACKET *result; 
  _GENERAL_LOOKASIDE *L; 
  UINT64 v8; 

  v3 = PacketType;
  if( PacketType == 4 )
  {
    v8 = 80i64;
LABEL_7:
    result = (_IOP_MINI_COMPLETION_PACKET *)ExAllocatePoolWithTagPriority(
                                              NonPagedPoolNx,
                                              v8,
                                              0x20706349ui64,
                                              LowPoolPriority);
    goto LABEL_8;
  }
  CurrentPrcb = KeGetCurrentPrcb();
  P = CurrentPrcb->PPLookasideList[7].P;
  ++P->TotalAllocates;
  result = (_IOP_MINI_COMPLETION_PACKET *)RtlpInterlockedPopEntrySList(&P->ListHead);
  if( result )
    goto LABEL_3;
  ++P->AllocateMisses;
  L = CurrentPrcb->PPLookasideList[7].L;
  ++L->TotalAllocates;
  result = (_IOP_MINI_COMPLETION_PACKET *)RtlpInterlockedPopEntrySList(&L->ListHead);
  if( result )
    goto LABEL_3;
  ++L->AllocateMisses;
  if( !Quota )
  {
    v8 = 56i64;
    goto LABEL_7;
  }
  v3 = 3;
  result = (_IOP_MINI_COMPLETION_PACKET *)ExAllocatePoolWithQuotaTag(NonPagedPoolNx, 0x38ui64, 0x20706349ui64);
LABEL_8:
  if( result )
LABEL_3:
    *((_BYTE *)result + 16) = v3;
  return result;
}

Referenced by:

IoAllocateMiniCompletionPacket
IoSetIoCompletionEx
IoSetIoCompletionEx2
NtReleaseWorkerFactoryWorker