以非同步方式傳送 I/O 要求

您必須先格式化要求,才能以非同步方式將 I/O 要求傳送至 I/O 目標。 下表列出驅動程式可以呼叫的 I/O 目標物件方法,以格式化 I/O 要求。

方法 目的

WdfIoTargetFormatRequestForRead

格式化讀取要求

WdfIoTargetFormatRequestForWrite

格式化寫入要求

WdfIoTargetFormatRequestForIoctl

格式化裝置控制要求

WdfIoTargetFormatRequestForInternalIoctl

格式化內部裝置控制要求

WdfIoTargetFormatRequestForInternalIoctlOthers

格式化非標準內部裝置控制要求

若要以非同步方式傳送 I/O 要求,您的驅動程式必須:

  1. 格式化要求。

    使用上表中所列的其中一種方法來格式化您的要求。 如需如何使用這些方法的詳細資訊,請參閱方法的參考頁面。

  2. 註冊 CompletionRoutine 回呼函式。

    如果您以非同步方式傳送要求,通常希望架構在另一個驅動程式完成每個要求時通知驅動程式。 您的驅動程式應該定義 CompletionRoutine 回呼函式,並藉由呼叫 WdfRequestSetCompletionRoutine加以註冊。 如需詳細資訊,請參閱 完成 I/O 要求

  3. 傳送要求。

    驅動程式格式化要求並註冊 CompletionRoutine 回呼函式之後,您的驅動程式必須呼叫 WdfRequestSend。 此方法可讓您根據 RequestOptions 參數中設定的旗標,以同步或非同步方式傳送要求。 如需同步傳送 I/O 要求的更簡單方式,請參閱 同步傳送 I/O 要求。 如需如何取得非同步要求或呼叫 WdfRequestSend所傳送之任何要求的完成狀態的相關資訊,請參閱 完成 I/O 要求

呼叫 WdfRequestSend 以傳送 I/O 要求的驅動程式可以稍後嘗試取消要求。 如需詳細資訊,請參閱 取消 I/O 要求

某些驅動程式可能會針對每個要求呼叫 WdfRequestSend 一次以上,將單一 I/O 要求傳送至多個裝置,因而傳送至多個 I/O 目標。 這些驅動程式必須在第一個驅動程式之後呼叫 WdfRequestChangeTarget 之前呼叫 WdfRequestSend ,以確認要求可以傳送至下一個 I/O 目標。