[僅適用於 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 啟用器搭配使用。
架構型驅動程式在初始化 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) |