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


Функция WdfDmaTransactionSetDeviceAddressOffset (wdfdmatransaction.h)

[Применимо только к KMDF]

Метод WdfDmaTransactionSetDeviceAddressOffset указывает смещение регистра, к которому будет обращаться контроллер DMA системы при выполнении операции DMA.

Синтаксис

void WdfDmaTransactionSetDeviceAddressOffset(
  [in] WDFDMATRANSACTION DmaTransaction,
  [in] ULONG             Offset
);

Параметры

[in] DmaTransaction

Дескриптор объекта транзакции DMA, указывающий транзакцию для изменения.

[in] Offset

Смещение регистра из DeviceAddress, указанного в WDF_DMA_SYSTEM_PROFILE_CONFIG, в то или из которого необходимо выполнить DMA.

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

Нет

Замечания

WdfDmaTransactionSetDeviceAddressOffset необходимо использовать с модулем DMA, указывающим профиль DMA в системном режиме.

Драйверы на основе платформы вызывают WdfDmaTransactionSetDeviceAddressOffset после инициализации транзакции DMA и перед его выполнением.

Драйвер может использовать этот метод для доступа к нескольким регистрам в файле регистрации устройства.

Например, драйвер может использовать DMA для доступа к отдельным регистрам чтения и записи в файле регистрации устройства.

Для этого драйвер задает базовый адрес файла регистрации устройства при настройке включения, а затем задает смещение регистра чтения или записи при необходимости перед выполнением транзакции.

Если драйвер вызывает этот метод в операционной системе раньше Windows 8, проверяющего средства платформы сообщает об ошибке.

Примеры

В следующем примере кода инициализируется транзакция DMA. Затем он задает смещение регистра, к которому будет обращаться контроллер DMA системы, предоставляет подпрограмму обратного вызова завершения передачи и выполняет транзакцию DMA.

status = WdfDmaTransactionInitialize(
                                     RequestContext->DmaTransaction,
                                     EvtProgramDma,
                                     direction,
                                     mdl,
                                     startingVa,
                                     length
                                     );

if(!NT_SUCCESS(status)) {
    goto Complete;
}

WdfDmaTransactionSetDeviceAddressOffset(
                                        RequestContext->DmaTransaction,
                                        READ_DATA_REGISTER_OFFSET
                                        );

WdfDmaTransactionSetTransferCompleteCallback(
                                             RequestContext->DmaTransaction,
                                             EvtDmaTransactionDmaTransferComplete,
                                             RequestContext
                                             );

status = WdfDmaTransactionExecute(
                                  RequestContext->DmaTransaction, 
                                  RequestContext );

if(!NT_SUCCESS(status)) {
    goto Complete;
}

return status;

Complete:

WdfDmaTransactionRelease(
                         RequestContext->DmaTransaction
                         );

Требования

Требование Ценность
Минимально поддерживаемый клиент Windows 8
целевая платформа универсальный
минимальная версия KMDF 1.11
Заголовок wdfdmatransaction.h (include Wdf.h)
Библиотека Wdf01000.sys (см. управление версиями библиотеки Платформы).)
IRQL <=DISPATCH_LEVEL
правил соответствия DDI DriverCreate(kmdf)

См. также

WDF_DMA_SYSTEM_PROFILE_CONFIG