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