Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Применимо только к KMDF]
Метод WdfDmaEnablerCreate создает объект включения 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.
Объект устройства платформы, который параметр устройстваWdfDmaEnablerCreate всегда становится родительским объектом для нового объекта включения DMA. Если драйвер задает другой родительский элемент в элементе ParentObject структуры WDF_OBJECT_ATTRIBUTES, платформа игнорирует это значение. Платформа удаляет объект включения DMA при удалении родительского объекта.
При вызове с параметром конфигурации, который запрашивает профиль 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 (include Wdf.h) |
| Библиотека | Wdf01000.sys (см. управление версиями библиотеки Платформы).) |
| IRQL | PASSIVE_LEVEL |
| правил соответствия DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |