Функция WdfDmaEnablerWdmGetDmaAdapter (wdfdmaenabler.h)
[Относится только к KMDF]
Метод WdfDmaEnablerWdmGetDmaAdapter возвращает указатель на структуру WDM DMA_ADAPTER , связанную с объектом включения DMA.
Синтаксис
PDMA_ADAPTER WdfDmaEnablerWdmGetDmaAdapter(
[in] WDFDMAENABLER DmaEnabler,
[in] WDF_DMA_DIRECTION DmaDirection
);
Параметры
[in] DmaEnabler
Дескриптор объекта включения DMA, который драйвер получил из предыдущего вызова WdfDmaEnablerCreate.
[in] DmaDirection
WDF_DMA_DIRECTION типизированное значение, указывающее направление операции передачи DMA. Дополнительные сведения см. в разделе "Примечания".
Возвращаемое значение
WdfDmaEnablerWdmGetDmaAdapter возвращает указатель на структуру DMA_ADAPTER или ЗНАЧЕНИЕ NULL , если значение параметра DmaDirection недопустимо.
Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Комментарии
Когда драйвер вызывает WdfDmaEnablerCreate, платформа создает отдельный объект адаптера для каждого направления, если драйвер задает дуплексный профиль, и создает один объект адаптера, если драйвер не указывает дуплексный профиль.
Если драйвер указал дуплексный профиль при вызове WdfDmaEnablerCreate, значение параметра DmaDirection метода WdfDmaEnablerWdmGetDmaAdapter должно иметь значение WdfDmaDirectionReadFromDevice для получения структуры DMA_ADAPTER для операций чтения и WdfDmaDirectionWriteToDevice для получения структуры DMA_ADAPTER для операций записи. Если драйвер не указал дуплексный профиль, драйвер может указать WdfDmaDirectionReadFromDevice или WdfDmaDirectionWriteToDevice.
Указатель, возвращаемый WdfDmaEnablerWdmGetDmaAdapter , действителен до тех пор, пока не будет удален объект enabler DMA. Если драйвер предоставляет функцию EvtCleanupCallback для объекта средства включения DMA, указатель будет действителен до тех пор, пока функция обратного вызова не вернет.
Примеры
В следующем примере кода создается объект включения DMA, а затем получаются указатели на структуры WDM DMA_ADAPTER , создаваемые платформой для операций чтения и записи.
NTSTATUS status = STATUS_SUCCESS;
WDF_DMA_ENABLER_CONFIG dmaConfig;
WDFDMAENABLER dmaEnabler;
PDMA_ADAPTER readAdapter, writeAdapter;
WDF_DMA_ENABLER_CONFIG_INIT(
&dmaConfig,
WdfDmaProfileScatterGatherDuplex,
maxLength
);
status = WdfDmaEnablerCreate(
Device,
&dmaConfig,
WDF_NO_OBJECT_ATTRIBUTES,
&dmaEnabler
);
if (!NT_SUCCESS (status)) {
return status;
}
readAdapter = WdfDmaEnablerWdmGetDmaAdapter(
dmaEnabler,
WdfDmaDirectionReadFromDevice
);
writeAdapter = WdfDmaEnablerWdmGetDmaAdapter(
dmaEnabler,
WdfDmaDirectionWriteToDevice
);
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Минимальная версия KMDF | 1.5 |
Верхняя часть | wdfdmaenabler.h (включая Wdf.h) |
Библиотека | Wdf01000.sys (см. раздел Управление версиями библиотеки Платформы). |
IRQL | <=DISPATCH_LEVEL |
Правила соответствия DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |