共用方式為


將 I/O 要求傳送至 UMDF 中的一般 I/O 目標

警告

UMDF 2 是最新版的 UMDF,並取代 UMDF 1。 所有新的 UMDF 驅動程式都應該使用 UMDF 2 撰寫。 未將新功能新增至 UMDF 1,且較新版本的WINDOWS 10上,UMDF 1 的支援有限。 通用 Windows 驅動程式必須使用 UMDF 2。

封存的 UMDF 1 範例可在Windows 11 22H2 - 2022 年 5 月驅動程式範例更新中找到。

如需詳細資訊,請參閱使用 UMDF 消費者入門

UMDF 驅動程式可以同步或非同步地將 I/O 要求傳送至一般 I/O 目標。

如果驅動程式同步傳送 I/O 要求,驅動程式執行緒會一次傳送一個要求。 執行緒會等候每個要求完成,再傳送下一個要求。 此程式比以非同步方式傳送 I/O 要求更簡單。 如果驅動程式未傳送許多要求,而且驅動程式在等候每個 I/O 要求時不會降低系統或裝置效能,則驅動程式可以同步傳送 I/O 要求。

如果驅動程式以非同步方式傳送 I/O 要求,驅動程式執行緒會在要求準備好傳送時立即傳送每個要求,而不需要等候先前傳送的要求完成。 如果驅動程式必須在短時間內處理許多 I/O 要求,驅動程式可能無法等待每個要求完成,再傳送下一個要求。 否則,驅動程式可能會遺失其裝置的資料或效能,而且可能降低整個系統的效能。

在 UMDF 驅動程式可以將 I/O 要求傳送至 I/O 目標之前,驅動程式必須格式化要求。 下表列出驅動程式可以呼叫以格式化 I/O 要求的方法。 驅動程式可以使用這些方法來格式化驅動程式在其其中一個 I/O 佇列中接收的要求,或驅動程式所建立的要求。

方法 目的

IWDFIoRequest::FormatUsingCurrentType

格式化驅動程式從架構收到的要求,讓驅動程式可以將要求未經修改地傳送至目標

IWDFIoTarget::FormatRequestForIoctl

設定裝置控制要求的格式

IWDFIoTarget::FormatRequestForRead

格式化讀取要求

IWDFIoTarget::FormatRequestForWrite

格式化寫入要求

IWDFIoTarget2::FormatRequestForFlush

格式化要求以排清緩衝區。

IWDFIoTarget2::FormatRequestForQueryInformation

格式化要求以取得檔案資訊。

IWDFIoTarget2::FormatRequestForSetInformation

格式化要求以設定檔案資訊。

若要將 I/O 要求傳送至 I/O 目標,驅動程式會呼叫 IWDFIoRequest::Send 方法。 若要同步傳送 I/O 要求,驅動程式會將WDF_REQUEST_SEND_OPTION_SYNCHRONOUS旗標傳遞至 Flags 參數。 否則,驅動程式會以非同步方式傳送 I/O 要求。 如果驅動程式以非同步方式傳送 I/O 要求,驅動程式通常需要在另一個驅動程式完成要求時通知。 驅動程式應該定義 IRequestCallbackRequestCompletion::OnCompletion 回 呼函式,並藉由呼叫 IWDFIoRequest::SetCompletionCallback 方法來註冊它。 如需詳細資訊,請參閱 完成 I/O 要求

呼叫 IWDFIoRequest::Send 以傳送 I/O 要求的驅動程式,稍後可以呼叫 IWDFIoRequest::CancelSentRequest 方法來嘗試取消要求。 如果驅動程式取消從架構接收驅動程式的 I/O 要求,則驅動程式必須一律呼叫 IWDFIoRequest::CompleteIWDFIoRequest::CompleteWithInformation 方法,並將 CompletionStatus 參數設定為 STATUS_CANCELLED 來完成要求。 如果驅動程式建立了要求物件,驅動程式會呼叫 IWDFObject::D eleteWdfObject ,而不是完成要求。