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


Функция WdfDmaEnablerCreate (wdfdmaenabler.h)

[Применимо только к 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.

STATUS_INFO_LENGTH_MISMATCH
Неправильный размер структуры WDF_DMA_ENABLER_CONFIG.
STATUS_NOT_SUPPORTED
Драйвер запросил 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)

См. также

WDF_DMA_ENABLER_CONFIG

WDF_DMA_ENABLER_CONFIG_INIT

WDF_OBJECT_ATTRIBUTES

WdfDeviceSetAlignmentRequirement