VerifierExAllocatePool3
VOID *__fastcall VerifierExAllocatePool3(INT64 a1, UINT64 a2, UINT64 a3, INT64 a4, UINT64 a5){
unsigned int v7;
INT64 v9;
VOID *result;
unsigned __int32 v11;
_POOL_TYPE v12;
UINT64 v13;
BYTE v14;
char v15[3];
_POOL_TYPE PoolType[5];
VOID *retaddr;
PoolType[0] = NonPagedPool;
v7 = a3;
if( (int)ExpPoolFlagsToPoolType(a1, 0i64, (INT64 *)PoolType, (BYTE *)v15, &v14) < 0 )
{
LABEL_2:
LODWORD(v13) = a5;
return(VOID *)ExAllocatePool3(v9, a2, v7, a4, v13);
}
if( (MmVerifierData & 0x400000) != 0 && (VfRuleClasses & 0x800000000i64) == 0 && (MmVerifierData & 1) == 0 )
{
if( (MmVerifierData & 0x2000000) != 0 )
VfCheckPoolType(PoolType[0], retaddr, 0i64);
v9 = a1;
goto LABEL_2;
}
v11 = PoolType[0] & 0xFFFFFFE7;
VfCheckPoolType((_POOL_TYPE)(PoolType[0] & 0xFFFFFFE7), retaddr, 0i64);
v12 = v11 | 0x80;
if( XdvEnabled )
result = (VOID *)pXdvExAllocatePool3(v12, a2, v7, 32, (__int64)retaddr, (__int64)VeAllocatePoolWithTagPriority);
else
result = VeAllocatePoolWithTagPriority(v12, a2, v7, HighPoolPriority, retaddr);
if( !result && (a1 & 0x20) != 0 )
RtlRaiseStatus(-1073741670);
return result;
}Referenced by:
No references.