MmAllocatePartitionNodePagesForMdlEx

MDL *__stdcall MmAllocatePartitionNodePagesForMdlEx(
        LARGE_INTEGER LowAddress,
        LARGE_INTEGER HighAddress,
        LARGE_INTEGER SkipBytes,
        UINT64 TotalBytes,
        MEMORY_CACHING_TYPE CacheType,
        UINT64 IdealNode,
        UINT64 Flags,
        PVOID PartitionObject){
  MEMORY_CACHING_TYPE CacheAttribute; 
  int v13; 
  _MI_PARTITION *v14; 
  UINT64 v16; 
  if( (unsigned int)IdealNode >= (unsigned __int16)KeNumberNodes )
    return 0i64;
  CacheAttribute = CacheType;
  if( CacheType == MmNotMapped || CacheType > MmWriteCombined )
    CacheAttribute = MmHardwareCoherentCached;
  v13 = Flags;
  if( (Flags & 0xFFFFF800) != 0 )
    return 0i64;
  if( (Flags & 0x60) == 32 )
  {
    v13 = Flags | 0x10;
    if( SkipBytes.QuadPart )
    {
      if( ((SkipBytes.QuadPart - 1) & SkipBytes.QuadPart) != 0
        || SkipBytes.QuadPart < 4096
        || TotalBytes % SkipBytes.LowPart )
      {
        return 0i64;
      }
    }
    else
    {
      v13 = Flags | 0x14;
    }
  }
  if( (v13 & 0x100) == 0 || (v13 & 4) == 0 && !KeGetCurrentIrql() )
  {
    LODWORD(v14) = MiPartitionObjectToPartition(PartitionObject);
    if( v14 )
    {
      LODWORD(v16) = v13;
      return MiAllocatePagesForMdl(
               v14,
               LowAddress,
               HighAddress,
               SkipBytes,
               TotalBytes,
               (_MI_PFN_CACHE_ATTRIBUTE)CacheAttribute,
               IdealNode,
               v16);
    }
  }
  return 0i64;
}

Referenced by:

EtwpAllocatePartitionMemory
HalAllocateCommonBufferVector
HalpAllocateCommonBufferThin
HvlpDepositPages
IopLiveDumpAllocateFromVMMemoryPartition
KiComputeNumaCosts
MmAllocateNodePagesForMdlEx
MmAllocatePagesForMdlEx
MmAllocateSecureKernelPages