次の方法で共有


IoCompletion ルーチンの使用

下位レベルのドライバーが特定の要求を実行した方法を IRP 固有の基準で監視する上位レベルのドライバーは、1 つ以上 の IoCompletion ルーチンを持つことができます。 下位ドライバーに要求を送信する IRP を割り当てる上位レベルのドライバーには、IoCompletion ルーチンが必要です。

最上位レベルまたは中間ドライバーの DispatchRead または DispatchWrite ルーチンは、下位レベルのドライバーが転送要求を非同期的に処理する必要があるため、IRP の IoCompletion ルーチンを設定する可能性が最も高いです。

ドライバー スタック内の最下位レベルのドライバーは、IoCompletion ルーチンを登録できません。

ドライバーは通常、同期 I/O 操作に関連付けられている IRP の IoCompletion ルーチンを登録しません。 たとえば、上位レベルのドライバーの DispatchDeviceControl ルーチンは、IoBuildDeviceIoControlRequest を使用して IRP を割り当てることができます。 この場合、通常、ディスパッチ ルーチンは IoCompletion ルーチンを登録しません。デバイス制御要求は一般に同期的に処理されるためです。 代わりに、ドライバーはイベント オブジェクトを割り当てて初期化でき、その DispatchDeviceControl ルーチンは、ドライバーが割り当てられた IRP で送信されるときにイベントが初期化されるのを待機できます。 通常、上位レベルのドライバーは、同じ理由で、IoBuildSynchronousFsdRequest で割り当てられた IRP の IoCompletion ルーチンを登録しません。

このセクションでは、以下のトピックについて説明します:

IoCompletion ルーチンの登録

IoCompletion ルーチンの実装