共用方式為


WdfDmaTransactionInitializeUsingRequest 函式 (wdfdmatransaction.h)

[僅適用於 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
    • 要求類型 WdfRequestTypeDeviceControlWdfRequestTypeDeviceControlInternal,而 I/O 控件程式代碼會指定METHOD_OUT_DIRECT的傳輸類型
  • DmaDirection 值必須 WdfDmaDirectionWriteToDevice
    • 要求類型 WdfRequestTypeWrite
    • 要求類型是 WdfRequestTypeDeviceControlWdfRequestTypeDeviceControlInternal,而 I/O 控件程式代碼會指定METHOD_IN_DIRECT的傳輸類型
如需 I/O 控制碼傳輸類型的詳細資訊,請參閱 定義 I/O 控制碼

架構型驅動程式通常會從 I/O 佇列事件回呼函式內呼叫 WdfDmaTransactionInitializeUsingRequest

如果您要建立以架構要求物件所包含的資訊為基礎的 DMA 交易,驅動程式應該呼叫 WdfDmaTransactionInitializeUsingRequest。 如果您要建立不是以要求對象為基礎的 DMA 交易,請使用 WdfDmaTransactionInitialize

如果要求物件描述的緩衝區大於驅動程式在呼叫 WdfDmaEnablerCreateWdfDmaTransactionSetMaximumLength時所指定的傳輸長度上限,則架構會將交易分成多個 傳輸

如需 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)

另請參閱

EvtProgramDma

WDF_DMA_DIRECTION

WdfDmaEnablerSetMaximumScatterGatherElements

WdfDmaTransactionCreate

WdfDmaTransactionExecute

WdfDmaTransactionInitialize