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)
图书馆 Wdf01000.sys(请参阅框架库版本控制。
IRQL <=DISPATCH_LEVEL
DDI 符合性规则 DriverCreate(kmdf)

另请参阅

WDF_DMA_SYSTEM_PROFILE_CONFIG