記憶域クラス ドライバーの Dispatch ルーチン
クラス ドライバー DRIVER_DISPATCH および DispatchClose ルーチンには、通常、デバイス固有の要件はありません。 ほとんどの記憶域クラス ドライバーは中間ドライバーです。ディスパッチ ルーチンは、特定のデバイス オブジェクトが存在することを示す STATUS_SUCCESS を返すだけで、上位レベルのドライバーと、間接的にユーザー モード アプリケーションが I/O 用にデバイスを開き、その後デバイスを閉じることができるようにします。
クラス ドライバー DispatchDeviceControl ルーチンと DispatchInternalDeviceControl ルーチンは常駐する必要があります。つまり、ページングも、ドライバーの pageable-image セクションの一部にすることはできません。 特定の要求の IOCTL によっては、このようなディスパッチ ルーチンは、ページングされたルーチンを呼び出すか、同期または通知オブジェクトからの呼び出しを待機する (これにより実行中のスレッドをブロックする) 場合がありますが、ディスパッチ ルーチンは、DISPATCH_LEVEL で不明な IOCTL を渡すことができる必要があります。
記憶域クラス ドライバーには 、デバイスを開始、停止、および削除する要求と、デバイスがページング パス上にあるという通知などの他の PnP 要求に応答するための DispatchPnP ルーチンが必要です。 PnP 開始要求の処理の詳細については、記憶域クラス ドライバーでの PnP 開始の処理を参照してください。 他の PnP 要求の処理の詳細については、ストレージ 周辺機器への PnP 要求の処理を参照してください。
記憶域クラス ドライバーには、デバイスの電源状態の設定要求用の DispatchPower ルーチンも必要です。 詳細については、ストレージ周辺機器への電源要求の処理を参照してください 。
記憶域クラス ドライバーには DispatchShutdown ルーチンが必要です。デバイスが内部的にデータをキャッシュする場合、デバイスが内部的にデータをキャッシュする HBA によって駆動されるバスに接続されている場合、またはファイル システムがクラス ドライバーの上に階層化されている場合は、DispatchFlushBuffers ルーチンが必要です。 データ整合性メイン維持するには、システムがシャットダウンされる前に、このようなキャッシュをデバイスにフラッシュする必要があります。
ディスパッチ ルーチンの一般的な要件の詳細については、ディスパッチ ルーチンの記述も参照してください。