Поделиться через


Метод IPortWaveRTStream::AllocatePagesForMdl (portcls.h)

Метод AllocatePagesForMdl выделяет список невыгребенных страниц физической памяти и возвращает указатель на список дескрипторов памяти (MDL), описывающий их.

Синтаксис

PMDL AllocatePagesForMdl(
  [in] PHYSICAL_ADDRESS HighAddress,
  [in] SIZE_T           TotalBytes
);

Параметры

[in] HighAddress

Указывает высокий конец диапазона адресов, из которого можно выделить хранилище для MDL. Низкий конец диапазона адресов неявно равен нулю.

[in] TotalBytes

Указывает общее количество байтов, выделяемых для MDL. Этот метод всегда выделяет целое количество страниц памяти.

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

AllocatePagesforMdl возвращает указатель на MDL, описывающий список страниц физической памяти. Если методу не удается выделить запрошенный буфер, он возвращает значение NULL.

Комментарии

Так как звуковой стек Windows не поддерживает механизм выражения требований к выравниванию доступа к памяти для буферов, звуковые драйверы должны выбрать тип кэширования для сопоставленных буферов памяти, который не предъявляет требований к выравниванию для конкретной платформы. Другими словами, тип кэширования, используемый аудиодрайвером для сопоставленных буферов памяти, не должен делать предположений о требованиях к выравниванию памяти для какой-либо конкретной платформы.

Драйвер вызывает этот метод для выделения памяти, которую можно сопоставить с режимом пользователя или ядра. Страницы физической памяти в MDL не обязательно являются смежными в физической памяти, но все они попадают в указанный диапазон адресов.

Метод всегда выделяет целое количество страниц. Если доступно достаточно памяти, выделение памяти — это запрошенный размер, округленный до следующей страницы. В противном случае выделение памяти может быть меньше запрошенного размера. Вызывающий объект должен проверить, сколько байтов фактически выделено.

Если контроллер DMA звукового устройства требует, чтобы страницы физической памяти в буфере были смежными, драйвер должен вызвать IPortWaveRTStream::AllocateContiguousPagesForMdl .

Как и функция MmAllocatePagesForMdl , метод выделяет страницы памяти, AllocatePagesforMdl которые заблокированы (не загружены), но не сопоставлены. Если драйвер минипорта хочет настроить программный доступ к этой памяти, драйвер минипорта должен выполнить последующий вызов IPortWaveRTStream::MapAllocatedPages , чтобы сопоставить страницы с адресным пространством в режиме ядра.

Требования

Требование Значение
Минимальная версия клиента Доступно в операционных системах Windows Vista и более поздних версий.
Целевая платформа Универсальное
Верхняя часть portcls.h
IRQL Пассивный уровень

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

IPortWaveRTStream

IPortWaveRTStream::AllocateContiguousPagesForMdl

IPortWaveRTStream::MapAllocatedPages