次の方法で共有


省略可能なディスパッチ ルーチン

ドライバーには、次のディスパッチルーチンが含まれる場合があります。

  • ディスパッチクリーンアップ

    IRP_MJ_CLEANUP は、ターゲット デバイス オブジェクトに関連付けられているファイル オブジェクトの最後のハンドルが閉じられていることを示します。 ファイル オブジェクトに対する未処理の I/O 要求が引き続き存在する可能性があります。 ドライバーは、特定のファイル ハンドルに固有ではないクリーンアップを実行する DispatchCleanup ルーチンを実装できます。 ドライバーは、同じ目的で DispatchClose ルーチンを使用することもできます。

  • DispatchQueryInformationDispatchSetInformation

    最上位レベルのドライバーの中には、 IRP_MJ_QUERY_INFORMATIONIRP_MJ_SET_INFORMATION IRP の処理が必要な場合があります。 このような要求は、ユーザー モード アプリケーション、カーネル モード コンポーネント、またはドライバーが、ユーザー モード要求者がハンドルを持つファイル オブジェクト (ドライバーのデバイス オブジェクトを表す) の長さに関する情報を要求したか、ユーザー モード要求者がそのファイル オブジェクトにファイルの末尾を設定しようとしていることを示します。

    並列クラスおよびシリアル デバイス ドライバーは、 FILE_STANDARD_INFORMATIONまたはFILE_POSITION_INFORMATION の長 または位置を 0 に設定することで、これらの要求を処理します。 他の最上位レベルのデバイス ドライバーは、特にユーザー モード アプリケーションまたはカーネル モード ドライバーが C ランタイム関数を呼び出してファイル オブジェクトを操作する場合に、これらの要求をサポートする必要があります。 ファイル システム ドライバーは、これらの最高レベルのデバイス ドライバーよりも完全にこれらの要求をサポートする必要があります。

  • DispatchFlushBuffers

    デバイスにデータをキャッシュするドライバー、またはドライバーによって割り当てられたメモリ内のデータを内部的にバッファーするドライバーは 、IRP_MJ_FLUSH_BUFFERSを受け取る可能性があります。 この要求の受信は、ドライバーがバッファーに格納されたデータを書き込むか、キャッシュされたデータをデバイスにフラッシュするか、デバイスから読み取られたバッファーまたはキャッシュされたデータを破棄する必要があることを示します。

    たとえば、デバイスからの入力データ用の内部リング バッファーがあるシステム キーボードおよびマウス クラス ドライバーは、フラッシュ要求をサポートします。 大容量記憶装置のドライバーとその上に重ねて配置されたドライバーも、この要求をサポートします。

  • DispatchShutdown

    システムがシャットダウンする前に呼び出される可能性が高いドライバーは、 IRP_MJ_SHUTDOWNを処理する必要があります。 DispatchShutdown ルーチンは、電源マネージャーがシステムをシャットダウンするシステム セット電源 IRP を送信する前に、ドライバーによって決定されたクリーンアップが必要な操作を行う必要があります。 ドライバーは 、IoRegisterShutdownNotification または IoRegisterLastChanceShutdownNotification を呼び出して、シャットダウン通知に登録できます。

大容量記憶装置デバイス用のドライバーと、その上に重ねて置いた中間ドライバーは、最上位レベルのファイル システム ドライバーに依存して、システムがシャットダウンしようとしているときにシャットダウン IRP を送信できます。 つまり、FSD は、キャッシュされたファイル データが周辺機器に確実に書き出されるようにし、基になるドライバーを呼び出してデバイスのキャッシュまたはバッファー (存在する場合) からデータをフラッシュし、システムをシャットダウンする前に行います。

データを内部的にキャッシュする大容量記憶装置のドライバーは、 DispatchShutdown ルーチンと DispatchFlushBuffers ルーチンを 提供する必要があります。 大容量記憶装置ドライバーがメモリ内のデータをバッファーするが、そのデバイスに内部キャッシュがない場合は、 DispatchShutdown および DispatchFlushBuffers ルーチンも提供する必要があります。

IRP_MJ_FLUSH_BUFFERSおよびIRP_MJ_SHUTDOWN要求を処理するドライバーの上に階層化された中間ドライバーは、DispatchShutdown ルーチンと DispatchFlushBuffers ルーチンも提供します。