VerifierExAllocatePool2

VOID __fastcall VerifierExAllocatePool2(UINT64 a1, INT64 a2, INT64 a3, INT64 a4){
  unsigned int v5; 
  INT64 v7; 
  unsigned __int32 v8; 
  _POOL_TYPE v9; 
  VOID *PoolWithTagPriority; 
  char v11[4]; 
  _POOL_TYPE PoolType[5]; 
  VOID *CallingAddress; 
  BYTE v14; 
  PoolType[0] = NonPagedPool;
  v5 = a3;
  if( (int)ExpPoolFlagsToPoolType(a1, 0i64, (INT64 *)PoolType, (BYTE *)v11, &v14) < 0 )
  {
LABEL_2:
    ExAllocatePool2(v7, a2, v5);
    return;
  }
  if( (MmVerifierData & 0x400000) != 0 && (VfRuleClasses & 0x800000000i64) == 0 && (MmVerifierData & 1) == 0 )
  {
    if( (MmVerifierData & 0x2000000) != 0 )
      VfCheckPoolType(PoolType[0], CallingAddress, 0i64);
    v7 = a1;
    goto LABEL_2;
  }
  v8 = PoolType[0] & 0xFFFFFFE7;
  VfCheckPoolType((_POOL_TYPE)(PoolType[0] & 0xFFFFFFE7), CallingAddress, 0i64);
  v9 = v8 | 0x80;
  if( XdvEnabled )
    PoolWithTagPriority = (VOID *)pXdvExAllocatePool2[0](
                                    v9,
                                    a2,
                                    v5,
                                    32,
                                    (__int64)CallingAddress,
                                    (__int64)VeAllocatePoolWithTagPriority);
  else
    PoolWithTagPriority = VeAllocatePoolWithTagPriority(v9, a2, v5, HighPoolPriority, CallingAddress);
  if( !PoolWithTagPriority && (a1 & 0x20) != 0 )
    RtlRaiseStatus(-1073741670);
}

Referenced by:

No references.