Функция WdfDmaEnablerCreate (wdfdmaenabler.h)
[Относится только к KMDF]
Метод WdfDmaEnablerCreate создает объект enabler DMA.
Синтаксис
NTSTATUS WdfDmaEnablerCreate(
[in] WDFDEVICE Device,
[in] PWDF_DMA_ENABLER_CONFIG Config,
[in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
[out] WDFDMAENABLER *DmaEnablerHandle
);
Параметры
[in] Device
Дескриптор объекта устройства платформы.
[in] Config
Указатель на структуру WDF_DMA_ENABLER_CONFIG . Драйверы должны инициализировать эту структуру, вызвав WDF_DMA_ENABLER_CONFIG_INIT.
[in, optional] Attributes
Указатель на структуру WDF_OBJECT_ATTRIBUTES , которая задает атрибуты объекта для нового объекта включения DMA. Этот параметр является необязательным и может быть WDF_NO_OBJECT_ATTRIBUTES.
[out] DmaEnablerHandle
Дескриптор нового объекта включения DMA.
Возвращаемое значение
WdfDmaEnablerCreate возвращает STATUS_SUCCESS, если операция выполнена успешно. В противном случае метод может вернуть одно из следующих значений.
Код возврата | Описание |
---|---|
|
Обнаружен недопустимый параметр. |
|
Недостаточно памяти для создания нового объекта включения DMA. |
|
Неправильный размер структуры WDF_DMA_ENABLER_CONFIG . |
|
Драйвер запросил DMA версии 3 в операционной системе раньше, чем Windows 8. |
Список других возвращаемых значений, которые может возвращать метод WdfDmaEnablerCreate , см. в разделе Ошибки создания объектов платформы.
Этот метод также может возвращать другие значения NTSTATUS.
Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Комментарии
Драйверы на основе платформы должны вызывать WdfDmaEnablerCreate перед созданием транзакций DMA для устройства.
Прежде чем драйвер вызывает WdfDmaEnablerCreate, он должен вызвать WdfDeviceSetAlignmentRequirement.
Объект устройства платформы, который задается параметром Deviceобъекта WdfDmaEnablerCreate , всегда становится родительским объектом для нового объекта включения DMA. Если драйвер указывает другой родительский элемент в элементе ParentObjectструктуры WDF_OBJECT_ATTRIBUTES , платформа игнорирует это значение. Платформа удаляет объект включения DMA при удалении родительского объекта.
При вызове с параметром Config , который запрашивает профиль DMA в системном режиме, WdfDmaEnablerCreate создает частично инициализированный активатор DMA. Драйвер должен впоследствии вызвать WdfDmaEnablerConfigureSystemProfile , чтобы настроить параметры DMA для базовых каналов.
Дополнительные сведения об объектах включения DMA и WdfDmaEnablerCreate см. в разделе Включение транзакций DMA.
Примеры
Следующий пример кода получен из примера драйвера PLX9x5x . В этом примере устанавливается требование устройства к выравниванию буфера, инициализируется структура WDF_DMA_ENABLER_CONFIG и вызывается WdfDmaEnablerCreate.
//
// PLx PCI9656 DMA_TRANSFER_ELEMENTS must be 16-byte aligned.
//
WdfDeviceSetAlignmentRequirement(
DevExt->WdfDevice,
PCI9656_DTE_ALIGNMENT_16
);
//
// Create a new DMA enabler object instance.
// Use scatter/gather, 64-bit addresses, and duplex-type profile.
//
{
WDF_DMA_ENABLER_CONFIG dmaConfig;
WDF_DMA_ENABLER_CONFIG_INIT(
&dmaConfig,
WdfDmaProfileScatterGather64Duplex,
DevExt->MaximumTransferLength
);
status = WdfDmaEnablerCreate(
DevExt->WdfDevice,
&dmaConfig,
WDF_NO_OBJECT_ATTRIBUTES,
&DevExt->DmaEnabler
);
if (!NT_SUCCESS (status)) {
// Cannot continue, so release device resources.
return status;
}
}
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Минимальная версия KMDF | 1,0 |
Верхняя часть | wdfdmaenabler.h (включая Wdf.h) |
Библиотека | Wdf01000.sys (см. раздел Управление версиями библиотеки Платформы). |
IRQL | PASSIVE_LEVEL |
Правила соответствия DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |