IopAllocateMiniCompletionPacket
BYTE *__fastcall IopAllocateMiniCompletionPacket(CHAR a1, CHAR a2){
CHAR v3;
struct _KPRCB *CurrentPrcb;
__int64 v5;
BYTE *result;
__int64 v7;
UINT64 v8;
v3 = a1;
if( a1 == 4 )
{
v8 = 80i64;
LABEL_7:
result = (BYTE *)ExAllocatePoolWithTagPriority(NonPagedPoolNx, v8, 0x20706349ui64, LowPoolPriority);
goto LABEL_8;
}
CurrentPrcb = KeGetCurrentPrcb();
v5 = *((_QWORD *)CurrentPrcb + 270);
++*(_DWORD *)(v5 + 20);
result = (BYTE *)RtlpInterlockedPopEntrySList((PSLIST_HEADER)v5);
if( result )
goto LABEL_3;
++*(_DWORD *)(v5 + 24);
v7 = *((_QWORD *)CurrentPrcb + 271);
++*(_DWORD *)(v7 + 20);
result = (BYTE *)RtlpInterlockedPopEntrySList((PSLIST_HEADER)v7);
if( result )
goto LABEL_3;
++*(_DWORD *)(v7 + 24);
if( !a2 )
{
v8 = 56i64;
goto LABEL_7;
}
v3 = 3;
result = (BYTE *)ExAllocatePoolWithQuotaTag(NonPagedPoolNx, 0x38ui64, 0x20706349ui64);
LABEL_8:
if( result )
LABEL_3:
result[16] = v3;
return result;
}Referenced by:
IoAllocateMiniCompletionPacket
IoSetIoCompletionEx
IoSetIoCompletionEx2
NtReleaseWorkerFactoryWorker