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


Функция IoGetDmaAdapter (wdm.h)

Подпрограмма ioGetDmaAdapter возвращает указатель на структуру адаптера DMA для физического объекта устройства.

Синтаксис

_DMA_ADAPTER * IoGetDmaAdapter(
  [in, optional] PDEVICE_OBJECT      PhysicalDeviceObject,
  [in]           _DEVICE_DESCRIPTION *DeviceDescription,
  [out]          PULONG              NumberOfMapRegisters
);

Параметры

[in, optional] PhysicalDeviceObject

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

[in] DeviceDescription

Указатель на структуру DEVICE_DESCRIPTION, которая описывает атрибуты физического устройства. Независимо от набора версий в структуре DEVICE_DESCRIPTION эта функция всегда возвращает DMA_ADAPTER->Version == 1.

[out] NumberOfMapRegisters

Указатель на выходные данные — максимальное количество регистров карты, которые драйвер может выделить для любой операции передачи DMA.

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

IoGetDmaAdapter возвращает указатель на структуру DMA_ADAPTER, которая содержит указатели на функции, поддерживающие системные операции DMA. Если структура не может быть выделена, подпрограмма возвращает NULL. См. комментарий версии, приведенный выше, в описании параметра DeviceDescription.

Замечания

Перед вызовом этой подпрограммы драйвер должен инициализировать структуру DEVICE_DESCRIPTION, на которую указывает DeviceDescription, а затем добавить соответствующую информацию для своего устройства в эту структуру.

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

  • Если драйвер задает элемент версии структуры DEVICE_DESCRIPTION DEVICE_DESCRIPTION_VERSION или DEVICE_DESCRIPTION_VERSION1, возвращенная структура DMA_ADAPTER указывает на версию 1 структуры DMA_OPERATIONS.

  • Если драйвер задает версии = DEVICE_DESCRIPTION_VERSION2, возвращенная структура DMA_ADAPTER указывает на версию 2 структуры DMA_OPERATIONS, если поддерживается версия 2; в противном случае подпрограмма возвращает NULL. Драйверы должны проверить, поддерживается ли версия 2, прежде чем пытаться использовать любую функцию версии 2.

  • Если драйвер задает версии = DEVICE_DESCRIPTION_VERSION3, возвращенная структура DMA_ADAPTER указывает на версию 3 структуры DMA_OPERATIONS, если поддерживается версия 3; в противном случае подпрограмма возвращает NULL. Драйверы должны проверить, поддерживается ли версия 3, прежде чем пытаться использовать любую функцию версии 3. Версия 3 поддерживается начиная с Windows 8.

Драйвер PnP вызывает IoGetDmaAdapter при вызове процедуры AddDevice или при обработке запроса IRP_MN_START_DEVICE PnP на устройство. Этот IRP содержит сведения о аппаратных ресурсах устройства, которые драйвер должен предоставить в структуре DeviceDescription.

Вызывающий объект использует элемент MaximumLength в структуре DeviceDescription, чтобы указать оптимальное количество регистров карты, которые он может использовать. Диспетчер операций ввода-вывода попытается выделить достаточно регистров карты для размещения операции передачи DMA этого максимального размера. В выходных данных диспетчер ввода-вывода возвращается в параметре NumberOfMapRegisters число регистров карты, выделенных им. Драйверы должны проверить возвращаемое значение; Нет гарантии, что драйвер получит то же количество регистров карты, которые он запрашивал.

Чтобы освободить объект адаптера, драйвер должен вызвать PutDmaAdapter через указатель, возвращенный в структуре DMA_ADAPTER.

Как описано ранее, IoGetDmaAdapter возвращает NULL, если она не поддерживает версию структуры DMA_ADAPTER, указанной DeviceDescription->version. Вызывающие пользователи должны полагаться на это поведение, чтобы определить, возвращает ли подпрограмма указатель на запрошенную версию структуры DMA_ADAPTER. Если IoGetDmaAdapter возвращает указатель на версию 1 или версию 2 или версию 3 структуры DMA_ADAPTER, версия этой структуры всегда имеет значение 1. Таким образом, вызывающий объект не может использовать элемент версии возвращаемой структуры DMA_ADAPTER для различения версий 1, 2 и 3 этой структуры.

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
правил соответствия DDI HwStorPortProhibitedDIs(storport), IrqlIoPassive5(wdm), PowerIrpDDis(wdm)

См. также

AddDevice

DEVICE_DESCRIPTION

DMA_ADAPTER

DMA_OPERATIONS

IRP_MN_START_DEVICE

PutDmaAdapter