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.