[僅適用於 KMDF]
WdfDmaTransactionInitializeUsingRequest 方法會使用指定 I/O 要求的參數,初始化指定的 DMA 交易。
語法
NTSTATUS WdfDmaTransactionInitializeUsingRequest(
[in] WDFDMATRANSACTION DmaTransaction,
[in] WDFREQUEST Request,
[in] PFN_WDF_PROGRAM_DMA EvtProgramDmaFunction,
[in] WDF_DMA_DIRECTION DmaDirection
);
參數
[in] DmaTransaction
驅動程式從先前呼叫 WdfDmaTransactionCreate取得的 DMA 交易物件的句柄。
[in] Request
架構要求物件的句柄。
[in] EvtProgramDmaFunction
驅動程式 EvtProgramDma 事件回呼函式的指標。
[in] DmaDirection
指定 DMA 傳輸方向的 WDF_DMA_DIRECTION型別值。
返回值
如果作業成功,WdfDmaTransactionInitializeUsingRequest 會傳回STATUS_SUCCESS。 否則,方法可能會傳回 WdfDmaTransactionInitialize的 Return values 區段中所述的其中一個值。
此方法也可能 傳回其他NTSTATUS 值。
如果驅動程式提供無效的物件句柄,就會發生錯誤檢查。
備註
WdfDmaTransactionInitializeUsingRequest 方法會執行 DMA 作業,方法是執行初始化作業,例如設定交易的散佈/收集清單。 在驅動程式呼叫 WdfDmaTransactionInitializeUsingRequest之後,驅動程式必須呼叫 WdfDmaTransactionExecute。
驅動程式可以呼叫 WdfRequestGetParameters,以取得要求的型別。 驅動程式為 DmaDirection 參數指定的值必須適用於要求類型,如下所示:
- 如果下列狀況,DmaDirection 值必須 WdfDmaDirectionReadFromDevice:
- 要求類型 WdfRequestTypeRead
- 要求類型 WdfRequestTypeDeviceControl 或 WdfRequestTypeDeviceControlInternal,而 I/O 控件程式代碼會指定METHOD_OUT_DIRECT的傳輸類型
-
DmaDirection 值必須 WdfDmaDirectionWriteToDevice:
- 要求類型 WdfRequestTypeWrite
- 要求類型是 WdfRequestTypeDeviceControl 或 WdfRequestTypeDeviceControlInternal,而 I/O 控件程式代碼會指定METHOD_IN_DIRECT的傳輸類型
架構型驅動程式通常會從 I/O 佇列事件回呼函式內呼叫 WdfDmaTransactionInitializeUsingRequest。
如果您要建立以架構要求物件所包含的資訊為基礎的 DMA 交易,驅動程式應該呼叫 WdfDmaTransactionInitializeUsingRequest。 如果您要建立不是以要求對象為基礎的 DMA 交易,請使用 WdfDmaTransactionInitialize。
如果要求物件描述的緩衝區大於驅動程式在呼叫 WdfDmaEnablerCreate 或 WdfDmaTransactionSetMaximumLength時所指定的傳輸長度上限,則架構會將交易分成多個 傳輸。
如需 DMA 交易的詳細資訊,請參閱 建立和初始化 DMA 交易。
範例
如需使用 WdfDmaTransactionInitializeUsingRequest的程式代碼範例,請參閱 WdfDmaTransactionExecute。
需求
要求 | 價值 |
---|---|
目標平臺 | 普遍 |
最低 KMDF 版本 | 1.0 |
標題 | wdfdmatransaction.h (包括 Wdf.h) |
程式庫 | Wdf01000.sys (請參閱架構連結庫版本控制。) |
IRQL | <=DISPATCH_LEVEL |
DDI 合規性規則 | DeferredRequestCompleted(kmdf),DriverCreate(kmdf),KmdfIrql(kmdf),KmdfIrql2(kmdf),KmdfIrqlExplicit(kmdf),RequestCompleted(kmdf),RequestCompletedLocal(kmdf) |