エンドユーザーの I/O 要求とファイル オブジェクト

カーネルモード ドライバーは、エンド ユーザーの目に触れることはありません。これは、Windows や POSIX などの使い慣れたプログラミング インターフェイスを実装する保護されたサブシステムによって隠されているからです。 保護されたサブシステムを含むユーザーモード コードにおいて、デバイスは I/O マネージャーが制御する名前付きファイル オブジェクトとしてのみ表示されます。

次の図は、エンド ユーザー、サブシステム、および I/O マネージャーの間のこの関係を示しています。

diagram illustrating file objects representing files, volumes, and devices.

Win32 サブシステムなどの保護されたサブシステムは、I/O システム サービスを介して適切なカーネル モード ドライバーに I/O 要求を渡します。 上の図に示されているサブシステムは、ディスプレイ、ビデオ アダプター、キーボード、マウス デバイス ドライバーのサポートによって異なります。

保護されたサブシステムでは、エンドユーザーとアプリケーションがドライバーなどのカーネルモード コンポーネントから切り離され、カーネルモード コンポーネントについての情報がなくても使用できるようになっています。 その保護されたサブシステムもまた、I/O マネージャーによってコンピューター固有のデバイス構成やドライバーの実装から分離されており、それらについての情報を持つ必要はありません。

また、I/O マネージャーの階層化アプローチにより、ほとんどのドライバーは次の情報なしに機能できます。

  • I/O 要求が、Win32 や POSIX などの特定の保護されたサブシステムで発生したかどうか

  • 特定の保護されたサブシステムに特定の種類のユーザー モード ドライバーがあるかどうか

  • 保護されたサブシステムの I/O モデルおよびドライバーとのインターフェイス

I/O マネージャーは、ドライバーに対して、1 つの I/O モデル、ドライバーが I/O 操作を実行するために使用できるカーネル モード サポート ルーチンのセット、および I/O 要求の発信元とそれに応答する必要があるドライバー間の一貫したインターフェイスを提供します。

前の図に示すように、サブシステムとそのネイティブ アプリケーションは、I/O マネージャーによって提供されるファイル オブジェクト ハンドルを介してのみ、ドライバーのデバイスまたは大容量記憶装置上のファイルにアクセスできます。 このようなファイル オブジェクトを開くか、デバイスまたはデータ ファイルに対する I/O のハンドルを取得するために、サブシステムは、名前付きファイルを開く要求で I/O システム サービスを呼び出します。 名前付きファイルには、ファイル オブジェクトのカーネルモード名へのサブシステム固有のエイリアス (シンボリック リンク) を指定できます。

これらのシステム サービスをエクスポートする I/O マネージャーは、デバイスまたはデータ ファイルを表すファイル オブジェクトを検索または作成し、適切なドライバーを見つける必要があります。