I/O 要求の例 - 概要

次の図は、サブシステムでアプリケーションがデータ ファイルとして表示されるファイル オブジェクトを開いたときの動作の概要を示しています。

diagram illustrating opening a file object.

  1. サブシステムは I/O システム サービスを呼び出して、名前付きファイルを開きます。

  2. I/O マネージャーは、オブジェクト・マネージャーを呼び出して名前付きファイルを検索し、ファイル・オブジェクトのシンボリック・リンクを解決するのに役立ちます。 また、セキュリティ参照モニターを呼び出して、サブシステムがそのファイル オブジェクトを開く正しいアクセス権を持っていることをチェックします。

  3. ボリュームがまだマウントされていない場合、I/O マネージャーはオープン要求を一時的に中断し、そのうちの 1 つがファイル・オブジェクトをファイル・システムが使用する大容量記憶装置のいずれかに保管されたものとして認識するまで、1 つ以上のファイル・システムを呼び出します。 ファイル・システムがボリュームをマウントすると、I/O マネージャーは要求を再開します。

  4. I/O マネージャーはメモリを割り当て、開いている要求の IRP を初期化します。 ドライバーの場合、オープンは "作成" 要求と同等です。

  5. I/O マネージャーはファイル システム ドライバーを呼び出し、IRP を渡します。 ファイル システム ドライバーは、IRP の I/O スタック位置にアクセスして、実行する必要がある操作を判断します。またパラメーターをチェックし、要求されたファイルがキャッシュ内に存在するかを判断し、存在しない場合は、IRP で次の下位ドライバーの I/O スタック位置を設定します。

  6. どちらのドライバーも IRP を処理し、要求された I/O 操作を完了し、I/O マネージャーと他のシステム コンポーネントによって提供されるカーネル モード サポート ルーチンを呼び出します (前の図には示されていません)。

  7. ドライバーは、要求された操作が成功したかどうか、または失敗した理由を示すために、IRP に I/O 状態ブロックが設定された I/O マネージャーに IRP を返します。

  8. I/O マネージャーは IRP から I/O 状態を取得するため、保護されたサブシステムを介して元の呼び出し元に状態情報を返すことができます。

  9. I/O マネージャーは、完了した IRP を解放します。

  10. 開いている操作が成功した場合、I/O マネージャーはファイル オブジェクトのハンドルをサブシステムに返します。 エラーが発生した場合は、サブシステムに適切な状態が返されます。

サブシステムは、データ ファイル、デバイス、またはボリュームを表すファイル オブジェクトを正常に開いた後、返されたハンドルを使用して、デバイス I/O 操作 (通常は読み取り、書き込み、またはデバイス I/O 制御要求) の後続の要求でファイル オブジェクトを識別します。 このような要求を行うために、サブシステムは I/O システム・サービスを呼び出します。 I/O マネージャーは、適切なドライバーに送信された IRP としてこれらの要求をルーティングします。