ExAllocatePool3
VOID *__fastcall ExAllocatePool3(INT64 a1, UINT64 a2, unsigned int a3, __int64 a4, unsigned int a5){
char v5;
char v9;
_EX_POOL_PRIORITY v10;
int v11;
unsigned int i;
UINT64 v13;
INT64 arg20;
char v16[4];
__int64 v17[4];
char v18;
LODWORD(v17[0]) = 0;
v5 = 0;
v18 = 0;
v16[0] = 0;
v9 = a1;
v10 = NormalPoolPriority;
if( !a3 )
{
LABEL_2:
v11 = -1073741811;
LABEL_3:
if( (v9 & 0x20) != 0 )
RtlRaiseStatus(v11);
return 0i64;
}
v11 = ExpPoolFlagsToPoolType(a1, 0i64, v17, &v18, v16);
if( v11 < 0 )
goto LABEL_3;
for( i = 0; i < a5; a4 += 16i64 )
{
if( (unsigned __int8)*(_QWORD *)a4 == 1 && !v18 )
{
v10 = *(_DWORD *)(a4 + 8);
if( (v10 & 0xFFFFFFCF) != 0 || v10 == (HighPoolPriority|NormalPoolPriority) )
goto LABEL_2;
v5 = 1;
}
else if( (*(_QWORD *)a4 & 0x100i64) == 0 )
{
goto LABEL_2;
}
++i;
}
if( v18 )
return ExAllocatePoolWithQuotaTag(v17[0], a2, a3);
if( v5 )
return ExAllocatePoolWithTagPriority(v17[0], a2, a3, v10);
LODWORD(arg20) = v16[0] != 0;
v13 = KeGetCurrentPrcb()->ParentNode->Affinity.Reserved[0];
LODWORD(v13) = v13 | 0x80000000;
return ExpAllocatePoolWithTagFromNode(LODWORD(v17[0]), a2, a3, v13, arg20);
}Referenced by:
VerifierExAllocatePool3