Функция StorPortAllocateDmaMemory (storport.h)

Эта функция является расширенной версией функции StorPortAllocateContiguousMemorySpecifyCacheNode. Он выделяет диапазон физически непрерывной памяти без кэширования и возвращает физический адрес выделенного буфера.

Синтаксис

ULONG StorPortAllocateDmaMemory(
  [in]           PVOID               HwDeviceExtension,
  [in]           SIZE_T              NumberOfBytes,
  [in]           PHYSICAL_ADDRESS    LowestAcceptableAddress,
  [in]           PHYSICAL_ADDRESS    HighestAcceptableAddress,
  [in, optional] PHYSICAL_ADDRESS    BoundaryAddressMultiple,
  [in]           MEMORY_CACHING_TYPE CacheType,
  [in]           NODE_REQUIREMENT    PreferredNode,
  [out]          PVOID               *BufferPointer,
  [out]          PPHYSICAL_ADDRESS   PhysicalAddress
);

Параметры

[in] HwDeviceExtension

Указатель на расширение аппаратного устройства для адаптера шины узла (HBA).

[in] NumberOfBytes

Количество байтов, которые необходимо выделить.

[in] LowestAcceptableAddress

Наименьший физический адрес, допустимый для выделения. Например, если устройство может ссылаться только на физическую память в диапазоне от 8 ДО 16 МБ, это значение будет равно 0x800000 (8 МБ).

[in] HighestAcceptableAddress

Максимальный физический адрес, допустимый для выделения. Например, если устройство может ссылаться только на физическую память менее 16 МБ, это значение будет иметь значение 0xFFFFFF (16 МБ – 1).

[in, optional] BoundaryAddressMultiple

Физическое число адресов, которое не должно пересекать это выделение.

[in] CacheType

Требуемый тип кэша для сопоставления.

[in] PreferredNode

Предпочтительный узел, с которого должно выполняться выделение, если страницы доступны на этом узле.

[out] BufferPointer

Переменная, получающая начальный адрес выделенного блока памяти. При возвращении из этой подпрограммы, если эта переменная равна нулю, не удалось найти непрерывный диапазон, удовлетворяющий запросу. Если эта переменная не имеет значение NULL, она содержит указатель (например, виртуальный адрес в несыпаченной части системы) на выделенную физически непрерывную память.

[out] PhysicalAddress

Физический адрес выделенного блока памяти.

Возвращаемое значение

Эта функция возвращает код STOR_STATUS.

Код возврата Описание
STOR_STATUS_NOT_IMPLEMENTED Эта функция не реализована в активной операционной системе.
STOR_STATUS_SUCCESS Операция выполнена успешно.
STOR_STATUS_INSUFFICIENT_RESOURCES Операция не смогла выделить запрошенную память из-за нехватки ресурсов.

Комментарии

Если запрос завершается сбоем, BufferPointer будет иметь значение NULL.

Требования

Требование Значение
Минимальная версия клиента Windows 10 (версия 1803)
Целевая платформа Универсальное
Верхняя часть storport.h
Правила соответствия DDI StorPortIrql

См. также раздел

StorPortFreeDmaMemory