要求ハンドラー

ドライバーが I/O キューの順次ディスパッチ メソッドまたは並列ディスパッチ メソッドのいずれかを指定している場合、フレームワークは、キューのいずれかの要求をドライバーに提供する準備が整うたびに、ドライバーが指定したコールバック関数を呼び出します。

各 I/O キューに対して、ドライバーは、要求ハンドラーと呼ばれる次のコールバック関数の 1 つ以上を提供できます。

EvtIoRead
読み取り要求がキューで使用可能な場合、フレームワークは I/O キューの EvtIoRead コールバック関数を呼び出します。

EvtIoWrite
書き込み要求がキューで使用可能な場合、フレームワークは I/O キューの EvtIoWrite コールバック関数を呼び出します。

EvtIoDeviceControl
デバイス I/O 制御要求がキューで使用できる場合、フレームワークは I/O キューの EvtIoDeviceControl コールバック関数を呼び出します。

EvtIoInternalDeviceControl
内部デバイス I/O 制御要求がキューで使用できる場合、フレームワークは I/O キューの EvtIoInternalDeviceControl コールバック関数を呼び出します。

EvtIoDefault
フレームワークは、ドライバーが関連付けられている要求タイプ固有のコールバック関数を提供していない場合、任意の要求が使用可能な時に、I/O キューの EvtIoDefault コールバック関数を呼び出します。

ドライバーは、デバイスの I/O キューを作成する WdfIoQueueCreate を呼び出すときにコールバック関数を登録します。

これらの各コールバック関数は、2 つの入力引数を受け取ります。フレームワークがドライバーに提供する I/O 要求のハンドルと、要求を保持している I/O キューへのハンドルです。 コールバック関数は、WdfIoQueueGetDevice を呼び出すことによってターゲット デバイスを決定できます。

フレームワークは、任意のスレッド コンテキストでドライバーの要求ハンドラーを呼び出します。 ドライバーは、任意のスレッド コンテキストで実行されている間、長時間にわたって待機しないでください。 場合によっては、ドライバーがカーネル ディスパッチャー オブジェクトを同期メカニズムとして使用することがあります。 ドライバーがディスパッチャー オブジェクトを待機できるタイミングとできない場合の対処方法については、「カーネル ディスパッチャー オブジェクトの概要」を参照してください。