(57)【要約】  目標ファイルをデータ損傷から保護するシステムおよび方法において、ラッパーアプリケーションは目標ファイルに作用する書き込みコールを透過的に傍受し、関係データをデルタファイルに蓄積する。時折、一時ファイルで目標ファイルのバックアップをとり、目標ファイルを更新する。また、ラッパーアプリケーションは、目標ファイルにアクセスする読み出しコールを傍受し、更新情報と目標ファイルのデータとを一時ファイルの中で併合する。併合されたデータは、読み出し結果データとして返却される。
2010511926.tif 000002
【特許請求の範囲】
【請求項１】
目標ファイルを蓄積しかつ目標ファイルをデータ損傷から保護するシステムであって、  ａ）ラッパーアプリケーションのプログラムコードを引き出しかつ実行するように構成されたプロセッサであって、前記プログラムコードは、
ｉ）別のアプリケーションによって発行される少なくとも１つのファイルコマンドを傍受するコードであって、前記少なくとも１つのファイルコマンドは目標ファイルに作用し、前記ラッパーアプリケーションは前記別のアプリケーションから独立しているコードと、
ｉｉ）前記少なくとも１つのファイルコマンドに関する更新情報を保存するコードと、
ｉｉｉ）前記更新情報に従い目標ファイルを更新するコードと、を含むプロセッサと、
ｂ）目標ファイルを蓄積する第１のメモリ領域と、
ｃ）前記更新情報を蓄積する第２のメモリ領域と、
を備えるシステム。
【請求項２】
請求項１記載のシステムにおいて、
前記第１のメモリ領域は、データ処理装置の不揮発性メモリ内にあるシステム。
【請求項３】
請求項２記載のシステムにおいて、
前記第２のメモリ領域は、前記データ処理装置の前記不揮発性メモリと、前記データ処理装置の別個の不揮発性メモリと、前記データ処理装置の揮発性メモリとからなるリストから選ばれた少なくとも１つのメモリ内にあるシステム。
【請求項４】
請求項１記載のシステムにおいて、
前記第１のメモリ領域は、可搬型データ蓄積装置の不揮発性メモリ内にあるシステム。
【請求項５】
請求項４記載のシステムにおいて、
前記第２のメモリ領域は、前記可搬型データ蓄積装置の前記不揮発性メモリと、データ処理装置のメモリと、前記可搬型データ蓄積装置の揮発性メモリとからなるリストから選ばれた少なくとも１つのメモリ内にあるシステム。
【請求項６】
請求項１記載のシステムにおいて、
前記更新情報は、前記少なくとも１つのファイルコマンドに関するデータのみを含むシステム。
【請求項７】
請求項１記載のシステムにおいて、
ｅ）一時ファイルを蓄積する第３のメモリ領域をさらに備え、
前記ラッパーアプリケーションは、
ｉｖ）目標ファイルの少なくとも一部分を前記一時ファイルにコピーするコードと、    ｖ）前記更新情報を前記一時ファイルに適用するコードと、
ｖｉ）目標ファイルの前記少なくとも一部分を前記一時ファイルで差し替えるコードと、
をさらに含むシステム。
【請求項８】
目標ファイルをデータ損傷から保護するためのラッパープログラムを使用する方法であって、
ａ）アプリケーションによって発行される少なくとも１つのファイルコマンドをラッパープログラムによって傍受するステップであって、前記少なくとも１つのファイルコマンドは目標ファイルに作用し、前記傍受するステップは前記アプリケーションにとって不可視であるステップと、
ｂ）目標ファイルを変えることなく前記少なくとも１つのファイルコマンドに関する更新情報を保存するステップと、
ｃ）前記更新情報により目標ファイルを更新するステップと、
を含む方法。
【請求項９】
請求項８記載の方法において、
前記少なくとも１つのファイルコマンドは、前記保存することの開始から前記更新することの終了までの間に前記アプリケーションによって発行されて目標ファイルに作用するすべての書き込みコマンドを含む方法。
【請求項１０】
請求項８記載の方法において、
前記更新するステップは、
ｉ）目標ファイルの少なくとも一部分を一時ファイルにコピーするステップと、
ｉｉ）前記更新情報を前記一時ファイルに適用するステップと、
ｉｉｉ）目標ファイルの前記少なくとも一部分を前記一時ファイルの少なくとも一部分で差し替えるステップと、
を含む方法。
【請求項１１】
請求項１０記載の方法において、
ｄ）前記適用するステップの後に前記更新情報を収容するデルタファイルを削除するステップをさらに含む方法。
【請求項１２】
請求項８記載の方法において、
前記更新するステップは、
ｉ）目標ファイルを閉じるコマンドが発行されることと、
ｉｉ）前記アプリケーションが終了することと、
ｉｉｉ）目標ファイルにアクセスしたアプリケーションが終了することと、
ｉｖ）複数のファイルコマンドに関する統計に基づき条件が成立することと、
ｖ）オペレーティングシステムの活動レベルが最低活動しきい値を下回ることと、
ｖｉ）前記少なくとも１つのファイルコマンドの発行以降に最大時間しきい値を超過することと、
ｖｉｉ）前回の併合イベント以降に最大時間しきい値を超過することと、
からなるグループから選ばれた少なくとも１つの終止イベントが発生する場合に実行される方法。
【請求項１３】
請求項８記載の方法において、
前記傍受するステップと保存するステップは、前記アプリケーションが複数の対象アプリケーションのひとつであることと、前記アプリケーションが対象外アプリケーション以外であることと、前記少なくとも１つのファイルコマンドが一時ファイル以外のファイルに作用することと、前記少なくとも１つのファイルコマンドが対象ファイルタイプに作用することと、前記少なくとも１つのファイルコマンドが対象外ファイルタイプ以外のファイルに作用することと、前記少なくとも１つのファイルコマンドが対象蓄積装置に蓄積されたファイルに作用することと、からなるグループから選ばれた少なくとも１つの条件に左右される方法。
【請求項１４】
保護対象目標ファイルからデータを読み出すシステムであって、
ａ）ラッパーアプリケーションのプログラムコードを引き出しかつ実行するように構成されたプロセッサであって、前記プログラムコードは、
ｉ）前記ラッパーアプリケーションから独立したアプリケーションによって発行される少なくとも１つのファイルコマンドを傍受するコードであって、前記少なくとも１つのファイルコマンドは保護対象目標ファイルにアクセスするコードと、
ｉｉ）前記少なくとも１つのファイルコマンドに関する更新情報を読み出すコードと、を含むプロセッサと、
ｂ）保護対象目標ファイルを蓄積する第１のメモリ領域と、
ｃ）前記更新情報を蓄積する第２のメモリ領域と、
を備えるシステム。
【請求項１５】
請求項１４記載のシステムにおいて、
前記ラッパーアプリケーションは、
ｉｉｉ）前記保護対象目標ファイルのデータと前記更新情報とを一時ファイルの中で併合するコードをさらに含むシステム。
【請求項１６】
保護対象目標ファイルを読み出すためのラッパープログラムを使用する方法であって、
ａ）アプリケーションによって発行される少なくとも１つのファイルコマンドをラッパープログラムによって傍受するステップであって、前記少なくとも１つのファイルコマンドは保護対象目標ファイルにアクセスし、前記傍受するステップは前記アプリケーションにとって不可視であるステップと、
ｂ）デルタファイルに蓄積された前記少なくとも１つのファイルコマンドに関する更新情報を読み出すステップであって、前記デルタファイルは保護対象目標ファイルから独立しているステップと、
ｃ）目標ファイルのデータと前記更新情報とを併合するステップと、
ｄ）前記少なくとも１つのファイルコマンドに対する応答として前記併合の結果を返却するステップと、
を含む方法。
【発明の詳細な説明】
【技術分野】
【０００１】
目標ファイルを損傷から保護する種々の方法およびシステムが可能であり、特に方法およびシステムは、目標ファイルが書き込みのために開いているときの混乱によって生じるデータ損傷を防ぐことができる。
【背景技術】
【０００２】
コンピュータ工学技術ではフラッシュメモリ装置がよく知られている。
通常、そのようなメモリで情報を蓄積するには、オペレーティングシステムの管理下にあるデータファイルに情報を蓄積する。
フラッシュ蓄積システムの特徴として、書き込みのためのファイルが開いているときに停電やソフトウェアクラッシュ等、予期せぬ事態が発生すると、データファイルがデータ損傷を被りやすいことが知られている。ファイルへの書き込みは常に行われ、ファイルを更新するにはファイルを書き込みのために開かなければならないため、これは深刻な問題を投げかける。
【０００３】
これまで、ソフトウェアアプリケーションでファイルを特別な方法で処理してこのリスクを抑えるソリューションが開発されてきた。開いたファイルのバックアップコピーを定期的に作成する多くのワープロアプリケーションに、そのようなソリューションを見ることができる。ファイルの破損が検出された後に修復ユーティリティを実行する場合もある。しかし、そのようなソリューションはアプリケーションしだいで異なり、アプリケーションの開発ペースを落とし、プログラミングエラーによりタイプの異なる問題が生じることがある。さらに、実行中のアプリケーションがファイルのオリジナルバージョンを保護しながら更新済みの暫定コピーも保持していると、アクセス競合の問題（そのファイルを要望する別のアプリケーションがどちらのファイルにアクセスするかという問題）が生じる。この問題にあたっては面倒なファイルロックが必要になる。保護方法にはシステム全体規模のファイル保護方式もあり、この場合は、データ蓄積装置全体か特定の重要データの永続バックアップコピーを絶えず更新する。永続バックアップを維持するには、ファイルを絶えずチェックし更新するために多大なデータ蓄積容量とシステムリソースが要求される。
【０００４】
前述した原因によるファイル損傷のリスクがなく、永続バックアップコピーを維持せずとも任意のアプリケーションで任意のデータファイルを扱えるようにするソリューションがあれば大変有利であり、その必要性は広く認められている。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Computer programming text book "Loadable Kernel Module Programming and System Call Interception" by Nitesh Dhanjani and Gustavo Rodriguez-Rivera published in the Linux Journal 2006
【非特許文献２】"Advanced Windows 3rd Edition" by Jeffery Richter, Microsoft Press, Redmond Washington, 1997（具体的には７１１〜７１５ページ）
【発明の概要】
【０００６】
目標ファイルをデータ損傷から保護する種々の方法およびシステムが可能であり、特に方法およびシステムは、目標ファイルが書き込みのために開いているときの混乱によって生じるデータ損傷を防ぐことができる。
【０００７】
目標ファイルを蓄積しかつ目標ファイルをデータ損傷から保護するシステムの一実施形態は、ａ）ラッパーアプリケーションのプログラムコードを引き出しかつ実行するように構成されたプロセッサであって、このプログラムコードは、ｉ）第２のアプリケーションによって発行される少なくとも１つのファイルコマンドを傍受するコードであって、少なくとも１つのファイルコマンドは目標ファイルに作用するコードと、ｉｉ）少なくとも１つのファイルコマンドに関する更新情報を保存するコードと、ｉｉｉ）更新情報により目標ファイルを更新するコードと、を含むプロセッサと、ｂ）目標ファイルを蓄積する第１のメモリ領域と、ｃ）更新情報を蓄積する第２のメモリ領域と、を備える。ラッパーアプリケーションは、ファイルコマンドを発行する第２のアプリケーションから独立している。
【０００８】
コンピュータ可読コードを具備するコンピュータ可読蓄積媒体の一実施形態において、目標ファイルをデータ損傷から保護するコンピュータ可読コードは、ａ）アプリケーションによって発行され目標ファイルに作用する少なくとも１つのファイルコマンドを傍受するプログラムコードと、ｂ）目標ファイルを変えることなく少なくとも１つのファイルコマンドに関する更新情報を保存するプログラムコードと、ｃ）更新情報により目標ファイルを更新するプログラムコードと、を含む。コンピュータ可読コードは、コマンドを発行するアプリケーションから独立している。
【０００９】
目標ファイルをデータ損傷から保護するためにラッパープログラムを使用する方法の一実施形態は、ａ）アプリケーションによって発行され目標ファイルに作用する少なくとも１つのファイルコマンドをラッパープログラムによって傍受するステップであって、傍受するステップはアプリケーションにとって不可視であるステップと、ｂ）目標ファイルを変えることなく少なくとも１つのファイルコマンドに関する更新情報を保存するステップと、ｃ）更新情報により目標ファイルを更新するステップと、を含む。
【００１０】
保護対象目標ファイルからデータを読み出すシステムの一実施形態は、ラッパーアプリケーションのプログラムコードを引き出しかつ実行するように構成されたプロセッサを備え、このプログラムコードは、ラッパーアプリケーションから独立したアプリケーションによって発行される少なくとも１つのファイルコマンドを傍受するコードであって、ファイルコマンドは保護対象目標ファイルにアクセスするコードと、ファイルコマンドに関する更新情報を読み出すコードと、を含む。また、システムは、保護対象目標ファイルを蓄積する第１のメモリ領域と、更新情報を蓄積する第２のメモリ領域と、を備える。
【００１１】
保護対象目標ファイルを読み出すためにラッパープログラムを使用する方法の一実施形態は、アプリケーションによって発行される少なくとも１つのファイルコマンドをラッパープログラムによって傍受するステップを含み、ファイルコマンドは保護対象目標ファイルにアクセスする。傍受するステップは、アプリケーションにとって不可視である。また、この方法は、少なくとも１つのファイルコマンドに関する更新情報をデルタファイルから読み出すステップを含む。デルタファイルは、保護対象目標ファイルから独立している。さらに、この方法は、目標ファイルのデータと更新情報とを併合するステップと、併合されたデータをファイルコマンドに対する応答として返却するステップとを含む。
【００１２】
目標ファイルを蓄積しかつ目標ファイルをデータ損傷から保護するシステムの一実施形態は、目標ファイルを蓄積する第１のメモリ領域を備える。また、このシステムは、目標ファイルに作用する少なくとも１つのファイルコマンドに関する更新情報を蓄積する第２のメモリ領域を備える。また、このシステムは、ラッパーアプリケーションのプログラムコードを引き出しかつ実行するように構成されたプロセッサを備え、このプログラムコードは、目標ファイルに作用する少なくとも１つのファイルコマンドを傍受するコードと、第２のメモリ領域に更新情報を保存するコードと、更新情報により目標ファイルを更新するコードとを含む。ラッパープログラムは、ファイルコマンドを発行するアプリケーションから独立している。
【００１３】
目標ファイルを蓄積するシステムにおいて、第１のメモリ領域はデータ処理装置の不揮発性メモリ内にある。システムの実施形態によっては、第２のメモリ領域は第１のメモリ領域と同じ不揮発性メモリ内にあり、目標ファイルと更新情報はメモリ内の別々の場所に蓄積される。別の実施形態において、第２のメモリ領域はデータ処理装置の揮発性メモリ内にある。別の実施形態において、第２のメモリ領域はデータ蓄積装置のメモリ（揮発性または不揮発性）内にある。
【００１４】
目標ファイルを蓄積するシステムにおいて、第１のメモリ領域は可搬型データ蓄積装置の不揮発性メモリ内にある。取り外し可能な媒体（例えば、磁気ディスク、光ディスク）や可搬型ドライブ（例えば、フラッシュディスク、外付けハードドライブ、またはスマートカード）は可搬型データ蓄積装置の例である。実施形態によっては、第２のメモリ領域は第１のメモリ領域と同じメモリ内にあり、目標ファイルと更新情報はメモリ内の別々の場所に蓄積される。別の実施形態において、第２のメモリ領域はデータ処理装置のメモリ（揮発性または不揮発性）内にある。別の実施形態において、第２のメモリ領域は可搬型データ蓄積装置の揮発性メモリ内にある。
【００１５】
目標ファイルを蓄積するシステムにおいて、更新情報は少なくとも１つのファイルコマンドに関するデータのみを含む。具体的に、更新データと、第２のメモリ領域と、デルタファイルは、目標ファイルからコピーされたデータを収容しない。したがって、アプリケーションによって発行され目標ファイルに作用するコマンドが蓄積された後でも、目標ファイルのデータ１部と（目標ファイルのデータは第１のメモリ領域だけに蓄積される）、蓄積されたファイルコマンドに関する更新情報１部（蓄積されたファイルコマンドに関するデータは第２のメモリ領域だけに蓄積される）だけが残る。併合イベントが発生した後に限り、目標ファイルのデータが一時ファイルへコピーされる。
【００１６】
さらに、目標ファイルを蓄積するシステムの一実施形態は、一時ファイルを蓄積する第３のメモリ領域を含み、ラッパーアプリケーションはさらに、目標ファイルの少なくとも一部分を一時ファイルにコピーするコードを含む。代替の実施形態において、一時ファイルは独立したファイルか、既存のファイル内に一時的に割り当てられた場所か、さもなくば揮発性メモリ内に一時的に割り当てられた場所である。さらに、ラッパーアプリケーションは、蓄積された更新情報を一時ファイルに適用して目標ファイルの更新バージョンを作るコードを含む。さらに、ラッパーアプリケーションは、目標ファイルの一部分を一時ファイルで差し替えるコードを含む。一代替の実施形態によると、第３のメモリ領域は第１のメモリ領域と同じメモリ内にある。別の代替の実施形態において、第３のメモリ領域は第２のメモリ領域と同じメモリ内にある。さらなる代替の実施形態において、第３のメモリ領域は前述したメモリのいずれか１つにある。つまり第３のメモリ領域は、データ処理装置またはデータ蓄積装置の揮発性または不揮発性メモリ内にあり、第３のメモリ領域の位置は第１および第２のメモリ領域の位置との組み合わせになる。
【００１７】
目標ファイルをデータ損傷から保護するコンピュータ可読コードを具備するコンピュータ可読蓄積媒体の一実施形態は、アプリケーションによって発行される少なくとも１つのファイルコマンドを傍受するプログラムコードを含み、このプログラムコードは、ファイルコマンドを発行するアプリケーションから独立している。プログラムコードは後述する一実施形態において、特定のアプリケーションとは別個に実行でき、任意のアプリケーションからのファイルコマンドを傍受する。このファイルコマンドは目標ファイルに作用する。目標ファイルを変えることなくファイルコマンドに関する更新情報を保存し、更新情報により目標ファイルを更新するプログラムコードを盛り込むこともできる。代替の実施形態において、一定の時間スケジュールに従って更新を行うこと、または１つ以上の終止イベントに応じて更新を行うこと、または一定の時間スケジュールと１つ以上の終止イベントとの組み合わせで更新を行うことをコードで指定できる。可搬型蓄積装置に内蔵されたＲＯＭや、蓄積装置とともにパッケージで販売される取り外し可能な媒体（例えば、ＣＤ）等は、コンピュータ可読媒体の例である。代わりに、コンピュータ可読媒体はインターネット上でアクセスできるサーバに設置されたハードディスクであってもよい。プログラムコードは単独プログラムとして機能し、１つ以上の任意の蓄積装置でデータを保護する。代わりに、コードをドライバプログラムに組み入れてデータ処理装置で実行することもでき、この場合のドライバプログラムはデータ処理装置とデータ蓄積装置との間で橋渡しの役割を果たす。代わりに、オペレーティングシステムやファイルサーバアプリケーションにコードを組み込むこともできる。さらなる代替の実施形態において、データ蓄積装置の内部プロセッサによってコードが実行される。
【００１８】
ファイルコマンドを傍受しかつ更新情報を保存するプログラムコードの一実施形態は、１つ以上の条件しだいで傍受と保存を行う。例えば、コマンドを発行するアプリケーションが複数の「対象」アプリケーションの１つである場合に限り、傍受と保存を実行する。「対象」アプリケーションはここでの説明の文脈において、目標ファイルを修正するファイルコマンドがラッパープログラムによって傍受されるアプリケーションとして指定されたアプリケーションと定義する（対象アプリケーションは通常、停電保護機能なしで重要ファイルを蓄積するアプリケーションである［例えば、Ｍｉｃｒｏｓｏｆｔ  Ｖｉｓｕａｌ  Ｓｔｕｄｉｏ（登録商標）］）。代替例では、「対象外」アプリケーション以外のアプリケーションによってファイルコマンドが発行される場合にファイルコマンドを傍受し、更新情報を保存する。「対象外」アプリケーションはここでの説明の文脈において、目標ファイルを修正するファイルコマンドがラッパープログラムによって傍受されないアプリケーションとして指定されたアプリケーションと定義する（例えば、独自の自動ファイル保護機能を持つＭｉｃｒｏｓｏｆｔ  Ｗｏｒｄ（登録商標）は対象外のアプリケーションとし、あるいは多数の一時ファイルは保存してもユーザによって修正されたファイルは通常保存しないＭｉｃｒｏｓｏｆｔ  Ｉｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ（登録商標）は対象外とする）。代替例では、ファイルコマンドが一時ファイル以外のファイルに作用する場合にファイルコマンドを傍受し、更新情報を保存する。代替例では、ファイルコマンドが「対象」ファイルタイプに属するファイルに作用する場合に、ファイルコマンドを傍受し、更新情報を保存する。「対象」ファイルタイプはここでの説明の文脈において、ラッパーアプリケーションによる保護の対象として指定されたファイルタイプである［例えば、．ｔｘｔファイルは対象ファイルタイプとする］。代替例では、ファイルコマンドが「対象外」ファイルタイプに属さないファイルに作用する場合に、ファイルコマンドを傍受し、更新情報を保存する。「対象外」ファイルタイプはここでの説明の文脈において、ラッパーアプリケーションによる保護の対象外として指定されたファイルタイプであり［例えば、ファイルタイプ．ｄｏｃおよび．ｔｍｐは対象外とする］、さらに代替例では、ファイルコマンドが対象蓄積装置に蓄積されたファイルに作用する場合に、ファイルコマンドを傍受し、更新情報を保存する。対象装置はここでの説明の文脈において、保護の対象として指定された装置と定義されるため、対象装置にあるファイルは保護の対象となる。
【００１９】
さらに、コンピュータ可読コードの一実施形態は、保存コードが実行されてから更新コードが実行されるまでの間に目標ファイルに作用するすべての書き込みコマンドを傍受するコードを含む。
さらに、コンピュータ可読コードの一実施形態は、終止イベントを検出するコードと、終止イベントが検出される場合に更新情報により目標ファイルを更新するコードとを含む。例えば、終止イベントは、目標ファイルを閉じるコマンドが発行されること、目標ファイルにアクセスしたアプリケーションが終了すること、複数のファイルコマンドに関する統計に基づき条件が成立すること、［例えば、目標ファイルに向けて発行されるファイルコマンドのうち、１０キロバイト未満のデータを変更するものが８０％を占める場合に、目標ファイルで１０キロバイト以上のデータを変更するファイルコマンドが発行されると終止イベントをトリガーする］、前回の目標ファイル更新以降に最大時間しきい値を超過すること等を含む。
【００２０】
さらに、コンピュータ可読コードの一実施形態は、目標ファイルの一部分を一時ファイルにコピーするプログラムコードと、保存済み更新情報を一時ファイルに適用するプログラムコードとを含む。コードは、一代替の実施形態において、更新情報を保存した直後に一時ファイルを開き、データをコピーできるようにする。コードは、第２の代替の実施形態において、目標ファイルを更新する直前に一時ファイルを開き、データをコピーできるようにする。
さらに、コンピュータ可読コードの一実施形態は、併合イベントが発生した場合に保存済み更新情報を一時ファイルに適用するプログラムコードを含む。
【００２１】
説明する好適な実施形態のさらなる特徴によると、併合イベントは例えばｉ）目標ファイルを閉じるコマンドが発行されること、ｉｉ）目標ファイルにアクセスしたアプリケーションが終了すること、ｉｉｉ）複数のファイルコマンドに関する統計に基づき条件が成立すること［例えば、目標ファイルに向けて発行されるファイルコマンドのうち、１０キロバイト未満のデータを変更するものが８０％を占める場合に、目標ファイルで１０キロバイト以上のデータを変更するファイルコマンドが発行されると終止イベントをトリガーする］、ｉｖ）更新情報を収容するデルタファイルのサイズが最大サイズしきい値を超過すること、ｖ）オペレーティングシステムの活動レベルが最低活動しきい値を下回ること、ｖｉ）前回の併合イベント以降に最大時間しきい値を超過すること、またはｖｉｉ）目標ファイルを読み出すコマンドが発行されること等を含み、目標ファイルを読み出すコマンドが発行される場合は、読み出しコマンドの実行を模擬する直前に保存済み更新情報を一時ファイルに適用する。したがって、一時ファイルに収容された更新済みデータは、読み出しコマンドを発行したアプリケーションに対し読み出し情報として返却される。これとは別に、目標ファイルの更新直前に保存済みファイルコマンドを一時ファイルへ適用する。
【００２２】
説明する好適な実施形態のさらなる特徴によると、コンピュータ可読コードはさらに、終止イベントを検出するプログラムコードと、終止イベントが検出される場合に保存済み更新情報により目標ファイルを更新し、さらにその後目標ファイル、または一時ファイル、または保存済み更新情報を収容するデルタファイルを、削除するプログラムコードとを含む。
【００２３】
目標ファイルをデータ損傷から保護するためにラッパープログラムを使用する方法の一実施形態は、ラッパープログラムが目標ファイルに作用する少なくとも１つのファイルコマンドを透過的に傍受するステップと、ラッパープログラムが目標ファイルを変えることなく少なくとも１つのファイルコマンドに関する更新情報を保存するステップとを含み、ラッパープログラムは、ファイルコマンドを発行するアプリケーションから独立している。更新情報は、少なくとも１つのファイルコマンドを実行するにあたって必要な情報を含む。また、この方法は、更新情報により目標ファイルを更新するステップを含む。
【００２４】
説明する好適な実施形態のさらなる特徴によると、更新情報の保存が始まって保存済み更新情報による目標ファイルの更新が終わるまでの間に、複数の対象アプリケーションに属する一アプリケーションによって発行され目標ファイルに作用する書き込みコマンドはすべて傍受され、保存される。
説明する好適な実施形態のさらなる特徴によると、目標ファイルを更新することは、目標ファイルの少なくとも一部分を一時ファイルにコピーするサブステップと、保存済み更新情報を一時ファイルに適用するサブステップと、目標ファイルの全体または一部分を一時ファイルの全体または一部分で差し替えるサブステップとを含み、これにより事実上目標ファイルは更新され、一時ファイルは削除される。
【００２５】
説明する好適な実施形態のさらなる特徴によると、更新するステップは１つ以上の終止イベントが発生する場合に実行される。終止イベントは例えば、ｉ）目標ファイルを閉じるコマンドが発行されること、ｉｉ）目標ファイルにアクセスしたアプリケーションが終了すること、ｉｉｉ）複数のファイルコマンドに関する統計に基づき条件が成立すること［例えば、３０分の期間中にアプリケーションが５分に１回以上の割合で目標ファイルにアクセスしていた場合に、アプリケーションが目標ファイルにアクセスしない状態が１０分間続くと終止イベントが発生し、目標ファイルの更新がトリガーされる］、ｉｖ）オペレーティングシステムの活動レベルが最低活動しきい値を下回ること、ｖ）既に保存済みのファイルコマンドの発行以降に最大時間しきい値を超過すること、ｖｉ）前回の併合イベント以降に最大時間しきい値を超過すること等を含む。
【００２６】
説明する好適な実施形態のさらなる特徴によると、ファイルコマンドを傍受するステップと更新情報を保存するステップは、条件に左右される。例えば、複数の対象アプリケーションに属する一アプリケーションによってファイルコマンドが発行される場合、対象外アプリケーション以外のアプリケーションによってファイルコマンドが発行される場合、ファイルコマンドが一時ファイル以外のファイルに作用する場合、ファイルコマンドが対象ファイルタイプに作用する場合、ファイルコマンドが対象外ファイルタイプのファイルに作用しない場合、またはファイルコマンドが対象蓄積装置に蓄積されたファイルに作用する場合に限り、傍受と保存を行う。
【００２７】
保護対象目標ファイルからデータを読み出すシステムの一実施形態はプロセッサを備え、このプロセッサは、ラッパーアプリケーションのコードを蓄積媒体から引き出すように構成され、かつコードを実行するように構成される。ラッパーアプリケーションは、ラッパーアプリケーションから独立したアプリケーションによって発行される少なくとも１つのファイルコマンドを傍受するコードを含み、このファイルコマンドは保護対象目標ファイルにアクセスする。また、ラッパーアプリケーションは、ファイルコマンドに関する更新情報を読み出すコードを含む。また、システムは、保護対象目標ファイルを蓄積する第１のメモリ領域と、更新情報を蓄積する第２のメモリ領域とを含む。
【００２８】
説明する好適な実施形態のさらなる特徴によると、保護対象目標ファイルを読み出すシステムのラッパーアプリケーションは、保護対象目標ファイルのデータと更新情報とを一時ファイルの中で併合するコードも含む。一時ファイルは更新情報を収容するファイルであり、さもなくば一時ファイルは個別の一時ファイルである。一時ファイルと更新情報は、目標ファイルと同じメモリ装置に蓄積されることもあれば、別個のメモリ装置に蓄積されることもある。
【００２９】
保護対象目標ファイルを読み出すためにラッパープログラムを使用する方法の一実施形態は、アプリケーションによって発行される少なくとも１つのファイルコマンドをラッパープログラムで傍受するステップを含み、このファイルコマンドは保護対象目標ファイルにアクセスする。傍受するステップは、コマンドを発行するアプリケーションにとって不可視である。また、この方法は、デルタファイルに蓄積された少なくとも１つのファイルコマンドに関する更新情報を読み出すステップを含む。デルタファイルは、保護対象目標ファイルから独立している。さらに、この方法は、目標ファイルのデータと前述した更新情報とを併合するステップと、併合されたデータをファイルコマンドに対する応答（読み出し結果データ）として返却するステップとを含む。
【００３０】
用語
以下の用語は本願において、当業者にとって周知の平易な意味で使われている。しかし、本願の主題を踏まえてさらなる明確化を図るため、これらの用語が本願でどのように使用、適用されているかを説明、詳述、例示する。以下の説明、詳述、例示は排他的なもの、または限定するものと解釈するのではなく、例示的なもの、または代表的なものと解釈するべきであることを理解されたい。以下に説明する用語は、通常の意味と以下の説明に沿って可能な限り広義に解釈するべきものである。
・併合：例えば、デルタファイルに保存された更新情報を、目標ファイルから一時ファイルへコピーされた内容に適用するプロセス（例えば、一時ファイルはデルタファイルであってもよく、あるいは単独の一時ファイルであってもよい）。
・併合イベント：併合プロセスをトリガーするイベント。このイベントは、オペレーティングシステムイベント、例えば、時間本位のオペレーティングシステムイベント、ファイルシステム操作、またはラッパーアプリケーションからの指示に基づく。
・目標ファイルの更新：目標ファイルに更新情報を適用するプロセス（前述したものを参照）。好適な実施形態（以下）では、目標ファイルの一部分を一時ファイルにコピーし、更新情報を一時ファイルに適用し、目標ファイルの一部分を一時ファイル内の対応する更新済みデータに差し替えることによって目標ファイルの更新を行う。
・デルタファイル：例えば、目標ファイルの変更に関係する更新情報を累積するために使われる一時ファイル。
・目標ファイル：何らかの行為、操作、処理等の対象となるファイルであって、ファイルに対する働きかけや作用が実際にあるかどうかは問わない。ここで用いる「目標ファイル」はデータ損傷から保護されるファイルを意味する。
・傍受：例えば、アプリケーションとファイルシステムとの通信、あるいはアプリケーションとオペレーティングシステムとの通信を、監視、チェック、変更、および／またはリダイレクトするプロセス。
・独立したアプリケーション：第１のアプリケーションが第２のアプリケーションに左右されない場合、すなわちこれが意図するように機能するにあたって第２のアプリケーションを必要としない場合、第１のアプリケーションは第２のアプリケーションから独立していると言う。
・ラッパー：例えば、別のアプリケーションとコンピュータシステムとの通信、あるいは１つ以上のアプリケーションと装置との通信を、監視、傍受、および／または制御するアプリケーション。
・データ蓄積装置：例えば、データ処理装置がデータの蓄積と引き出しに用いる装置。データ蓄積装置には設置可能なものと（例えば、ハードディスク）、取り外し可能なものと（例えば、フラッシュディスク）、取り外し可能な媒体（例えば、コンパクトディスク、磁気テープ）がある。
・コマンドの蓄積：本願において「デルタファイルにコマンドを蓄積する」は、コマンドに関する更新情報、すなわち先々のコマンド適用にあたって必要なデータを含む更新情報をデルタファイルに蓄積する操作を意味する。
【００３１】
ここでは専ら例示を目的とし、添付の図面を参照しながらデータ損傷からファイルを保護するシステムおよび方法の様々な実施形態を説明する。
【図面の簡単な説明】
【００３２】
【図１Ａ】先行技術のファイル蓄積システムの概略図である。
【図１Ｂ】目標ファイルを蓄積し保護するシステムの第１の実施形態の概略図である。
【図２】目標ファイルを蓄積し保護するシステムの第２の実施形態の概略図である。
【図３】読み出しコマンドの傍受およびリダイレクトと、目標ファイル読み出しの模擬とを示すフローチャートである。
【図４】一時ファイルに対する更新情報の適用を示すフローチャートである。
【図５】目標ファイルに対する書き込みコールを傍受しリダイレクトするプロセスを示すフローチャートである。
【発明を実施するための形態】
【００３３】
種々の実施形態による漸進・透過的ファイル更新の原理および動作は、図面と添付の説明を参照することでよりよく理解できる。
種々の好適な実施形態は、書き込みのためのファイルを開いておく時間を最小限に抑え、ファイルの開放中に予期せぬ事態が起こるリスクを最小限に抑えることにより、データファイルを損傷するリスクを最小限に抑えるシステムを例示するものである。
【００３４】
好適な実施形態によると、アプリケーションは保護されたデータファイル（目標ファイル）にアクセスする読み出しコマンドと書き込みコマンドを実施し、目標ファイルは読み出しの場合に限り開く（ファイルをリスクに晒さないプロセス）。これ以降デルタファイルと呼ぶ小さなサービス蓄積領域を開いておき、１つ以上のアプリケーションによる、１つ以上のデータファイル（目標ファイル）に作用する、ファイルコマンドに関する更新情報の蓄積に使用する。同時に、目標ファイルに対する読み出しと書き込みはラッパーアプリケーションによって模擬される。ラッパーアプリケーションは、機能的アプリケーションと装置との通信で、あるいは機能的アプリケーションとオペレーティングシステムとの通信で、基礎的要素を起動、監視、傍受、および模擬する。具体的に、更新情報はどれも１つ以上のデルタファイルに累積される。必要に応じ（例えば、更新済み目標ファイルの読み出しを模擬するため、または目標ファイルを更新する準備として）、蓄積された更新情報と目標ファイルから読み出されたデータを一時ファイルの中で併合する。併合プロセスでは書き込みのための一時ファイルを開き、目標ファイルの一部分または全体を一時ファイルへコピーする。ラッパーアプリケーションが次いでデルタファイルに蓄積された更新情報に基づき一時ファイルを更新する。
【００３５】
目標ファイルも時折更新される。目標ファイルを更新するときには、最初に一時ファイルを閉じ、チェックする。次いで、目標ファイルの一部分を一時ファイルで差し替える。このプロセスは、目標ファイルが開いてデータ損傷を被りやすい時間を最小限に抑えることによって目標ファイルをデータ損傷から保護する。さらに、目標ファイルを一時ファイルにコピーしているときに停電が発生しても、目標ファイルは損傷を受けずにすむ。目標ファイルの一部分を更新しているときに停電が発生しても、一時ファイルは損傷を受けずにすむ。
このラッピングプロセスは、ファイルシステムと機能的アプリケーションの双方にとって透明で不可視である。機能的アプリケーションは、ラッパーアプリケーションが存在しない場合とまったく同様に機能する。ファイルシステムは到来するファイルコマンドをすべて、ラッパーアプリケーションが存在しない場合とまったく同様に処理する。
【００３６】
このため機能的アプリケーションのプログラマはオペレーティングシステム規格に従って自身のプログラムを記述し、ファイル保護ルーチンに合わせてプログラムを調整する必要はなく、ファイル保護ルーチンを意識する必要すらない。同様に、蓄積装置への書き込み中に中断によるデータ損傷を防ぐルーチンをプログラマがアプリケーションごとに考案する必要はない。
【００３７】
ラッパープログラムの働きは機能的アプリケーションやファイルシステムから見えないため、ラッパープログラムは特定の機能的アプリケーションから独立して機能することができる。このため、ラッパープログラムは単独プログラムとして個別に販売でき、任意の機能的アプリケーションによってアクセスされるファイルを保護する。ラッパープログラムは特定の機能的アプリケーションから独立しているため、デバイスドライバに組み入れたり、ユーザがインストールする任意のプログラムからのコマンドに応答するオペレーティングシステムに組み入れたりすることができる。
図１Ａは、プロセッサ１２１ａを有する先行技術のデータ処理装置１２０ａ（パーソナルコンピュータ等）を示す。プロセッサ１２１ａは、アプリケーション１２２ａ（Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）Ｎｏｔｅｐａｄテキストエディタ等）およびファイル管理システム１２４ａ（ＦＡＴ３２、ＮＴＦＳ等）を実行する。アプリケーション１２２ａおよびファイル管理システム１２４ａは、プロセッサ１２１ａによって実行されることを伝えるため、プロセッサ１２１ａの中に示されている。
【００３８】
アプリケーション１２２ａはファイルコマンド、例えばファイル１３０ａにアクセスする読み出しコール１３４ａを発行する。ファイル１３０ａは可搬型データ蓄積装置１２６ａに蓄積される。読み出しコール１３４ａはファイル管理システム１２４ａによって直接処理される。ファイル管理システム１２４ａは読み出しのためのファイル１３０ａを開き、ファイル１３０ａからデータを読み出し（１３５ａ）、そのデータをアプリケーション１２２ａへ送信する（１３７ａ）。アプリケーション１２２ａは後に第２のファイルコマンド、すなわちファイル１３０ａに作用する書き込みコール１３６ａを発行する。当業者にとって周知のように、ファイルは通常ならば１組の連続するメモリアドレスに存在するのではなく一連の部分からなり、各部分のアドレスは１組のメモリアドレスポインタによって対応付けられる。具体的に、ファイル１３０ａは３つのセクション１３０ａ−ｉ、１３０ａ−ｉｉ、および１３０ａ−ｉｉｉからなる。ファイルの修正にあたって追加される情報は、そのファイルに現在割り当てられているメモリに収まらないことがある。そのような場合にファイル全体を別のメモリ範囲へ移す必要はなく、代わりに新たなアドレスをファイルに割り当て、新たなメモリ領域で新規データを書き込む。ファイル管理システム１２４ａは書き込みコール１３６ａを受け取り、書き込みのためのファイル１３０ａを開き、データをファイル１３０ａに直接書き込む（１３９ａ）。以上が最新技術である。
【００３９】
可搬型データ蓄積装置１２６ａ等の装置への書き込み中に混乱が生じると（例えば、停電、可搬型データ蓄積装置１２６ａのソケットからの取り外し、ソフトウェア障害）、開いているファイルから貴重なデータが失われるおそれのあることはよく知られている。したがって、アプリケーション１２２ａ等のアプリケーションが書き込みコマンド１３６ａ等の書き込みコマンドを発行すると、図１Ａのシステムのファイル１３０ａはデータ損失という重大な危険に晒される。
【００４０】
図１Ｂは、データ処理装置１２０ｂ（パーソナルコンピュータ等）を含む、漸進・透過的ファイル更新システムの第１の実施形態を示すものであり、このデータ処理装置はアプリケーション１２２ｂ（Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）Ｎｏｔｅｐａｄテキストエディタ等）を実行するプロセッサ１２１ｂと、ラッパーアプリケーション１５０（同じくプロセッサ１２１ｂ上で実行）と、ファイル管理システム１２４ｂ（ＦＡＴ３２、ＮＴＦＳ等）とを収容している。アプリケーション１２２ｂとラッパーアプリケーション１５０がプロセッサ１２１ｂによって実行されることを伝えるため、図１Ｂではアプリケーション１２２ｂとラッパーアプリケーション１５０がプロセッサ１２１ｂの中に表示されている。
アプリケーション１２２ｂはファイルコマンド、例えば可動型蓄積装置１２６ｂに蓄積されたファイル１３０ｂに作用する書き込みコール１３６ｂを発行する。アプリケーション１２２ｂは標準的なアプリケーションであって、ファイルコマンド（書き込みコール１３６ｂを含む）はどれも標準的なオペレーティングシステムプロトコルに従って発行される。
【００４１】
目標ファイル１３０ｂは１３０ｂ−ｉ、１３０ｂ−ｉｉ、および１３０ｂ−ｉｉｉと記された３つの部分からなる。各部分１３０ｂ−ｉ、１３０ｂ−ｉｉ、および１３０ｂ−ｉｉｉは一連のメモリアドレスを占めている。各部分１３０ｂ−ｉおよび１３０ｂ−ｉｉの最終バイトは、目標ファイル１３０ｂの次の部分の最初のアドレスを指し示すポインタである。部分１３０ｂ−ｉｉｉの最終ビットは、ファイル１３０ｂの終端を表すストップビットである。書き込みコール１３６ｂはラッパーアプリケーション１５０によって傍受される。この例の書き込みコール１３６ｂは部分１３０ｂ−ｉｉに作用する。書き込みコール１３６ｂを検出したラッパーアプリケーション１５０はチェックを行い、書き込みコール１３６ｂが傍受されリダイレクトされるべきものか否かを判断する。図１Ｂの実施形態の例では、蓄積装置１２６ｂが保護の対象となる蓄積装置に該当するタイプのものであること、およびファイル１３０ｂが保護の対象となるファイルに該当するタイプのものであることという条件をすべて満たすかどうかによって、書き込みコール１３６ｂの傍受とリダイレクトが決まる。この例では、ラッパーアプリケーション１５０の設定時にユーザがすべての可搬型蓄積装置を保護の対象として指定し、さらに可搬型蓄積装置１２６ｂのドライバルーチンでは可搬型蓄積装置１２６ｂが可搬型蓄積装置として設定されているため、可搬型蓄積装置１２６ｂは対象蓄積装置である。同様に、ファイル１３０ｂのタイプは対象ファイルタイプ（．ｔｘｔファイル）に該当するため、ラッパーアプリケーション１５０は書き込みコール１３６ｂを傍受し、リダイレクトする。
【００４２】
システムコールの傍受にはプログラミングの当業者にとって周知の数多くの方法があり、Ｌｉｎｕｘ  Ｊｏｕｒｎａｌ  ２００６で公表されたNitesh Dhanjani とGustavo Rodriguez-Riveraとによる「Loadable Kernel Module Programming and System Call Interception 」等、コンピュータプログラミングの教則本(Computer programming text book "Loadable Kernel Module Programming and System Call Interception" by Nitesh Dhanjani and Gustavo Rodriguez-Rivera published in the Linux Journal 2006)（非特許文献１）で詳述されている。具体的に、ラッパーアプリケーション１５０は書き込みコール１３６ｂがファイル管理システム１２４ｂへ直接送られることを阻止する。代わりに、ラッパーアプリケーション１５０は、書き込みコール１３６ｂに関する更新情報をデルタファイル１５８に保存することをファイル管理システム１２４ｂに命じる（１５２ｂ）。ファイル管理システム１２４ｂは、目標ファイル１３０ｂの更新にあたって必要な更新情報をデルタファイル１５８に書き込む（１３９ｂ）。図１Ｂの例で、更新情報は目標ファイル１３０ｂへ追加するデータを含む。更新情報は場合によっては編集情報であり（例えば、目標ファイル１３０ｂ内のある位置から別の位置へデータを移す命令、あるいは目標ファイル１３０ｂからデータを削除する命令）、この場合の更新情報が目標ファイル１３０ｂにとって新規のデータを含まないことが理解される。また、ファイル管理システムはデルタファイル１５８が存在しない場合に、最初にデルタファイル１５８を作成し、その後にデータを書き込む（１３９ｂ）。ラッパーアプリケーション１５０は実行中のアプリケーション１２２ｂに対し、あたかも目標ファイル１３０ｂが更新されたかのように報告し、そうすることで目標ファイル１３０ｂへの書き込みを模擬する。模擬書き込みプロセス中に行われる書き込みはすべて、デルタファイル１５８に対して行われる。目標ファイル１３０ｂは修正されず、書き込みのために開くことすらない。ラッパーアプリケーション１５０が標準オペレーティングシステムプロトコルに従ってファイルコマンドを受信し、オペレーティングシステムによる応答とデータを正確に模擬しながらアプリケーション１２２ｂへ応答とデータを返すことを強調する。このため、ラッパーアプリケーション１５０の活動はアプリケーション１２２ｂにとって不可視であり、アプリケーション１２２ｂの活動は操作基準に則ったものとなり、ラッパーアプリケーション１５０が存在しても変える必要はない。
【００４３】
図１Ｂの例で、ラッパーアプリケーション１５０とアプリケーション１２２ｂはいずれも単一のプロセッサ１２１ｂによって実行される。そこでラッパーアプリケーションは、コマンド傍受を円滑化するためにアプリケーション１２２ｂを包みこむ。アプリケーション１２２ｂを「包みこむ(Wrapping)」とは、アプリケーション１２２ｂが単独で実行しないことを意味する。ユーザがアプリケーション１２２ｂの起動を要求すると、その要求はラッパーアプリケーション１５０を通過する。ラッパーアプリケーション１５０はアプリケーション１２２ｂを呼び出し、アプリケーション１２２ｂはラッパーアプリケーション１５０の「内部」で実行する（ラッパーアプリケーションによって包みこまれる）（つまり、アプリケーション１２２ｂへの入力とアプリケーション１２２ｂからの出力はどれもラッパーアプリケーション１５０を経由する）。
【００４４】
アプリケーション１２２ｂは後に第２のファイルコマンド、すなわち読み出しコール１３４ｂを発行する。読み出しコール１３４ｂは、目標ファイル１３０ｂ、具体的には部分１３０ｂ−ｉｉにアクセスする。ラッパーアプリケーション１５０は読み出しコール１３４ｂをリダイレクトし、目標ファイル１３０ｂにアクセスする第１の読み出しコール１３４ｃを発行することによって目標ファイル１３０ｂからのデータ読み出しを模擬する。読み出しコール１３４ｃはファイル管理システム１２４ｂによって処理される。ファイル管理システム１２４ｂは読み出しのためのファイル１３０ｂを開き、ファイル１３０ｂの部分１３０ｂ−ｉｉからデータを読み出し（１３５ｃ）、ラッパーアプリケーション１５０へ読み出し結果データを送信する（１３７ｃ）。
【００４５】
ここでラッパーアプリケーション１５０は目標ファイル１３０ｂに関連するデルタファイル１５８の有無をチェックし、さらにデルタファイル１５８内の更新情報が読み出しコール１３４ｂの範囲に該当するか否かをチェックする。図１Ｂの例ではデルタファイル１５８が存在し、読み出しコール１３４ｂの範囲はファイル１３０ｂの部分１３０ｂ−ｉｉに含まれ、デルタファイル１５８の中には読み出しコール１３４ｂの範囲に該当する更新情報が入っている。そこで、読み出しコール１３４ｂを履行し最新の読み出し結果データ（模擬読み出し情報）をアプリケーション１２２ｂへ返すには、デルタファイル１５８に蓄積されたファイルコマンド１５２ｂに関する更新情報を目標ファイル１３０ｂのデータに併合する必要がある。そこで、読み出しコール１３４ｂを併合イベントとし、この併合イベントによって、デルタファイル１５８に蓄積されたコマンドと目標ファイル１３０ｂに蓄積されたデータとの併合をトリガーする。ラッパーアプリケーション１５０は併合を果たすため、デルタファイル１５８にアクセスする第２の読み出しコール１３４ｄを発行する。読み出しコール１３４ｄはファイル管理システム１２４ｂによって処理される。ファイル管理システム１２４ｂは読み出しのためのデルタファイル１５８を開き、デルタファイル１５８からデータを読み出し（１３５ｄ）、読み出し結果データをラッパーアプリケーション１５０へ送信する（１３７ｄ）。
【００４６】
ラッパーアプリケーション１５０は、読み出し１３５ｄからの更新情報を読み出し１３５ｃからのデータに適用することによって読み出し１３５ｃ−ｄの読み出し結果データを併合し、併合されたデータを実行中のアプリケーション１２２ｂへ送信し（１３７ｂ）、読み出し要求１３４ｂに対する読み出し結果データの返却を模擬する。こうしてラッパーアプリケーションは、目標ファイル１３０からの更新済みデータの読み出しを模擬する。アプリケーション１２２ｂは、ファイル管理システム１２４ｂと直接交信しなかったことに気づかない。
【００４７】
この時点で、読み出し１３５ｃ−ｄからの併合データは、目標ファイル１３０ｂの部分１３０ｂ−ｉｉの更新済みバージョンになっている。この例で、データ処理装置１２０ｂ上での活動は現在少ないため（自由に使える処理能力が豊富にあって、目標ファイル１３０を更新しても他のプロセスの妨げとならないため）、ラッパーアプリケーション１５０は目標ファイル１３０ｂを更新する。データが一時ファイルに併合されるたびに目標ファイル１３０ｂを更新する必要がないことが理解される。目標ファイル１３０ｂを更新するため、ラッパーアプリケーション１５０はまず、併合済みデータをデルタファイル１５８に書き込むこと１３９ｃをファイルシステム１２４ｂに命じる（１５２ｃ）（デルタファイル１５８に予め蓄積されたファイルコマンド情報を差し替える）。次に、ラッパーアプリケーション１５０は、部分１３０ｂ−ｉｉをデルタファイル１５８に現在蓄積されている併合済みデータで差し替えることによって（１９３）、目標ファイル１３０ｂを更新することを、ファイルシステム１２４ｂに命じる。目標ファイル１３０ｂとデルタファイル１５８はいずれも同じ蓄積装置１２６ｂに存在するため、差し替え１９３にあたっては、部分１３０ｂ−ｉｉの代わりにデルタファイル１５８を目標ファイル１３０ｂに組み入れるようにアドレスポインタを変更するだけでよい。具体的に、図１Ｂの例ではデルタファイル１５８終端のポインタのアドレスを、ファイル１３０ｂの部分１３０ｂ−ｉｉｉの先頭を指し示すように設定し、デルタファイル１５８を閉じる。デルタファイル１５８が閉じたことをラッパーアプリケーション１５０がベリファイした後には、書き込みのための目標ファイル１３０ｂを開き、目標ファイル１３０ｂの部分１３０ｂ−ｉの終端のポインタをデルタファイル１５８の先頭のアドレスを指し示すように設定し、目標ファイル１３０ｂを閉じる。最後に、デルタファイル１３０ｂの部分１３０ｂ−ｉｉのメモリ領域を解放し、先々の書き込みコマンドで使用できるようにする。デルタファイル１５８は完全に目標ファイル１３０ｂへ再配置されたため、デルタファイル１５８の先頭のメモリポインタは蓄積装置１２６ｂのディレクトリから取り除かれ、デルタファイル１５８は事実上削除される。先々書き込みコマンドがある場合は、ラッパーアプリケーション１５０がデルタファイルを新たに作成する必要がある。
【００４８】
図１Ｂの例では、目標ファイル１３０ｂからコピーされたデータとデルタファイル１５８に蓄積されたコマンドとの併合が読み出しコール１３４ｂによってトリガーされる。終止イベントが発生して目標ファイル１３０ｂの更新が必要となる場合にも、併合はトリガーされる。目標ファイル１３０ｂの更新にあたっては、事前にデルタファイル１５８に蓄積された更新情報と目標ファイル１３０ｂに蓄積されたデータを一時ファイルの中で併合する（前述したように、デルタファイル１５８が一時ファイルの役割を果たすこともある）。こうすることで一時ファイルは目標ファイル１３０ｂのバックアップとして機能し、目標ファイル１３０ｂの更新中に停電が発生して目標ファイル１３０ｂが損傷する場合でも、一時ファイルから目標ファイル１３０ｂのデータを取り戻すことができる。前回の併合から時間しきい値を超過した後に、使用可能なリソース［メモリ領域とプロセッサ時間］がある場合にも、併合をトリガーできる。
【００４９】
目標ファイルの更新をトリガーするイベントは数多くある。更新は定期的にトリガーされることもあれば（例えば、１５分毎に目標ファイル１３０ｂを更新）、終止イベントによってトリガーされることもある。終止イベントは例えば、目標ファイルにアクセスしたアプリケーション１２２ｂが終了すること、デルタファイル１５８が大きくなり過ぎること（サイズしきい値超過）、複合イベント（例えば、前回の更新以降に時間しきい値を超過し、その後に使用可能なリソース（メモリ領域とプロセッサ時間）がある）等を含む。
【００５０】
デルタファイル１５８もまた部分からなり、デルタファイル１５８の第１の部分で部分１３０ｂ−ｉｉのファイルコマンドを収容し、デルタファイル１５８の第２の部分で部分１３０ｂ−ｉｉｉのファイルコマンドを収容できることは、当業者によって理解される。この場合は、部分１３０ｂ−ｉｉとデルタファイル１５８の第１の部分を併合し、その後部分１３０ｂ−ｉｉを更新してファイル１３０ｂの部分１３０ｂ−ｉｉｉは元の状態に保ち、デルタファイル１５８の中に第２の部分だけを残すことができる。同様に、ファイルディレクトリのアドレスポインタやストップビットを変更することによって、ファイルの最初の部分や最後の部分を変更できることが理解される。
【００５１】
図１Ｂの実施形態では、デルタファイル１５８が目標ファイル１３０ｂと同じメモリ（可搬型メモリ装置１２６ｂ）に蓄積される。デルタファイル１５８は、データ処理装置１２０ｂの高速揮発性メモリ、またはハードディスク、またはデータ処理装置１２０ｂの不揮発性メモリ、または別の可搬型蓄積装置、または取り外し可能な媒体（例えば、書き込み可能なコンパクトディスク）に存在する一時ファイルの一部であってもよいことが理解される。同様に、図１Ｂの実施形態ではラッパーアプリケーション１５０が計算装置１２０ｂの揮発性メモリの一領域で読み出し１３５ｃ−ｄのデータを併合することで、事実上、併合済みデータを収容する領域へ読み出しコール１３４ｂをリダイレクトする。併合済み情報は任意のメモリ装置に蓄積でき、例えばハードディスク、またはデータ処理装置１２０ｂの不揮発性メモリ、または別の可搬型蓄積装置、または取り外し可能な媒体（例えば、書き込み可能なコンパクトディスク）に蓄積できることを理解されたい。
【００５２】
図２は、アプリケーション２２２（Ｍｉｃｒｏｓｏｆｔ  Ｖｉｓｕａｌ  Ｓｔｕｄｉｏ（登録商標）等）と、ラッパーアプリケーション２５０と、ファイル管理システム２２４（ＦＡＴ３２、ＮＴＦＳ等）とを実行するデータ処理装置２２０（並列プロセッサからなるネットワーク等）を示す。
【００５３】
アプリケーション２２２はファイルコマンド、すなわち蓄積装置２２６に蓄積されたファイル２３０に作用する書き込みコール２３６を発行する。書き込みコール２３６はラッパーアプリケーション２５０によって傍受される。図２の実施形態ではラッパーアプリケーション２５０がプロセッサ２２１ｂによって実行されるが、アプリケーション２２２は別のプロセッサ２２１ａによって、すなわちデータ処理装置２２０のネットワーク内の一プロセッサによって実行される。ラッパーアプリケーション２５０は、書き込みコール２３６に関する更新情報をデルタファイル２５８に保存することをファイル管理システム２２４に命じることによって（２５２）、書き込みコール２３６をリダイレクトする。ファイル管理システム２２４は、目標ファイル２３０の更新にあたって必要となる更新情報だけをデルタファイル２５８に書き込む（２３９）。書き込みコール２３６に関する更新情報はデルタファイル２５８に保存されるが、目標ファイル２３０に変化はない。ラッパーアプリケーション２５０は実行中のアプリケーション２２２に対し、あたかも目標ファイル２３０が更新されたかのように報告することで、ファイル２３０への書き込みを模擬する。図２の例で、デルタファイル２５８はデータ処理装置２２０の揮発性メモリに蓄積される。
【００５４】
後に「終止イベント」２８８の発生を検出したラッパーアプリケーション２５０は（図２の例では、目標ファイル２３０に作用する書き込みコール２３６を発行したアプリケーション２２２の終了が終止イベント２８８となる）、目標ファイル２３０を更新する。デルタファイル２５８はファイル２３０と同じ蓄積装置２２６に蓄積されていないため、（図１Ｂの例のように）データをデルタファイル２５８にコピーし、デルタファイル２５８にコピーされたデータに更新情報を適用し、ポインタを変更することによって、目標ファイル２３０を更新することはできない。目標ファイル２３０を更新するには、まずはラッパーアプリケーション２５０が蓄積装置２２６の一時ファイル２９２の中で、デルタファイル２５８に蓄積された更新情報と目標ファイル２３０のデータとを併合しなければならない。そこでラッパーアプリケーション２５０は、一時ファイル２９２を作成すること２９４と、目標ファイル２３０の内容を一時ファイル２９２にコピーすること２９６と、デルタファイル２５８に蓄積されたファイルコマンド（書き込みコール２３６に関する更新情報）を一時ファイル２９２に適用すること２９８とを、ファイルシステム２２４に命じる（２９０）。併合に成功したラッパーアプリケーション２５０は、一時ファイル２９２を閉じることと、目標ファイル２３０を一時ファイル２９２で差し替えること２９３とを、ファイルシステム２２４に命じる。目標ファイル２３０と一時ファイル２９２はいずれも同じ蓄積装置２２６に既に存在するため、差し替え２９３にあたっては、一時ファイル２９２のポインタをファイルディレクトリから削除し、目標ファイル２３０のポインタ（蓄積されたアドレス）を一時ファイル２９２のアドレスに変更するだけでよい（これにより、事実上目標ファイル２３０は更新され、一時ファイル２９２は削除される）。
【００５５】
図２の例で、アプリケーション２２２はラッパーアプリケーション２５０と同じプロセッサ２２１によって実行されていないため、ラッパーアプリケーション２５０でアプリケーション２２２を包みこむこと（アプリケーション２２２の全入出力を制御すること）はできない。そこでラッパーアプリケーション２５０はファイルシステム２２４を包みこみ、ファイルシステム２２４に対するすべてのコールがラッパーアプリケーション２５０を通過するようにする。これによりラッパーアプリケーション２５０は、事実上蓄積装置２２６を包みこむことになる。
場合によってはファイル２３０が複数のアプリケーションによってアクセスされることが理解される。この場合、それぞれのアプリケーションからの書き込みコマンドはラッパーアプリケーション２５０によって傍受され、デルタファイル２５８へリダイレクトされる。同様に、いずれかのアプリケーションによるファイル２３０を読み出す試みは傍受され、併合イベントをトリガーする。保護対象ファイルに対するアクセスをロックしなければならない先行技術の単一アプリケーションファイル保護方式（Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｗｏｒｄで採用されているもの等）と違って、ラッパーアプリケーション２５０なら、目標ファイル２３０に対する複数のアプリケーションによる同時読み出し／書き込みアクセスが可能であることは当業者によって理解される。
【００５６】
ファイルに対するアクセスのロックとファイルアクセス競合の可能性も当業者によって理解される。具体的に、ラッパーアプリケーション１５０が１つ以上の特定のアプリケーション（例えば、アプリケーション２２２）だけを包みこみ、ファイルシステム１２４ｂを包みこまない図１の実施形態では、単独のアプリケーション（ラッパーアプリケーション１５０によって包みこまれていないアプリケーション）がラッパーアプリケーション１５０を経由せずにファイル１３０ｂにアクセスする可能性がある。先行技術のソリューション（ファイル１３０ｂのロック等）はこのような場合のために存在する（例えば、"Advanced Windows 3rd Edition" by Jeffery Richter, Microsoft Press, Redmond Washington, 1997（具体的には７１１〜７１５ページ）（非特許文献２）で説明されているもの）。
【００５７】
代替の実施形態において、第１の書き込みコール２３６の傍受の一部として目標ファイル２３０から一時ファイル２９２へデータをコピー２９６できることを理解されたい。そのような実施形態における一時ファイル２９２は目標ファイル２３０の更新バージョンにあたり、その更新は絶えず行われ、目標ファイル２３０の更新にあたっては一時ファイル２９２を閉じ、目標ファイル２３０のアドレスポインタを一時ファイル２９２のアドレスに移すだけでよい。
図２の例で、プロセッサ２２１ａ−ｂはデータ処理装置２２０のマルチプロセッサネットワークの構成品である。これとは別のプロセッサ構成も存在し、ファイルを保護するシステムおよび方法の各種実施形態と両立することは当業者によって理解される。例えば、プロセッサ２２１ｂはデータ蓄積装置２２６の内蔵構成品であってもよく、あるいはネットワーク上の専用ファイルシステムサーバの構成品であってもよい。
【００５８】
図３は、図２の実施形態の読み出しプロセスの簡略フローチャートを示す。アプリケーション２２２からの読み出しコマンドはラッパーアプリケーション２５０によって傍受される（３０１）。ラッパーアプリケーション２５０はまず、読み出しコマンドの宛先にあたるファイル２３０の更新情報を収容するデルタファイルの有無を検査する（３０２）。デルタファイルが存在しなければファイル管理システム２２４へ制御が戻り、ファイル管理システム２２４は、要求された範囲を目標ファイル２３０から直接読み出し（３０６）、要求する側のアプリケーション２２２へ読み出し結果データを返却しながら（３０９）、先行技術のように読み出しコマンドを処理する。
【００５９】
検査３０２から肯定的結果が出るなら（読み出しの対象となるファイル２３０の更新情報を収容するデルタファイル２５８が存在するなら）、ラッパーアプリケーション２５０はさらに、デルタファイル２５８の更新情報が読み出しコマンドの範囲に作用するか否かをチェックする（３０４）。要求範囲に該当する更新情報がなければファイル管理システム２２４へ制御が戻り、ファイル管理システム２２４は、要求範囲を目標ファイル２３０から直接読み出し（３０６）、要求する側のアプリケーション２２２へデータを返却しながら（３０９）、先行技術のように読み出しコマンドを処理する。
【００６０】
検査３０４から肯定的結果が出るなら（デルタファイル２５８の中にデータ読み出し範囲の更新情報があるなら）、ラッパーアプリケーション２５０は、デルタファイルにある読み出し範囲のデータと目標ファイルにある更新情報を併合し（３０８）（目標ファイル２３０にある読み出し範囲を一時ファイル２９２へコピーし、デルタファイル２５８にある更新情報を一時ファイル２９２内のコピー済みデータに適用する）、要求範囲の併合データを要求する側のアプリケーション２２２へ返却する（３０９）。
【００６１】
図４は、図２の実施形態による併合プロセスの簡略フローチャートを示す。ラッパーアプリケーション２５０は終止イベント２８８の発生を検出し（４１０）、この終止イベントは、（目標ファイル２３０の更新に先立ち）併合プロセスを開始する必要があることを意味する。具体的に図４の例では、現在のセッションで目標ファイル２３０を修正するために少なくとも１つのコマンドを発行したアプリケーション２２２がユーザによって終了される。装置２２０のオペレーティングシステムがアプリケーション２２２を終了しようとしていることを検出したラッパーアプリケーション２５０は、空の一時ファイル２９２を開くこと（２９４）と、目標ファイル２３０の内容を一時ファイル２９２へコピーすること（２９６）とを、ファイルシステム２２４に命じる（２９０）。具体的に、図４の例で一時ファイル２９２へコピーするデータは、書き込みコール２３６でアクセスすることになっていたデータ範囲である。さらに、ラッパーアプリケーション２５０は、デルタファイル２５８に蓄積された更新情報を一時ファイル２９２に適用すること２９８を、ファイルシステム２２４に命じる。具体的に、図４の例では書き込みコール２３６に関する更新情報がデルタファイル２５８の中に入っている。デルタファイル２５８に蓄積された更新情報が一時ファイル２９２に適用されると（２９８）、ラッパーアプリケーション２５０は一時ファイル２９２を閉じる（４１１）コマンドを発行し、さらに目標ファイル２３０の一部分のポインタのアドレスを一時ファイル２９２のアドレスに変更することによって目標ファイル２３０の一部分を一時ファイル２９２で差し替える（２９３）コマンドを発行する。次に、ラッパーアプリケーション２５０は、不要になった目標ファイル２３０の差し替え部分とデルタファイル２５８のメモリ領域を空き領域として報告するようにファイルシステム２２４に命じることにより、目標ファイル２３０の差し替え部分とデルタファイル２５８とを破棄する（４１３）。
【００６２】
別のアプリケーションがデルタファイル２５８に書き込んでいるときに併合イベントがトリガーされる場合は、その書き込み操作が完了するまで併合プロセスが保留になる。併合プロセスが完了した後に目標ファイル２３０に対し新たな書き込みコールがあると、新規のデルタファイルが開く（４１４）。代わりに、併合プロセスの直後に自動的に新規デルタファイルが開く（４１４）こともできる。
【００６３】
アプリケーション２２２の終了とは別に、またはアプリケーション２２２の終了に加えて、併合イベントと解釈される事態には例えば次のものがある。（１）目標ファイル２３０を閉じるコマンドが発行されること、（２）複数のファイルコマンドに関する統計に基づき条件が成立すること、例えばアプリケーションが１時間の所定期間にわたって蓄積装置２２６のデータに平均して毎分１回アクセスしていて、その後平均アクセス間隔の３０倍にあたる期間（１分の３０倍は３０分）にわたってアプリケーションが蓄積装置２２６にアクセスしない状態が続くと、自動的に併合プロセスがトリガーされる、（３）デルタファイル２５８のサイズが最大サイズしきい値を超過すること（例えば、デルタファイル２５８に蓄積された更新情報が１００キロバイトを超過する場合）、（４）オペレーティングシステムの活動レベルが最低活動しきい値を下回ること（例えば、メモリとプロセッサの使用率が１０秒間にわたって５０％を下回る場合）、（５）前回の併合イベント以降に最大時間しきい値を超過すること（例えば、いずれかのファイルで前回の併合イベントから１５分が経過すると併合プロセスが新たに始まるというルールをラッパーアプリケーション２５０に設けることができる。このほかに、目標ファイル２３０を読み出すコマンドの発行も併合イベントをトリガーする（図３の説明にあるように、更新済みデータを読み出すには、目標ファイル２３０のデータをデルタファイル２５８の更新情報に併合する必要がある）。）
【００６４】
図５は、書き込みプロセスの簡略フローチャートを示す。アプリケーション２２２はファイルシステム２２４に向けて書き込みコール２３６を発行する。ラッパーアプリケーションは書き込みコール２３６を検出し（５４０）、ファイル２３０（書き込みコマンドの宛先にあたるファイル）をチェックし（５４２）、これが保護の対象となるファイルか否かを判断する。具体的に、図５の例で蓄積装置２２６は保護対象蓄積装置である。より具体的に、目標ファイル２３０は装置２２６に蓄積され、装置２２６は取り外し可能な可搬型蓄積装置であって、時期尚早な取り外しにより突如予期せぬ混乱が生じることがあるため、目標ファイル２３０は保護の対象となる。つまりラッパーアプリケーション２５０は、蓄積装置２２６で無防備の状態にある全永続ユーザファイルを保護する。より具体的に、書き込みコマンドを発行するアプリケーションが対象外のアプリケーションでない限り（例えば、内部ファイル保護・バックアップ機能を持つＭｉｃｒｏｓｏｆｔ（登録商標）Ｗｏｒｄは対象外アプリケーションであり、修正されたユーザファイルを蓄積しないＡｄｏｂｅ  Ａｃｒｏｂａｔ（登録商標）リーダもまた対象外である）、あるいは書き込みコマンドが対象外のファイルタイプに作用するものでない限り（例えば、．ｔｍｐタイプの一時ファイルでデータが失われてもさほど深刻ではないため、このタイプの一時ファイルは対象外である）、蓄積装置２２６に対する書き込みコマンドはすべてデフォルトにより傍受され、リダイレクトされる。アプリケーション２２２が対象外のアプリケーションである場合、または書き込みコマンドの宛先にあたるファイルが対象外のファイルタイプである場合、または書き込みコマンドの宛先にあたるファイルが蓄積装置２２６にない場合、ファイルシステム２２４はファイルへ直接書き込む（５４９）。
【００６５】
これとは別に、ファイルコマンドが対象アプリケーションによって発行される場合（対象アプリケーションとは、ラッパーアプリケーション２５０によってファイルコマンドの傍受が行われるアプリケーションのリストまたはグループに含まれているアプリケーション）、ファイルコマンドが対象外アプリケーション以外のアプリケーションによって発行される場合（対象外アプリケーションとは、ファイルコマンドの傍受が行われないアプリケーションのリストまたはグループに属するアプリケーション）、ファイルコマンドが一時ファイル以外のファイルに作用する場合、ファイルコマンドが対象ファイルタイプに作用する場合（対象ファイルタイプとは、ファイルのタイプが保護を受けるファイルタイプのリストまたはグループに含まれているもの）、ファイルコマンドが対象外ファイルタイプ以外のファイルに作用する場合（対象外ファイルタイプとは、ファイルのタイプが保護を受けないファイルタイプのリストまたはグループに含まれているもの）、ファイルコマンドが保護対象蓄積装置に蓄積されたファイルに作用する場合も、ファイルコマンドを傍受しリダイレクトする条件となる。前述した条件の１つ以上が満たされる場合は、ラッパーアプリケーション２５０が書き込みコールを傍受し（５０１）、リダイレクトし（５４８）、満たされない場合は、図１Ａの先行技術ファイルシステムについて説明したように、ファイルシステムがファイルに直接書き込む（５４９）。
【００６６】
図５の例で、ファイル２３０は蓄積装置２２６（対象蓄積装置）内の．ｔｘｔファイル（対象外タイプではない）であって、アプリケーション２２２はＭｉｃｒｏｓｏｆｔ  Ｖｉｓｕａｌ  Ｓｔｕｄｉｏ（登録商標）（対象外アプリケーションではない）である。したがって、ラッパーアプリケーションは書き込みコール２３６を傍受する（５０１）。次に、ラッパーアプリケーション２５０は、ファイル２３０の併合操作が進行中か否かをチェックする（５４４）。併合操作が進行中なら、併合操作が完了するまで書き込みコマンドプロセスを保留する（５４６）。併合操作が完了したら、保留になっていた書き込む操作を再開し、書き込みコール２３６に関する更新情報をデルタファイル２５８に保存することによって書き込みコマンドの内容をリダイレクトする（５４８）。併合操作が進行中でなければ、ラッパーアプリケーション２５０が書き込みコール２３６をリダイレクトし（５４８）、デルタファイル２５８に更新情報を保存する。デルタファイル２５８への書き込み中に併合イベントがトリガーされる場合は、書き込み操作が完了するまで併合イベントを保留する。
【００６７】
要約すると、様々な実施形態とその好適なバージョンをかなり詳しく説明してきたが、他のバージョンも可能である。したがって、添付の特許請求の範囲の精神および範囲は、ここに記載された好適なバージョンの説明に限定されない。
【図１Ａ】
2010511926.tif 000003
【図１Ｂ】
2010511926.tif 000004
【図２】
2010511926.tif 000005
【図３】
2010511926.tif 000006
【図４】
2010511926.tif 000007
【図５】
2010511926.tif 000008
【国際調査報告】
2010511926.tif 000009
2010511926.tif 000010
2010511926.tif 000011