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.