次の方法で共有


ドライバーのスレッド コンテキスト

階層化ドライバーでの IRP の処理の図に示すように、ファイル システムは以下の 2 つの部分で構成されます。

  1. I/O システム サービスを呼び出すユーザー モード スレッドのコンテキストで実行されるファイル システム ドライバー (FSD)

    I/O マネージャーは、FSD に対応する IRP を送信します。 FSD が IRP の完了ルーチンを設定する場合、その完了ルーチンは必ずしも元のユーザー モード スレッドのコンテキストで呼び出されるとは限りません。

  2. 一連のファイル システム スレッド、および場合 によっては FSP (ファイル システム プロセス)

    FSD はドライバー専用のシステム スレッドのセットを作成できますが、ほとんどの FSD では、I/O 要求を行うユーザー モード スレッドを関連付けずに作業を完了するためにシステム ワーカー スレッドを使用します。 どの FSD でも、ドライバー専用スレッドが実行される独自のプロセス アドレス空間を設定できますが、システムが提供する FSD では、システム メモリを節約するためにこの方法が回避されます。

ファイル システムは一般に、システム ワーカー スレッドを使用して、1 つ以上の下位ドライバー (おそらく異なるデバイス用) に送信する IRP の内部作業キューをセットアップして管理します。

階層化ドライバーでの IRP の処理の図に示されている最下位レベルのドライバーは、個別のドライバーが提供するルーチンのセットを使用して各 IRP を段階的に処理しますが、ファイル システムのようにシステム スレッドを使用することはありません。 最下位レベルのドライバーは、I/O 用にデバイスを設定するプロセスに時間がかかるため、システムのパフォーマンスに顕著な影響を与える場合を除き、独自のスレッド コンテキストを必要としません。 最下位ドライバーや中間ドライバーで、ドライバー専用またはデバイス専用のシステム・スレッドの設定が必要になることはほとんどありません。またそれらのスレッドへのコンテキスト切り替えによって発生するパフォーマンスの低下に見合うメリットがある場合もほとんどありません。

ほとんどのカーネル モード ドライバーは、階層化ドライバーでの IRP の処理の図に示す物理デバイス ドライバーのように、任意のスレッド コンテキストで実行されます。IRP を処理するために呼び出されたときに発生したものが現在のスレッド コンテキストとなります。 その結果、ドライバーは通常、デバイス拡張と呼ばれるデバイス オブジェクトのドライバー定義の部分に、I/O 操作とサービスするデバイスに関する状態を保持します。