次の方法で共有


UMDF での一般 I/O ターゲットへの 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 要求を同期的に送信する場合、ドライバー スレッドは要求を一度に 1 つずつ送信します。 スレッドは、要求が完了するまで待機してから、次の要求を送信します。 このプロセスは、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 フラグを フラグ パラメーターに渡します。 それ以外の場合、ドライバーは I/O 要求を非同期的に送信します。 ドライバーが I/O 要求を非同期的に送信する場合、ドライバーは通常、別のドライバーが要求を完了したときに通知を必要とします。 ドライバーは、IRequestCallbackRequestCompletion::OnCompletion コールバック関数を定義し、IWDFIoRequest::SetCompletionCallback メソッドを呼び出して登録する必要があります。 詳細については、「I/O 要求の完了」を参照してください。

IWDFIoRequest::Send を呼び出して I/O 要求を送信するドライバーは、IWDFIoRequest::CancelSentRequest メソッドを呼び出すことによって、後で要求のキャンセルを試みることができます。 ドライバーがフレームワークから受信した I/O 要求をキャンセルした場合、ドライバーは常に、CompletionStatus パラメーターを STATUS_CANCELLED に設定して IWDFIoRequest::Complete または IWDFIoRequest::CompleteWithInformation メソッドを呼び出して要求を完了する必要があります。 ドライバーが要求オブジェクトを作成した場合、ドライバーは要求を完了する代わりに IWDFObject::D eleteWdfObject を呼び出します。