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 を複数回呼び出すことで、1 つの I/O 要求を複数のデバイス、つまり複数の I/O ターゲットに送信する場合があります。 これらのドライバーは、最初の呼び出しの後、WdfRequestSend の各呼び出しの前に WdfRequestChangeTarget を呼び出して、要求が次の I/O ターゲットに送信できることを確認する必要があります。