WdfDmaTransactionSetDeviceAddressOffset 函数 (wdfdmatransaction.h)

[仅适用于 KMDF]

WdfDmaTransactionSetDeviceAddressOffset 方法指定系统 DMA 控制器在执行 DMA 操作时将访问的寄存器的偏移量。

语法

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

参数

[in] DmaTransaction

DMA 事务对象的句柄,该对象指定要修改的事务。

[in] Offset

寄存器的偏移量,从 WDF_DMA_SYSTEM_PROFILE_CONFIG 中指定的 DeviceAddress,到或从中执行 DMA。

返回值

备注

WdfDmaTransactionSetDeviceAddressOffset 必须与指定系统模式 DMA 配置文件的 DMA 启用程序一起使用。

基于框架的驱动程序在初始化 DMA 事务后和执行它之前调用 WdfDmaTransactionSetDeviceAddressOffset

驱动程序可以使用此方法访问设备注册文件中的多个寄存器。

例如,驱动程序可以使用 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 (包括 Wdf.h)
Library Wdf01000.sys (请参阅框架库版本控制.)
IRQL <=DISPATCH_LEVEL
DDI 符合性规则 DriverCreate (kmdf)

另请参阅

WDF_DMA_SYSTEM_PROFILE_CONFIG