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 |
目標平台 | Universal |
最低 KMDF 版本 | 1.11 |
標頭 | wdfdmatransaction.h (包含 Wdf.h) |
程式庫 | Wdf01000.sys (請參閱 Framework Library Versioning.) |
IRQL | <=DISPATCH_LEVEL |
DDI 合規性規則 | DriverCreate (kmdf) |