(57)【要約】【課題】ファイル・オープン時にファイル・ロックが実施されるオペレーティング・システムを有するコンピュータ・システム内の少なくとも１つのターゲット・ファイルにアクセスする方法およびシステムを提供すること。【解決手段】例示的実施形態では、この方法およびシステムは、（１）コンピュータ・システムでオープンされている１組のすべてのファイルに対応する１組のハンドルを取得すること、（２）オペレーティング・システムのカーネル内でその１組のハンドルに対応する１組のファイル識別子を決定すること、（３）その１組のファイル識別子から、ターゲット・ファイルに対応するファイル識別子を識別すること、（４）カーネル内で、オペレーティング・システムのファイル・システム・ドライバに、識別したファイル識別子に対応する読取り要求パケットを送ること、および（５）ファイル・システム・ドライバから、ターゲット・ファイルに対応するデータを受け取ることを含む。【選択図】図３
2005182800.tif 000002
【特許請求の範囲】
【請求項１】
ファイル・オープン時にファイル・ロックが実施されるオペレーティング・システムを有するコンピュータ・システム内の少なくとも１つのターゲット・ファイルにアクセスする方法であって、
前記コンピュータ・システムでオープンされている１組のすべてのファイルに対応する１組のハンドルを取得するステップと、
前記オペレーティング・システムのカーネル内で前記１組のハンドルに対応する１組のファイル識別子を決定するステップと、
前記１組のファイル識別子から、前記ターゲット・ファイルに対応するファイル識別子を識別するステップと、
前記カーネル内で、前記オペレーティング・システムのファイル・システム・ドライバに、識別した前記ファイル識別子に対応する読取り要求パケットを送るステップと、
前記ファイル・システム・ドライバから、前記ターゲット・ファイルに対応するデータを受け取るステップとを含む方法。
【請求項２】
前記取得するステップが、
前記１組のハンドル内の各ハンドルについてのすべての情報を求めるNtQuerySystemInformationを前記カーネルに発行するステップと、
SYSTEM_HANDLE_INFORMATIONがFILE_OBJECTに対するポインタを含み、前記FILE_OBJECTがファイル識別子情報を含むとして、前記１組のハンドル内の各ハンドルについて、前記SYSTEM_HANDLE_INFORMATIONの配列を前記カーネルから取得するステップとを含む請求項１に記載の方法。
【請求項３】
前記決定するステップが、
前記１組のハンドル内の各ハンドルについて、前記各ハンドルに対応する前記FILE_OBJECTに対するポインタを前記カーネルに渡すステップを含む請求項２に記載の方法。
【請求項４】
前記決定するステップが、
前記１組のハンドル内の各ハンドルについて、前記カーネル内から、渡した前記FILE_OBJECTに対応するファイル識別子を出力するステップをさらに含む請求項３に記載の方法。
【請求項５】
前記識別するステップが、
前記ターゲット・ファイルに対応する、識別した前記ファイル識別子に対応する前記FILE_OBJECTを識別するステップを含む請求項４に記載の方法。
【請求項６】
前記送るステップが、
識別した前記FILE_OBJECTを前記カーネルに渡すステップと、
割込み要求パケット（ＩＲＰ）を含む前記読取り要求パケットを介して、識別した前記FILE_OBJECTに対応する前記ターゲット・ファイルからのデータの読取りを前記カーネルに要求するステップとを含む請求項５に記載の方法。
【請求項７】
前記要求するステップが、
識別した前記FILE_OBJECTに対応するＩＲＰを、一定のオフセットおよび一定の長さで、前記カーネル内で生成するステップと、
前記オペレーティング・システムの前記ファイル・システム・ドライバに前記ＩＲＰを渡すステップとを含む請求項６に記載の方法。
【請求項８】
前記受け取るステップが、
識別した前記FILE_OBJECTに対応する前記ターゲット・ファイルからの前記データを、前記カーネル内で前記ファイル・システム・ドライバから受け取るステップと、
前記カーネルからの識別した前記FILE_OBJECTに対応する前記ターゲット・ファイルからの前記データを取得するステップとを含む請求項７に記載の方法。
【請求項９】
ファイル・オープン時にファイル・ロックが実施されるオペレーティング・システムを有するコンピュータ・システム内の少なくとも１つのターゲット・ファイルにアクセスするシステムであって、
前記コンピュータ・システムでオープンされている１組のすべてのファイルに対応する１組のハンドルを取得するように構成された取得モジュールと、
前記オペレーティング・システムのカーネル内で前記１組のハンドルに対応する１組のファイル識別子を決定するように構成された決定モジュールと、
前記１組のファイル識別子から、前記ターゲット・ファイルに対応するファイル識別子を識別するように構成された識別モジュールと、
前記カーネル内で、前記オペレーティング・システムのファイル・システム・ドライバに、識別した前記ファイル識別子に対応する読取り要求パケットを送るように構成された送信モジュールと、
前記ファイル・システム・ドライバから、前記ターゲット・ファイルに対応するデータを受け取るように構成された受信モジュールとを備えるシステム。
【請求項１０】
前記取得モジュールが、
前記１組のハンドル内の各ハンドルについてのすべての情報を求めるNtQuerySystemInformationを前記カーネルに発行するように構成された発行モジュールと、
SYSTEM_HANDLE_INFORMATIONがFILE_OBJECTに対するポインタを含み、前記FILE_OBJECTがファイル識別子情報を含むとして、前記１組のハンドル内の各ハンドルについて、前記SYSTEM_HANDLE_INFORMATIONの配列を前記カーネルから取得するように構成された取得モジュールとを備える請求項９に記載のシステム。
【請求項１１】
前記決定モジュールが、
前記１組のハンドル内の各ハンドルについて、前記各ハンドルに対応する前記FILE_OBJECTに対するポインタを前記カーネルに渡すように構成されたパッシング・モジュールを備える請求項１０に記載のシステム。
【請求項１２】
前記決定モジュールが、
前記１組のハンドル内の各ハンドルについて、前記カーネル内から、渡した前記FILE_OBJECTに対応するファイル識別子を出力するように構成された出力モジュールをさらに備える請求項１１に記載のシステム。
【請求項１３】
前記識別モジュールが、
前記ターゲット・ファイルに対応する、識別した前記ファイル識別子に対応する前記FILE_OBJECTを識別するように構成された識別モジュールを備える請求項１２に記載のシステム。
【請求項１４】
前記送信モジュールが、
識別した前記FILE_OBJECTを前記カーネルに渡すように構成されたパッシング・モジュールと、
割込み要求パケット（ＩＲＰ）を含む前記読取り要求パケットを介して、識別した前記FILE_OBJECTに対応する前記ターゲット・ファイルからのデータの読取りを前記カーネルに要求するように構成された要求モジュールとを備える請求項１３に記載のシステム。
【請求項１５】
前記要求モジュールが、
識別した前記FILE_OBJECTに対応するＩＲＰを、一定のオフセットおよび一定の長さで、前記カーネル内で生成するように構成された生成モジュールと、
前記オペレーティング・システムの前記ファイル・システム・ドライバに前記ＩＲＰを渡すように構成されたパッシング・モジュールとを備える請求項１４に記載のシステム。
【請求項１６】
前記受信モジュールが、
識別した前記FILE_OBJECTに対応する前記ターゲット・ファイルからの前記データを、前記カーネル内で前記ファイル・システム・ドライバから受け取るように構成された受信モジュールと、
前記カーネルからの識別した前記FILE_OBJECTに対応する前記ターゲット・ファイルからの前記データを取得するように構成された取得モジュールとを備える請求項１５に記載のシステム。
【請求項１７】
ファイル・オープン時にファイル・ロックが実施されるオペレーティング・システムを有するコンピュータ・システム内の少なくとも１つのターゲット・ファイルにアクセスする方法であって、
前記コンピュータ・システムでオープンされている１組のすべてのファイルに対応する１組のハンドルを取得するステップと、
前記オペレーティング・システムのカーネル内で前記１組のハンドルに対応する１組のファイル識別子を決定するステップと、
前記１組のファイル識別子から、前記ターゲット・ファイルに対応するファイル識別子を識別するステップと、
前記カーネル内で、前記オペレーティング・システムのファイル・システム・ドライバに、識別した前記ファイル識別子に対応する読取り要求パケットを送るステップとを含む方法。
【請求項１８】
前記取得するステップが、
前記１組のハンドル内の各ハンドルについてのすべての情報を求めるNtQuerySystemInformationを前記カーネルに発行するステップと、
SYSTEM_HANDLE_INFORMATIONがFILE_OBJECTに対するポインタを含み、前記FILE_OBJECTがファイル識別子情報を含むとして、前記１組のハンドル内の各ハンドルについて、前記SYSTEM_HANDLE_INFORMATIONの配列を前記カーネルから取得するステップとを含む請求項１７に記載の方法。
【請求項１９】
前記決定するステップが、
前記１組のハンドル内の各ハンドルについて、前記各ハンドルに対応する前記FILE_OBJECTに対するポインタを前記カーネルに渡すステップを含む請求項１８に記載の方法。
【請求項２０】
前記決定するステップが、
前記１組のハンドル内の各ハンドルについて、前記カーネル内から、渡した前記FILE_OBJECTに対応するファイル識別子を出力するステップをさらに含む請求項１９に記載の方法。
【請求項２１】
前記識別するステップが、
前記ターゲット・ファイルに対応する、識別した前記ファイル識別子に対応する前記FILE_OBJECTを識別するステップを含む請求項２０に記載の方法。
【請求項２２】
前記送るステップが、
識別した前記FILE_OBJECTを前記カーネルに渡すステップと、
割込み要求パケット（ＩＲＰ）を含む前記読取り要求パケットを介して、識別した前記FILE_OBJECTに対応する前記ターゲット・ファイルからのデータの読取りを前記カーネルに要求するステップとを含む請求項２１に記載の方法。
【請求項２３】
前記要求するステップが、
識別した前記FILE_OBJECTに対応するＩＲＰを、一定のオフセットおよび一定の長さで、前記カーネル内で生成するステップと、
前記オペレーティング・システムの前記ファイル・システム・ドライバに前記ＩＲＰを渡すステップとを含む請求項２２に記載の方法。
【請求項２４】
ファイル・オープン時にファイル・ロックが実施されるオペレーティング・システムを有するコンピュータ・システム内の少なくとも１つのターゲット・ファイルにアクセスするシステムであって、
前記コンピュータ・システムでオープンされている１組のすべてのファイルに対応する１組のハンドルを取得するように構成された取得モジュールと、
前記オペレーティング・システムのカーネル内で前記１組のハンドルに対応する１組のファイル識別子を決定するように構成された決定モジュールと、
前記１組のファイル識別子から、前記ターゲット・ファイルに対応するファイル識別子を識別するように構成された識別モジュールと、
前記カーネル内で、前記オペレーティング・システムのファイル・システム・ドライバに、識別した前記ファイル識別子に対応する読取り要求パケットを送るように構成された送信モジュールとを備えるシステム。
【請求項２５】
前記取得モジュールが、
前記１組のハンドル内の各ハンドルについてのすべての情報を求めるNtQuerySystemInformationを前記カーネルに発行するように構成された発行モジュールと、
SYSTEM_HANDLE_INFORMATIONがFILE_OBJECTに対するポインタを含み、前記FILE_OBJECTがファイル識別子情報を含むとして、前記１組のハンドル内の各ハンドルについて、前記SYSTEM_HANDLE_INFORMATIONの配列を前記カーネルから取得するように構成された取得モジュールとを備える請求項２４に記載のシステム。
【請求項２６】
前記決定モジュールが、
前記１組のハンドル内の各ハンドルについて、前記各ハンドルに対応する前記FILE_OBJECTに対するポインタを前記カーネルに渡すように構成されたパッシング・モジュールを備える請求項２５に記載のシステム。
【請求項２７】
前記決定モジュールが、
前記１組のハンドル内の各ハンドルについて、前記カーネル内から、渡した前記FILE_OBJECTに対応するファイル識別子を出力するように構成された出力モジュールをさらに備える請求項２６に記載のシステム。
【請求項２８】
前記識別モジュールが、
前記ターゲット・ファイルに対応する、識別した前記ファイル識別子に対応する前記FILE_OBJECTを識別するように構成された識別モジュールを備える請求項２７に記載のシステム。
【請求項２９】
前記送信モジュールが、
識別した前記FILE_OBJECTを前記カーネルに渡すように構成されたパッシング・モジュールと、
割込み要求パケット（ＩＲＰ）を含む前記読取り要求パケットを介して、識別した前記FILE_OBJECTに対応する前記ターゲット・ファイルからのデータの読取りを前記カーネルに要求するように構成された要求モジュールとを備える請求項２８に記載のシステム。
【請求項３０】
前記要求モジュールが、
識別した前記FILE_OBJECTに対応するＩＲＰを、一定のオフセットおよび一定の長さで、前記カーネル内で生成するように構成された生成モジュールと、
前記オペレーティング・システムの前記ファイル・システム・ドライバに前記ＩＲＰを渡すように構成されたパッシング・モジュールとを備える請求項２９に記載のシステム。
【請求項３１】
ファイル・オープン時にファイル・ロックが実施されるオペレーティング・システムを有するコンピュータ・システム内の少なくとも１つのターゲット・ファイルにアクセスするためのプログラムであって、該プログラムが、コンピュータに、
前記コンピュータ・システムでオープンされている１組のすべてのファイルに対応する１組のハンドルを取得する機能と、
前記オペレーティング・システムのカーネル内で前記１組のハンドルに対応する１組のファイル識別子を決定する機能と、
前記１組のファイル識別子から、前記ターゲット・ファイルに対応するファイル識別子を識別する機能と、
前記カーネル内で、前記オペレーティング・システムのファイル・システム・ドライバに、識別した前記ファイル識別子に対応する読取り要求パケットを送る機能と、
前記ファイル・システム・ドライバから、前記ターゲット・ファイルに対応するデータを受け取る機能を、
実行させるプログラム。
【請求項３２】
ファイル・オープン時にファイル・ロックが実施されるオペレーティング・システムを有するコンピュータ・システム内の少なくとも１つのターゲット・ファイルにアクセスするためのプログラムであって、該プログラムが、コンピュータに、
前記コンピュータ・システムでオープンされている１組のすべてのファイルに対応する１組のハンドルを取得する機能と、
前記オペレーティング・システムのカーネル内で前記１組のハンドルに対応する１組のファイル識別子を決定する機能と、
前記１組のファイル識別子から、前記ターゲット・ファイルに対応するファイル識別子を識別する機能と、
前記カーネル内で、前記オペレーティング・システムのファイル・システム・ドライバに、識別した前記ファイル識別子に対応する読取り要求パケットを送る機能を、
実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はオペレーティング・システムに関し、詳細には、ファイル・オープン時にファイル・ロックが実施されるオペレーティング・システムを有するコンピュータ・システム内の少なくとも１つのターゲット・ファイルにアクセスする方法およびシステムに関する。
【背景技術】
【０００２】
Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（Ｒ）（以後「Ｗｉｎｄｏｗｓ（Ｒ）」と呼ぶ）カーネルおよびＷｉｎｄｏｗｓ（Ｒ）プログラムは、他のプロセスによってファイルがオープンされ読み取られることからファイルを保護する能力を有する。このことは、ファイルをオープンし、他のプロセスに特定の許可（読取りなど）を与えないことによって行われる。このプロセスがファイルをオープンしておく限り、他のプロセスは、このプロセスによって与えられる許可の対象となる。他のプロセスがこうしたファイルをオープンしようと試みると、Ｗｉｎｄｏｗｓ（Ｒ）の「共有違反」を招き、ファイル内のデータを読み取ることができない。
【０００３】
オープン・ファイルにアクセスする必要
しかし、こうしたファイル内のデータは、多くのアプリケーション、特にバックアップ・アプリケーションにとって極めて重要である可能性がある。例えば、バックアップ・アプリケーションがマシン上のあらゆるファイルを読み取ってバックアップできることは重要である。加えて、こうした保護ファイルの一部は、Ｗｉｎｄｏｗｓ（Ｒ）レジストリ情報を含むファイルであり、したがって、復元されるバックアップ・イメージの正しい動作にとって必要である。
【０００４】
従来技術のシステム
現在のところ、バックアップ・アプリケーションは、この問題を回避するのに２つの手法の一方を採用している。
【０００５】
セクタ毎コピー
従来技術の図１に示す第１の従来技術の手法では、アプリケーションが、ステップ１１２として、（１）ドライブ上のデータのセクタ毎コピーを行い、ステップ１１４として、（２）ディスクの全イメージを生成する。残念ながら、この方法では、ドライブの一体式のコピーが生成される。加えて、この技法では、個々のファイルのセクタ位置を突き止めることが困難なディスク・イメージが生成される。これにより、このイメージから「単一ファイルの復元」を行うことが非常に難しくなる。
【０００６】
シャットダウンおよびプリブート
従来技術の図２に示す、アプリケーションが用いる第２の従来技術の手法は、ステップ１２２として、（１）マシンをシャットダウンし、ステップ１２４として、（２）マシンを「プリブート」環境にし、その状態で、ステップ１２６として、（３）ファイル・コピーを実行することができるというものである。マシンは再びリブートされるか、またはＷｉｎｄｏｗｓ（Ｒ）へのブートを終了する。この方法では、こうしたファイルをコピーできるようにするのにリブートが必要となるので不十分である。加えて、マシンの動作中のバックアップが不可能である。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
したがって、ファイル・オープン時にファイル・ロックが実施されるオペレーティング・システムを有するコンピュータ・システム内の少なくとも１つのターゲット・ファイルにアクセスする方法およびシステムが必要である。
【課題を解決するための手段】
【０００８】
本発明は、ファイル・オープン時にファイル・ロックが実施されるオペレーティング・システムを有するコンピュータ・システム内の少なくとも１つのターゲット・ファイルにアクセスする方法およびシステムを提供する。例示的実施形態では、この方法およびシステムは、（１）コンピュータ・システムでオープンされている１組のすべてのファイルに対応する１組のハンドルを取得すること、（２）オペレーティング・システムのカーネル内でその１組のハンドルに対応する１組のファイル識別子を決定すること、（３）その１組のファイル識別子から、ターゲット・ファイルに対応するファイル識別子を識別すること、（４）カーネル内で、オペレーティング・システムのファイル・システム・ドライバに、識別したファイル識別子に対応する読取り要求パケットを送ること、および（５）ファイル・システム・ドライバから、ターゲット・ファイルに対応するデータを受け取ることを含む。
【０００９】
例示的実施形態では、取得することは、その１組のハンドル内の各ハンドルについてのすべての情報を求めるNtQuerySystemInformationをカーネルに発行すること、および（ｂ）SYSTEM_HANDLE_INFORMATIONがFILE_OBJECTに対するポインタを含み、FILE_OBJECTがファイル識別子情報を含むとして、その１組のハンドル内の各ハンドルについて、SYSTEM_HANDLE_INFORMATIONの配列をカーネルから取得することを含む。
【００１０】
例示的実施形態では、決定することは、その１組のハンドル内の各ハンドルについて、各ハンドルに対応するFILE_OBJECTに対するポインタをカーネルに渡すことを含む。別の実施形態では、決定することは、その１組のハンドル内の各ハンドルについて、カーネル内から、渡したFILE_OBJECTに対応するファイル識別子を出力することを含む。
【００１１】
例示的実施形態では、識別することは、ターゲット・ファイルに対応する、識別したファイル識別子に対応するFILE_OBJECTを識別することを含む。
【００１２】
例示的実施形態では、送ることは、（ａ）識別したFILE_OBJECTをカーネルに渡すこと、および（ｂ）割込み要求パケット（ＩＲＰ）を含む読取り要求パケットを介して、識別したFILE_OBJECTに対応するターゲット・ファイルからのデータの読取りをカーネルに要求することを含む。別の実施形態では、要求することは、（ｉ）識別したFILE_OBJECTに対応するＩＲＰを、一定のオフセットおよび一定の長さで、カーネル内で生成すること、および（ｉｉ）オペレーティング・システムのファイル・システム・ドライバにＩＲＰを渡すことを含む。
【００１３】
例示的実施形態では、受け取ることは、（ａ）識別したFILE_OBJECTに対応するターゲット・ファイルからのデータを、カーネル内でファイル・システム・ドライバから受け取ること、および（ｂ）カーネルからの識別したFILE_OBJECTに対応するターゲット・ファイルからのデータを取得することを含む。
【００１４】
例示的実施形態では、この方法およびシステムは、コンピュータ・システムでオープンされている１組のすべてのファイルに対応する１組のハンドルを取得すること、（２）オペレーティング・システムのカーネル内でその１組のハンドルに対応する１組のファイル識別子を決定すること、（３）その１組のファイル識別子から、ターゲット・ファイルに対応するファイル識別子を識別すること、および（４）カーネル内で、オペレーティング・システムのファイル・システム・ドライバに、識別したファイル識別子に対応する読取り要求パケットを送ることを含む。
【００１５】
本発明はまた、ファイル・オープン時にファイル・ロックが実施されるオペレーティング・システムを有するコンピュータ・システム内の少なくとも１つのターゲット・ファイルにアクセスする可読プログラム・コードがその中で実施されたプログラム可能コンピュータと共に使用可能なコンピュータ・プログラム製品も提供する。例示的実施形態では、このコンピュータ・プログラム製品は、（１）コンピュータ・システムでオープンされている１組のすべてのファイルに対応する１組のハンドルを取得するコンピュータ可読コードと、（２）オペレーティング・システムのカーネル内でその１組のハンドルに対応する１組のファイル識別子を決定するコンピュータ可読コードと、（３）その１組のファイル識別子から、ターゲット・ファイルに対応するファイル識別子を識別するコンピュータ可読コードと、（４）カーネル内で、オペレーティング・システムのファイル・システム・ドライバに、識別したファイル識別子に対応する読取り要求パケットを送るコンピュータ可読コードと、（５）ファイル・システム・ドライバから、ターゲット・ファイルに対応するデータを受け取るコンピュータ可読コードとを含む。
【００１６】
例示的実施形態では、コンピュータ・プログラム製品は、（１）コンピュータ・システムでオープンされている１組のすべてのファイルに対応する１組のハンドルを取得するコンピュータ可読コードと、（２）オペレーティング・システムのカーネル内でその１組のハンドルに対応する１組のファイル識別子を決定するコンピュータ可読コードと、（３）その１組のファイル識別子から、ターゲット・ファイルに対応するファイル識別子を識別するコンピュータ可読コードと、（４）カーネル内で、オペレーティング・システムのファイル・システム・ドライバに、識別したファイル識別子に対応する読取り要求パケットを送るコンピュータ可読コードとを含む。
【００１７】
本発明は、ファイル・オープン時にファイル・ロックが実施されるオペレーティング・システムを有するコンピュータ・システム内の少なくとも１つのターゲット・ファイルにアクセスするシステムであって、前記コンピュータ・システムでオープンされている１組のすべてのファイルに対応する１組のハンドルを取得するように構成された取得モジュールと、前記オペレーティング・システムのカーネル内で前記１組のハンドルに対応する１組のファイル識別子を決定するように構成された決定モジュールと、前記１組のファイル識別子から、前記ターゲット・ファイルに対応するファイル識別子を識別するように構成された識別モジュールと、前記カーネル内で、前記オペレーティング・システムのファイル・システム・ドライバに、識別した前記ファイル識別子に対応する読取り要求パケットを送るように構成された送信モジュールと、前記ファイル・システム・ドライバから、前記ターゲット・ファイルに対応するデータを受け取るように構成された受信モジュールとを含む。
【００１８】
例示的実施形態では、前記取得モジュールが、前記１組のハンドル内の各ハンドルについてのすべての情報を求めるNtQuerySystemInformationを前記カーネルに発行するように構成された発行モジュールと、SYSTEM_HANDLE_INFORMATIONがFILE_OBJECTに対するポインタを含み、前記FILE_OBJECTがファイル識別子情報を含むとして、前記１組のハンドル内の各ハンドルについて、前記SYSTEM_HANDLE_INFORMATIONの配列を前記カーネルから取得するように構成された取得モジュールとを含む。
【００１９】
例示的実施形態では、前記決定モジュールが、前記１組のハンドル内の各ハンドルについて、前記各ハンドルに対応する前記FILE_OBJECTに対するポインタを前記カーネルに渡すように構成されたパッシング・モジュールを含む。
【００２０】
例示的実施形態では、前記決定モジュールが、前記１組のハンドル内の各ハンドルについて、前記カーネル内から、渡した前記FILE_OBJECTに対応するファイル識別子を出力するように構成された出力モジュールをさらに含む。
【００２１】
例示的実施形態では、前記識別モジュールが、前記ターゲット・ファイルに対応する、識別した前記ファイル識別子に対応する前記FILE_OBJECTを識別するように構成された識別モジュールを含む。
【００２２】
例示的実施形態では、前記送信モジュールが、識別した前記FILE_OBJECTを前記カーネルに渡すように構成されたパッシング・モジュールと、割込み要求パケット（ＩＲＰ）を含む前記読取り要求パケットを介して、識別した前記FILE_OBJECTに対応する前記ターゲット・ファイルからのデータの読取りを前記カーネルに要求するように構成された要求モジュールとを含む。
【００２３】
例示的実施形態では、前記要求モジュールが、識別した前記FILE_OBJECTに対応するＩＲＰを、一定のオフセットおよび一定の長さで、前記カーネル内で生成するように構成された生成モジュールと、前記オペレーティング・システムの前記ファイル・システム・ドライバに前記ＩＲＰを渡すように構成されたパッシング・モジュールとを含む。
【発明を実施するための最良の形態】
【００２４】
本発明は、ファイル・オープン時にファイル・ロックが実施されるオペレーティング・システムを有するコンピュータ・システム内の少なくとも１つのターゲット・ファイルにアクセスする方法およびシステムを提供する。例示的実施形態では、本発明は、Ｗｉｎｄｏｗｓ（Ｒ）が動作中のまま、保護Ｗｉｎｄｏｗｓ（Ｒ）ファイルの内容を読み取る方法およびシステムを提供する。本発明は、ファイル・オープン時にファイル・ロックが実施されるオペレーティング・システムを有するコンピュータ・システム内の少なくとも１つのターゲット・ファイルにアクセスする方法およびシステムを提供する。例示的実施形態では、この方法およびシステムは、（１）コンピュータ・システムでオープンされている１組のすべてのファイルに対応する１組のハンドルを取得すること、（２）オペレーティング・システムのカーネル内でその１組のハンドルに対応する１組のファイル識別子を決定すること、（３）その１組のファイル識別子から、ターゲット・ファイルに対応するファイル識別子を識別すること、（４）カーネル内で、オペレーティング・システムのファイル・システム・ドライバに、識別したファイル識別子に対応する読取り要求パケットを送ること、および（５）ファイル・システム・ドライバから、ターゲット・ファイルに対応するデータを受け取ることを含む。
【００２５】
図３を参照すると、例示的実施形態では、本発明は、コンピュータ・システムでオープンされている１組のすべてのファイルに対応する１組のハンドルを取得するステップ２１０と、オペレーティング・システムのカーネル内でその１組のハンドルに対応する１組のファイル識別子を決定するステップ２１２と、その１組のファイル識別子から、ターゲット・ファイルに対応するファイル識別子を識別するステップ２１４と、カーネル内で、オペレーティング・システムのファイル・システム・ドライバに、識別したファイル識別子に対応する読取り要求パケットを送るステップ２１６と、ファイル・システム・ドライバから、ターゲット・ファイルに対応するデータを受け取るステップ２１８とを含む。
【００２６】
総論
本発明は、タンデムに動作して互いにデータをやりとりする２つのプログラムを介して、保護Ｗｉｎｄｏｗｓ（Ｒ）ファイルを読み取る。高レベルでは、こうしたプログラムのうちの１つ（例えばｗａｍ．ｓｙｓ）がカーネル内で動作して実際の読取りを行うと共に、他のプログラム（例えばｂａｍ．ｅｘｅ）がユーザ空間で動作して、そのファイルについての情報を推論し、どこを読み取るべきかを知るのに十分な情報をカーネル・プログラムに与えるために、その情報をカーネル・プログラムに渡す。次いでカーネル・プログラムは、読み取ったデータをユーザ・レベル・プログラムに返す。
【００２７】
１組のハンドルの取得
具体的には、ユーザ・レベル・プログラムは、オープンしたファイル・ハンドルについてのすべての情報を求めるNtQuerySystemInformationをカーネルに発行する。カーネルは、カーネル内のオープンした各ハンドルについてSYSTEM_HANDLE_INFORMATIONの配列を返す。
【００２８】
図４を参照すると、例示的実施形態では、取得するステップ２１０は、その１組のハンドル内の各ハンドルについてのすべての情報を求めるNtQuerySystemInformationをカーネルに発行するステップ３１０と、SYSTEM_HANDLE_INFORMATIONがFILE_OBJECTに対するポインタを含み、FILE_OBJECTがファイル識別子情報を含むとして、その１組のハンドル内の各ハンドルについて、SYSTEM_HANDLE_INFORMATIONの配列をカーネルから取得するステップ３１２とを含む。
【００２９】
１組のハンドルに対応する１組のファイル識別子の決定
しかし、ファイル・ハンドルとファイル名との間の対応が依然として必要である。どのハンドルがターゲット・ファイルに関するハンドルであるかを見つけることが依然として必要である。このSYSTEM_HANDLE_INFORMATION内の１つの情報は、FILE_OBJECTに対するポインタである。FILE_OBJECTはファイル名情報を含む。しかし、FILE_OBJECTを格納するメモリを使用することができるのはカーネル内だけである。
【００３０】
したがって、ユーザ・レベル・プログラムは、このメモリに対するポインタをカーネル・レベル・プログラムに渡す。次いで、カーネル・レベル・プログラムは、このFILE_OBJECTが記述するファイル名を戻す。
【００３１】
図５を参照すると、例示的実施形態では、決定するステップ２１２は、その１組のハンドル内の各ハンドルについて、各ハンドルに対応するFILE_OBJECTに対するポインタをカーネルに渡すステップ４１２を含む。別の実施形態では、図６に示すように、決定するステップ２１２は、その１組のハンドル内の各ハンドルについて、カーネル内から、渡したFILE_OBJECTに対応するファイル識別子を出力するステップ４２２をさらに含む。
【００３２】
ターゲット・ファイルに対応するファイル識別子の識別
ユーザ・レベル・プログラムは、探索するファイル名がカーネルから返されるまで、このように実行し続ける。それから、ユーザ・レベル・プログラムは、読み取ることを望む保護ファイル、すなわちターゲット・ファイルに対するハンドルを有する。本質的には、ファイル・オープンが実行されている。
【００３３】
図７を参照すると、例示的実施形態では、識別するステップ２１４は、ターゲット・ファイルに対応する、識別したファイル識別子に対応するFILE_OBJECTを識別するステップ５１２を含む。
【００３４】
読取り要求パケットの送信
ユーザ空間でハンドルを使用して直接読み取ることが可能であるべきである。しかし、このハンドルはまだ、元の保護プロセスが課した許可によって制限され、このハンドルに対する読取りの試行は共有違反をもたらす。
【００３５】
したがって、カーネル・レベル・プログラムは、このFILE_OBJECTをカーネル・プログラムに渡し、このFILE_OBJECTによって記述されるファイルから、一定のオフセットおよびＰＡＧＥ＿ＳＩＺＥ（通常は４０９６バイト）でデータを読み取るようにカーネル・プログラムに求める。単にカーネルからZwReadFileを発行することも、上述の理由で共有違反で失敗する。
【００３６】
このファイルからのデータは、カーネルで割込み要求パケット（ＩＲＰ）を生成し、それを、このFILE_OBJECTが常駐する、下にあるファイルシステム（ＮＴＦＳ、ＦＡＴ３２など）に渡すことによって抽出される。
【００３７】
図８を参照すると、例示的実施形態では、送るステップ２１６は、識別したFILE_OBJECTをカーネルに渡すステップ６１２と、割込み要求パケット（ＩＲＰ）を含む読取り要求パケットを介して、識別したFILE_OBJECTに対応するターゲット・ファイルからのデータの読取りをカーネルに要求するステップ６１４とを含む。別の実施形態では、図９に示すように、要求するステップ６１４は、識別したFILE_OBJECTに対応するＩＲＰを、一定のオフセットおよび一定の長さで、カーネル内で生成するステップ６２２と、オペレーティング・システムのファイル・システム・ドライバにＩＲＰを渡すステップ６２４とを含む。
【００３８】
ターゲット・ファイルに対応するデータの受信
ファイルシステムは、要求されたデータで応答し、カーネル・プログラムは、そのデータをユーザ空間に戻す。保護ファイルに対して読取りが実行される。ファイルの終りに達するまでこうした読取りを異なるオフセットで反復することにより、ディスク上のこのファイルに関するデータの完全なコピーが生成される。
【００３９】
図１０を参照すると、例示的実施形態では、受け取るステップ２１８は、識別したFILE_OBJECTに対応するターゲット・ファイルからのデータを、カーネル内でファイル・システム・ドライバから受け取るステップ７１２と、カーネルからの識別したFILE_OBJECTに対応するターゲット・ファイルからのデータを取得するステップ７１４とを含む。
【００４０】
結論
本発明の好ましい実施形態および様々な代替実施形態を完全に説明したので、本明細書の教示が与えられると、本発明から逸脱しない多数の代替実施形態および均等物が存在することを当業者は理解されよう。したがって、本発明は上記の説明によって限定されず、添付の特許請求の範囲によってのみ限定されるものとする。
【図面の簡単な説明】
【００４１】
【図１】従来技術の技法の流れ図である。
【図２】従来技術の技法の流れ図である。
【図３】本発明の例示的実施形態による流れ図である。
【図４】本発明の例示的実施形態による取得するステップの流れ図である。
【図５】本発明の例示的実施形態による決定するステップの流れ図である。
【図６】本発明の別の実施形態による決定するステップの流れ図である。
【図７】本発明の例示的実施形態による識別するステップの流れ図である。
【図８】本発明の例示的実施形態による送るステップの流れ図である。
【図９】本発明の別の例示的実施形態による送るステップの流れ図である。
【図１０】本発明の例示的実施形態による受け取るステップの流れ図である。
【図１】
2005182800.tif 000003
【図２】
2005182800.tif 000004
【図３】
2005182800.tif 000005
【図４】
2005182800.tif 000006
【図５】
2005182800.tif 000007
【図６】
2005182800.tif 000008
【図７】
2005182800.tif 000009
【図８】
2005182800.tif 000010
【図９】
2005182800.tif 000011
【図１０】
2005182800.tif 000012