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


функция обратного вызова PALLOCATE_COMMON_BUFFER_WITH_BOUNDS (wdm.h)

Эта функция обратного вызова выделяет память для общего буфера и сопоставляет ее таким образом, чтобы к ней могли обращаться master устройство и ЦП. Общий буфер может быть привязан необязательным минимальным и максимальным логическим адресом.

Синтаксис

PALLOCATE_COMMON_BUFFER_WITH_BOUNDS PallocateCommonBufferWithBounds;

PVOID PallocateCommonBufferWithBounds(
  [in]           PDMA_ADAPTER DmaAdapter,
  [in, optional] PPHYSICAL_ADDRESS MinimumAddress,
  [in, optional] PPHYSICAL_ADDRESS MaximumAddress,
  [in]           ULONG Length,
  [in]           ULONG Flags,
  [in, optional] MEMORY_CACHING_TYPE *CacheType,
  [in]           NODE_REQUIREMENT PreferredNode,
  [out]          PPHYSICAL_ADDRESS LogicalAddress
)
{...}

Параметры

[in] DmaAdapter

Указатель на структуру DMA_ADAPTER. Эта структура представляет собой объект адаптера, представляющий master устройства DMA или системного канала DMA водителя. Вызывающий объект получил этот указатель из предыдущего вызова процедуры IoGetDmaAdapter .

[in, optional] MinimumAddress

Указатель на переменную, содержащую минимальный логический адрес общего буфера. Этот параметр указывает, что буфер должен быть выделен из памяти по адресу и выше. Этот параметр является необязательным и может быть указан как NULL, чтобы указать, что минимальный адрес отсутствует.

[in, optional] MaximumAddress

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

[in] Length

Размер (в байтах) общего буфера, выделяемого для операции DMA.

[in] Flags

Размер (в байтах) общего буфера, выделяемого для операции DMA.

Flag Значение
DOMAIN_COMMON_BUFFER_LARGE_PAGE Общий буфер будет выделен с использованием большей детализации страницы PAGE_SIZE * 512. Обратите внимание, что это может увеличить вероятность неудачного выделения.

[in, optional] CacheType

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

[in] PreferredNode

Предпочтительный узел NUMA, из которого будет выделена память. Если N — это число узлов NUMA в многопроцессорной системе, PreferredNode — это число в диапазоне от 0 до N–1. Для однопроцессорной системы или многопроцессорной системы, отличной от NUMA, задайте для PreferredNode значение 0.

[out] LogicalAddress

Указатель на переменную, в которую эта подпрограмма записывает логический адрес, который устройство может использовать для доступа к общему буферу. Устройство DMA должно использовать этот логический адрес вместо физического адреса, возвращаемого подпрограммой, такой как MmGetPhysicalAddress.

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

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

Комментарии

Эта функция обратного вызова является расширенной версией подпрограммы PALLOCATE_COMMON_BUFFER_EX . В следующем списке перечислены функции, доступные только в расширенной версии:

  • Вызывающий объект может указать минимальный логический адрес для общего буфера, который должен быть выделен.

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

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

Требования

Требование Значение
Минимальная версия клиента Windows 10 версии 1803
Целевая платформа Персональный компьютер
Верхняя часть wdm.h (включая Wdm.h)
IRQL PASSIVE_LEVEL

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

DMA_OPERATIONS

PALLOCATE_COMMON_BUFFER_EX