VerifierExAllocatePool3
VOID *__fastcall VerifierExAllocatePool3(INT64 a1, UINT64 a2, unsigned int a3, __int64 a4, unsigned int a5){
INT64 v9;
VOID *result;
unsigned int v11;
POOL_TYPE v12;
char v13;
char v14[3];
__int64 PoolType[2];
VOID *CallingAddress;
LODWORD(PoolType[0]) = 0;
if( ExpPoolFlagsToPoolType(a1, 0i64, PoolType, v14, &v13) < 0 )
return ExAllocatePool3(v9, a2, a3, a4, a5);
if( (MmVerifierData & 0x400000) != 0 && (*(&stru_140CF2E80 + 7308) & 8) == 0 && (MmVerifierData & 1) == 0 )
{
if( (MmVerifierData & 0x2000000) != 0 )
VfCheckPoolType(PoolType[0], CallingAddress, 0i64);
v9 = a1;
return ExAllocatePool3(v9, a2, a3, a4, a5);
}
v11 = PoolType[0] & 0xFFFFFFE7;
VfCheckPoolType((POOL_TYPE)(PoolType[0] & 0xFFFFFFE7), CallingAddress, 0i64);
v12 = v11 | 0x80;
if( XdvEnabled )
result = (VOID *)pXdvExAllocatePool3(
v12,
a2,
a3,
32,
(__int64)CallingAddress,
(__int64)VeAllocatePoolWithTagPriority);
else
result = VeAllocatePoolWithTagPriority(v12, a2, a3, HighPoolPriority, CallingAddress);
if( !result && (a1 & 0x20) != 0 )
RtlRaiseStatus(-1073741670);
return result;
}Referenced by:
No references.