(57)【要約】  レジストリキーまたは値などの要素は、その要素のための削除マーカーを生成することにより仮想的に削除される。物理的レジストリキー／値の２つ以上の別個の集合を、サイロにおいて動作するプロセスに対して、１つの併合（仮想）レジストリキーとして示す。オペレーティングシステムは、コンピューターまたはコンピューターシステムにおけるサイロ内のプロセスにより生成されたレジストリキーまたは値システム要求を監視し、削除マーカーに関連付けられた上記要素を除去することによりレジストリの併合ビューを提供する。特定の処理が、レジストリキーまたは値アクセス要求の種類を検出することにより呼び出され、そのレジストリキーまたは値アクセス要求の種類は、一覧、公開、生成、名前変更、または削除要求である。
2010509678.tif 000002
【特許請求の範囲】
【請求項１】
併合されたレジストリキーにおけるレジストリ要素の仮想削除を実行するシステムであって、前記システムは、
サイロ（２０２）において動作するプロセス（２１６、２１７）のためのレジストリキー（２０６、２０４）または値の複数のセットのサイロ固有併合ビュー（２１２）を提供するオペレーティングシステム（２１４）を備え、前記オペレーティングシステム（２１４）は、前記サイロ（２０２）において動作する前記プロセス（２１６、２１７）から発行されるレジストリキーまたは値アクセス要求（２４０）を監視することにより前記サイロ固有併合ビュー（２１２）を生成し、レジストリキーまたは値削除要求を検出すると、前記レジストリキーまたは値削除要求において識別される要素のための削除マーカーを生成するコールバック処理を実行し、前記削除マーカーが生成された前記要素は、前記レジストリキー（２０６，２０４）または値の複数のセットの前記サイロ固有併合ビュー（２１２）からフィルタリングされ、前記サイロ固有併合ビュー（２１２）は、前記サイロ（２０２）において動作する前記プロセス（２１６、２１７）に対し、前記レジストリキー（２０６，２０４）または値の複数のセットにおける入力値を含む１つのレジストリであるように見せることを特徴とするシステム。
【請求項２】
システムディレクトリの前記レジストリキーまたは値の複数のセットのそれぞれは、順位に関連付けられていることを特徴とする請求項１に記載のシステム。
【請求項３】
前記レジストリキーまたは値の複数のセットのそれぞれに関連付けられた前記順位は、判断材料として使用され、前記レジストリキーまたは値の複数のセットにおける２つ以上の入力値が特定の名前によって知られるときに、前記サイロ固有ビューに含まれる入力値を判断することを特徴とする請求項２に記載のシステム。
【請求項４】
前記サイロ固有併合ビューは、非公開位置および少なくとも１つの公開位置を備え、前記非公開位置の前記削除要求において識別された前記要素を仮想削除することにより、前記少なくとも１つの公開位置の同じ名前の要素を隠すことを特徴とする請求項３に記載のシステム。
【請求項５】
前記オペレーティングシステムは、レジストリキーまたは値アクセス要求処理のパスに挿入されたコールバックを介して仮想削除要求を検出するフィルタードライバを含み、前記レジストリキーまたは値アクセス要求処理は、削除処理、一覧処理、生成処理、公開処理、クエリ処理、または名前変更処理を含むことを特徴とする請求項１に記載のシステム。
【請求項６】
前記レジストリキーまたは値削除要求は、前記レジストリキーまたは値削除要求において識別される前記レジストリキーまたは値のための削除マーカーを生成することを特徴とする請求項５に記載のシステム。
【請求項７】
複数のレジストリキーまたは値を有する仮想併合キーのビューを有するレジストリキーまたは値の複数のセットのビューをサイロにおいて動作するプロセスに提供する方法であって、前記方法は、
オペレーティングシステムにおけるフィルタードライバを用いて前記サイロにおいて動作するプロセスにより生成されるアクセス要求を監視するステップ（５０２）であって、前記フィルタードライバは、併合仮想レジストリのキーまたは値の仮想削除を前記キーまたは値に関連付けられた削除マーカーの存在により検出する（５０８）ステップと、
前記削除マーカーを検出すると、レジストリキーまたは値アクセス要求の種類に関連付けられた処理を実行するステップであって、前記削除マーカーに関連付けられた要素は、前記レジストリキーまたは値の複数のセットの前記ビューからフィルタリングされる（５１０）ステップと
を含むことを特徴とする方法。
【請求項８】
前記削除要求において識別され、削除される前記キーまたは値の名前から派生した修飾された名前を有する新しいキーまたは値を生成することにより、前記削除マーカーを生成するステップをさらに含むことを特徴とする請求項７に記載の方法。
【請求項９】
外部データ記憶装置に前記削除マーカーを格納するステップをさらに含むことを特徴とする請求項７に記載の方法。
【請求項１０】
前記レジストリキーまたは値アクセス要求がレジストリキーを列挙する操作であると判断されるか、または値を列挙する操作であると判断されると、前記オペレーティングシステムは前記ビューを返し、前記ビューは、削除マーカーに関連付けられた入力値を除いた第１のレジストリキーまたは値の位置、および第２のレジストリキーまたは値の位置における入力値のリストを含むことを特徴とする請求項７に記載の方法。
【請求項１１】
前記レジストリキーまたは値アクセス要求がレジストリキーを列挙する操作であると判断されるか、または値を列挙する要求であると判断されると、前記オペレーティングシステムは前記ビューを返し、前記ビューは削除マーカー含む入力値を除いた第１のレジストリの位置、および第２のレジストリの位置における入力値のリストを含むことを特徴とする請求項７に記載の方法。
【請求項１２】
仮想削除されたことを示す名前にレジストリキーまたは値システム要素の名前を変更するレジストリキーまたは値アクセス要求は、禁止されることを特徴とする請求項７に記載の方法。
【請求項１３】
削除マーカーに関連付けられた要素を公開しようとするレジストリキーまたは値アクセス要求は、失敗することを特徴とする請求項７に記載の方法。
【請求項１４】
前記第１のレジストリキーの位置における入力値への前記プロセスのアクセスは、前記ビューを形成することにより読み取り専用アクセスに制限されることを特徴とする請求項７に記載の方法。
【請求項１５】
前記第２のレジストリキーの位置における入力値への前記プロセスためのアクセス権のセットにより、前記入力値の削除が許可されることを特徴とする請求項７に記載の方法。
【請求項１６】
プログラムコードを有するコンピューター読み取り可能な媒体であって、前記プログラムコードは、コンピューティング環境により実行されると、前記コンピューティング環境に、
オペレーティングシステムのフィルタードライバを使用して、サイロにおいて動作するプロセスを監視させ、前記フィルタードライバは前記サイロにおいて動作するプロセスにより生成されるレジストリアクセス要求を検出し（６０２）、
前記レジストリアクセス要求の検出に応答して、レジストリキーまたは値アクセス要求の種類に関連付けられた処理を実行させ（６０４）、物理的レジストリキーまたは値の複数のセットのビューは、前記プロセスに与えられ、前記ビューは、前記物理的キーまたは値の複数のセットの入力値を含む１つの併合仮想レジストリとして、前記物理的キーまたは値の複数のセットを前記プロセスに与え、削除マーカーに関連付けられた入力値は前記ビューから削除される（６０６）ことを特徴とするコンピューター読み取り可能な媒体。
【請求項１７】
前記コンピューター読み取り可能な媒体は、別のプログラムコードを有し、前記別のプログラムコードは、前記コンピューティング環境により実行されると、前記コンピューティング環境に、
削除アクセス要求により識別される要素のための削除マーカーを生成させ、前記削除マーカーは、前記削除要求において識別され、削除される前記要素の名前から派生した修飾されたキーまたは値の名前を含むことを特徴とする請求項１６に記載のコンピューター読み取り可能な媒体。
【請求項１８】
前記コンピューター読み取り可能な媒体は、別のプログラムコードを有し、前記別のプログラムコードは、前記コンピューティング環境により実行されると、前記コンピューティング環境に、
削除アクセス要求により識別される要素に削除マーカーを関連付けさせ、前記削除マーカーは外部データ記憶装置に格納されることを特徴とする請求項１６に記載のコンピューター読み取り可能な媒体。
【請求項１９】
前記コンピューター読み取り可能な媒体は、別のプログラムコードを有し、前記別のプログラムコードは、前記コンピューティング環境により実行されると、前記コンピューティング環境に、
削除アクセス要求により識別される要素に削除マーカーを関連付けさせ、前記削除マーカーは前記レジストリに格納されることを特徴とする請求項１６に記載のコンピューター読み取り可能な媒体。
【請求項２０】
前記コンピューター読み取り可能な媒体は、別のプログラムコードを有し、前記別のプログラムコードは、前記コンピューティング環境により実行されると、前記コンピューティング環境に、
一覧要求を受信するときに削除マーカーに関連付けられた要素を除去させることを特徴とする請求項１７に記載のコンピューター読み取り可能な媒体。
【請求項２１】
前記コンピューター読み取り可能な媒体は、別のプログラムコードを有し、前記別のプログラムコードは、前記コンピューティング環境により実行されると、前記コンピューティング環境に、
新しいレジストリの入力値のための名前を生成することを禁止させ、前記名前は削除マーカーを含むことを特徴とする請求項１７に記載のコンピューター読み取り可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、併合されたレジストリキーにおける仮想削除に関する。
【背景技術】
【０００２】
レジストリは、マイクロソフトＷＩＮＤＯＷＳ（登録商標）  ９ｘ、ＷＩＮＤＯＷＳ（登録商標）  ＣＥ、ＷＩＮＤＯＷＳ（登録商標）  ＮＴ、ＷＩＮＤＯＷＳ（登録商標）  ２０００、およびＷＩＮＤＯＷＳ（登録商標）  ＸＰを含むいくつかのオペレーティングシステムにおいて使用される中央階層型データベースである。レジストリは、１人以上のユーザー、１つ以上のアプリケーション、および１つ以上のハードウェア装置のためのシステムを設定するのに必要とされる情報を格納するために使用される。レジストリは、ＷＩＮＤＯＷＳ（登録商標）が実行中に継続的に参照する情報を格納しており、この情報としては、各ユーザーについてのプロファイル、コンピューターにインストールされたアプリケーション、各アプリケーションが生成する可能性のあるドキュメントの種類、フォルダおよびアプリケーションアイコンについてのプロパティシート設定、システムに存在するハードウェアの種類、並びに使用されるポートなどがある。場合によっては、２つ以上の物理的キーで構成される１つのレジストリキーの論理ビューを与えるのが望ましいこともある。
【０００３】
レジストリディレクトリの異なる部分に異なるアクセスレベルを認めることが、望ましい場合もある。例えば、アプリケーションＡは特定のレジストリキーを削除できるが、アプリケーションＢはそのレジストリキーを削除できない、またはアプリケーションＡは特定のキーにアプリケーションＡの値を加えることができるようにすることが望ましい場合もある。本発明の実施形態はこれらおよび他の要求に応えるものである。
【発明の概要】
【０００４】
別個の物理的レジストリキーの２つ以上のグループを、サイロと呼ばれる制御された実行環境において動作するアプリケーションに対して、単一の（仮想）レジストリとして示す。レジストリキー内のキーおよびキー値で通常は実行される全てのプロセスは、併合レジストリで実行され得るが、オペレーティングシステムは併合レジストリ内のキーへのアクセスレベルを制御する。オペレーティングシステムは、レジストリフィルタードライバまたは他のカーネルレベルのオペレーティングシステムコードによりレジストリの併合されたビューを提供する。このレジストリフィルターモデルにより、単一のコールバックに、そのコールバックが呼び出された理由を示す通知コードを示すことができる。コールバックハンドラは、様々な通知コードを扱うコードを有する大きなスイッチ文として実装することができる。特定の処理トリガとなる通知コードの種類の例としては、子キー（サブキー）の一覧、キー値の一覧、キーをクエリの対象にする（キーについて質問する）こと、値をクエリの対象にする（値について質問する）こと、キーの値を設定すること、キーのセキュリティを変更すること、キーをロードすること、キーを閉じること、キーを生成するまたは公開すること、キーを削除すること、値を削除すること、またはキーの名前を変更することがある。
【０００５】
以下のような状況において、レジストリキーまたは値を仮想的に削除する要求が必要となり、または望ましいだろう。
・レジストリキーまたは値を削除する要求をするユーザーが、そのキー／値に関連付けられたＡＣＬ（アクセス制御リスト）に基づいてそのキーまたは値を削除する許可を有する場合。
・非公開の併合キーの位置にアクセスマスクを介して削除の許可を有する場合。
・削除要求を受信した併合キーについて、削除の意味的（semantic）対応が可能な場合。
【０００６】
上記条件の全てが満たされると、削除マーカーが、仮想的に削除されるレジストリキーまたは値のための非公開位置に生成される。サイロ側から見ると、マークを付されたレジストリキーまたは値は削除される。したがって、ある種類のレジストリキー／値アクセスプロセスが要求されるときには、仮想的に削除するための特別な処理を必要とする場合がある。特別な仮想削除処理トリガとなる要求の種類の例としては、一覧要求、公開要求、生成要求、名前変更要求、キーを削除する要求、および値を削除する要求がある。
【図面の簡単な説明】
【０００７】
【図１】本発明の形態を実施することができる例示的なコンピューティング環境を示すブロック図である。
【図２】本発明のある実施形態によるレジストリキーまたは値を併合するシステムのブロック図である。
【図３】本発明のある実施形態によるレジストリキーまたは値を併合する方法のフロー図である。
【図４】本発明のある実施形態による図３の方法の一部のフロー図である。
【図５】本発明のある実施形態による公開／生成要求のための仮想削除処理のフロー図である。
【図６】本発明のある実施形態による一覧要求のための仮想削除処理のフロー図である。
【図７】本発明のある実施形態による削除要求のための仮想削除処理のフロー図である。
【図８】本発明のある実施形態によるクエリのための仮想削除処理のフロー図である。
【発明を実施するための形態】
【０００８】
概説
２つ以上の物理的キーで構成される、１つのレジストリキーの論理ビューを示すことが望ましい場合がある。例えば、現在のレジストリキーと新しい空のキーとを併合することが望ましい場合がある。あるプロセスにより生成される新しいレジストリキーおよび値は、初期は空のキーの状態になる場合でも、既存のレジストリからの全ての状態をそのプロセスは認識することができる。これにより、このプロセスは「非公開」部分の変更を別のキーに記憶し、レジストリの共有された「公開」部分を変更しないようにすることができる。しかしながら、通常は、現在周知のオペレーティングシステムは、レジストリキーの同一のビューを全てのプロセスに提供している。
【０００９】
したがって、多くのシステムでは、そのシステムに限られた制限される点が、オペレーティングシステムのプロセスレベル、およびオペレーティングシステム自体のマシン境界部に存在するが、これらレベル間においては、アクセス制御リスト（ＡＣＬ）などのセキュリティ制御手段と、アプリケーションを実行するユーザーの身元に関連付けられた特権とを用いてレジストリキーまたは値にアクセスするプロセスが制御される。システム資源へのアクセスは、アプリケーション自体ではなく、アプリケーションを実行するユーザーの識別情報に関連付けられているので、アプリケーションは、上記の例において示されるように、アプリケーションが必要としないレジストリキーまたは値へのアクセスすることができる。複数のアプリケーションは同じキーまたは値を変更することができるので、アプリケーション間の不整合が生じかねない。また、あるアプリケーションが別のアプリケーションのプロセスに故意に、または偶然に干渉する可能性があるため、セキュリティ問題が生ずるかもしれない。
【００１０】
本明細書でサイロと呼ばれる所定のオペレーティングシステム内でシステムを分離／格納（containment）する機構により、オペレーティングシステムの１つのインスタンスを用いて１つのコンピューターで動作するプロセスがグループ化され、分離される。オペレーティングシステムの１つのインスタンスは、システムのための処理空間を複数の隣り合っている実行環境（サイロ）および／または入れ子にされた実行環境（サイロ）に分割し、その実行環境（サイロ）により、いくつかのレジストリキーを制御して共有し、および他のキーへのアクセスを制限することができる。オペレーティングシステムは、サイロ毎にレジストリの異なるビューを生成することによりレジストリキーの共有およびアクセスを制御する。ビューは、寄与キー（contributing key）の２つ以上のセットの結合である単一のディレクトリであるサイロにおいて動作するプロセスとして示される。つまり、アプリケーションに利用可能なキーはアプリケーションが動作するサイロに依存し、サイロにおいて動作するアプリケーションが「見る」レジストリは、２つ以上のキーのセットを見た目上併合することにより生成される。したがって、コンピューターまたはコンピューターシステムで使用する１つのＯＳイメージはレジストリの異なるビューを提供し、１つのプロセス、プロセスのグループ、１つのアプリケーション、またはアプリケーションのグループがいずれのキーを使用することができるのか、およびアプリケーションがキーを読み取ることができるか、または読み取りおよび書き込みできるのかを制御する。したがって、キーへのアクセスおよびキーへのアクセスの程度は、１つのプロセス、１つのアプリケーション、プロセスのグループ、またはアプリケーションのグループが配置されているサイロに直接関連付けられ、または基づいており、ユーザー特権のみによっては決定されない。
【００１１】
レジストリのための併合機能は、レジストリフィルタードライバまたは他のカーネルレベルのオペレーティングシステムコードを介して実装してもよい。このレジストリフィルターモデルにより、いくつかの実施形態において、単一のコールバックに、そのコールバックが呼び出された理由を示す通知コードを示すことができる。したがって、いくつかの実施形態におけるコールバックハンドラは、様々な通知コードを扱うコードを有する大きなスイッチ文である。特定の処理を受信する通知コードとしては、レジストリキーの一覧、レジストリキー値の一覧、レジストリキーに関係する情報をクエリの対象にする（レジストリキーに関係する情報を質問する）こと、値をクエリの対象にすること、キーの値を設定すること、キーのセキュリティを変更すること、キーをロードすること、キーを閉じること、キーを生成すること、キーの名前を変更すること、およびキーを削除することもしくはキー値を削除することがある。キーを生成する通知コードは、呼び出し側がレジストリキーを生成または公開したいときに受信する。ドライバは、アクセスされたキーの名前を調べ、特定の処理が要求されるかどうかを判断する。要求を発行するプロセスがサイロに存在しない場合、特定の処理は要求されない。要求を発行するプロセスがサイロに存在する場合、要求を発行するサイロのための併合キーのメタデータを検索する。アクセスされたキーの名前が併合キー内に存在する場合、特定の処理を実行する。キーが非公開位置に存在する（サイロ固有レジストリキーである）場合、要求を転送するときに非公開位置を使用する。キーが非公開位置に存在しない場合、そのキーについて公開位置を調査する。キーが公開位置に存在する（グローバルレジストリキーである）場合、要求を転送するときに公開位置を使用する。キーが公開位置または非公開位置に存在しない場合、情報を返し、エラーを返す（すなわち、存在していないキーの公開に失敗したことを示すエラーを返す）か、またはキーを生成する。アクセスされたキーの名前が併合キー内に存在しない場合、特定の処理は実行されない。特定の処理が実行された場合、メタデータがキーに関連付けられる。
【００１２】
キーを生成する操作の間に、メタデータが要求に関連付けられ、キーを公開する要求が成功した場合、メタデータはキーに関連付けられる。キーが閉じられると、そのキーに関連付けられた全てのメタデータは削除される。クライアントアプリケーションが、公開したキーについてのサブキー値を列挙しようとする場合、特定のハンドラが呼び出される。キーに関連付けられた全てのメタデータを検索する。メタデータが見つかり、メタデータが、キーが併合キーであることを示す場合、それぞれの寄与キーに存在するキーのリストの内容を、呼び出し側に返す。
【００１３】
いくつかの実施形態におけるキーをクエリの対象にするレジストリＡＰＩは、インデックスを検討し、その結果を返すように実装される。所定のインデックスについては、寄与キーの内容を考慮し、そのインデックスのために何を返すべきであるかを判断して返す。列挙操作の間の各寄与ディレクトリにおける現在の位置を追跡し、適切な次の値を毎回返す。つまり、１つの寄与キーからの全ての結果を返す。それに続くキーについての結果は、同じキーの名前がまだ列挙されていない場合に返す。呼び出し側が現在のインデックスよりも下位のインデックスを見る場合、内部にキャッシュしたインデックスのキーの名前をリセットし、処理を再開する。キーにおけるサブキーまたはキーにおける値を列挙する場合もある。サブキーまたは値は、要求された場合、呼び出し側に返す。キーの名前を要求する要求を受信すると、レジストリにおけるキーの物理的名前では無くサイロに関連した名前を返す。したがって、キー情報を検索する要求を受信すると、その情報を検索し、呼び出し側が期待する情報に一致するように要求された情報を更新する。例えば、キーの名前を要求するとする。キーの名前を検索し、呼び出し側に返す名前を、呼び出し側がキーを公開するのに使用した名前に合うように更新する（寄与キーの内容の全てが同一の併合キーに存在するという錯覚は維持されている）。キーの名前を変更する場合、新しい名前または新しい位置はアプリケーションに公開された「併合」ディレクトリビューに基づいて認証される。したがって、ユーザーがキーを新しい位置に移動したい場合、新しい位置は名前空間のサイロビューに基づいて更新される。
【００１４】
２つ以上の物理的レジストリキーが１つの論理ビューを介して公開される場合、あるキーまたは値を削除することにより、他の寄与セットのキーの１つにある削除されたキー／値と同じ名前を有するキーまたは値を、公開または公表することができる。一般的に併合キーの場合では、寄与セットのキーは順位付けされている。衝突が生じる（すなわち、同じ名前を有する値が２つ以上の寄与キーに存在する）と、順位付け手段がどちらの値を公開するかを判断する。しかしながら、最も高く順位付けされたキーが削除された場合、他の（次に高く順位付けされた）寄与キー内の同じ名前を有する値が、外からの干渉がなければ公開される。キーの公開は要求されない場合もある。したがって、寄与キーに存在した同じ名前を有するキーまたは値を「記憶していること」こと、および同じ名前のより高く順位付けされたキーが削除されたときに上記値の公開を防止する必要性がある。
【００１５】
例えば、同一のキーが併合レジストリの公開部分と非公開部分とに現れるとする。通常は、併合キーが公開されると、レジストリディレクトリの非公開部分のディレクトリ位置または部分は書き込み可能であるが、公開部分は読み取り専用である。両方の部分が論理キーのビューに用いられる。新しいキーおよび値並びに（例えば、コピーオンライトを介して）変更された可能性がある値は非公開部分に書かれる。したがって、非公開キーに生成された値は、１つ以上の公開キーにおいて同じ名前を有する値を隠すであろう。しかし、非公開キーにおける値が削除される場合、公開の値の１つは公開、または公表されるかもしれない。非公開レジストリキー値に以前アクセスしたアプリケーションにとっては、非公開の値が削除されたようには見えない。このアプリケーションが、以前隠されていたが新しく公開されたレジストリの値に今後アクセスすると、この新しく公開されたレジストリの値は、アプリケーションの認識に限れば、前と同じ値であるが、予め隠されていたレジストリキーの内容は異なることとなる。さらに、レジストリ値を削除する試みは失敗するであろう。なぜなら、今公開されている値は読み取り専用の場所にあるからである。これは問題である。
【００１６】
上記問題を解決するために、本発明の一実施形態によれば、マーカーを非公開キーに加え、マークを付されたレジストリキーまたは値は、「削除された」とみなされることを示し、従って併合キーの論理ビューを介してもはや見ることはできないことを示している。したがって、本発明の一実施形態において、削除マーカーのための記憶装置が設けられ、削除マーカーは、レジストリキーまたは値のアクセス操作の間に生成され、引き継がれる。削除マーカーを格納するためには、削除情報のためのある種の永続的な記憶装置が必要となる。したがって、削除データは、削除されたレジストリキーもしくは値、位置もしくは補助位置（sub-location）の名前と、レジストリキーもしくは値、位置もしくは補助位置が削除された位置とを示していてもよい。これらの目的は、削除されたレジストリキーまたは値を識別する特定のレジストリキーまたは値を格納すること、削除されたレジストリキーまたは値についてのリパースポイントを格納すること、外部（別の）記憶装置にデータを格納することにより実現してもよい。
【００１７】
いくつかのＷＩＮＤＯＷＳ（登録商標）オペレーティングシステムでは、レジストリにおいて、トランザクションが用いられるが、これは、多数のレジストリ操作が１つのグループとして同時に実行し得ることを意味している。全ての操作が完了すると、変更は認められるか、または拒絶されるかのいずれかとなる。したがって、全ての変更が現れるか、または変更が全く現れないかである。したがって、本発明のいくつかの実施形態において、削除マーカーがトランザクションの一部として生成される場合、削除マーカーはトランザクションが終了しその結果が確定するまで現れず、トランザクションが失敗に終わると、削除マーカーは消える。
【００１８】
削除マーカーの生成は、レジストリキーまたは値が併合キーから削除されるときに要求される。削除マーカーの引き継ぎは、レジストリキーまたは値を公開する要求を、併合場所から予め削除されたレジストリキーまたは値について受信するとき、レジストリキーまたは値を列挙する要求を、併合場所から予め削除されたレジストリキーまたは値について受信するとき、およびレジストリキーまたは値を生成する要求を、併合場所から予め削除されたレジストリキーまたは値について受信するときなどに要求される。
【００１９】
本発明のいくつかの実施形態において、レジストリキーまたは値が削除されると、同じ名前を有するレジストリキーまたは値は、併合キーの非公開部分とは異なる寄与場所から再び公開されることはない。この場合、寄与（公開）場所内にある同じ名前を有するレジストリキーまたは値が後に出現するとしても、そのレジストリキーまたは値は併合キーで見ることはできない。本発明のいくつかの実施形態において、マーカーは、削除されるレジストリキーまたは値と同じ名前を有するレジストリキーまたは値が併合キーの公開部分に存在する場合に限り作成される。この場合、上記のようにしないと、非公開レジストリキーまたは値を削除することにより、同じ名前の公開レジストリキーまたは値は、公開されるか、または公表されるようになる。同じ名前のレジストリキーまたは値が後に出現する場合、そのレジストリキーまたは値は併合キーで見ることができる。
【００２０】
例示的なコンピューティング環境
図１および以下の説明は、本発明を実施する適切なコンピューティング環境の簡単な概要を提示することを目的としている。しかしながら、全ての種類の携帯型のコンピューティング装置、ポータブルコンピューティング装置、および他のコンピューティング装置が、本発明に関連して使用するための装置に含まれる。汎用コンピューターを以下に説明するが、これは単なる１つの例であり、本発明は、ネットワークサーバー相互作用機能および対話機能を有するシンクライアント機能しか必要としない。したがって、本発明は、非常に少しのまたは最小限のクライアント資源を実装した、ネットワーク接続ホストされたサービスの環境（例えば、クライアント装置が、単にワールドワイドウェブへのブラウザまたはインターフェースとして機能するネットワーク接続された環境）において実施してもよい。
【００２１】
必ずしも必要とされないが、本発明は、開発者が使用するアプリケーションプログラミングインターフェース（ＡＰＩ）を介して実施される場合もあり、および／またはクライアントワークステーション、サーバー、または他の装置などの１つ以上のコンピューターにより実行されるプログラムモジュールなどのコンピューター実行可能な命令の通常の形態で説明されるネットワーク閲覧ソフトウェア内に含まれる場合もある。通常、プログラムモジュールは、特定のタスクを実行し、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、およびデータ構造などを含む。一般的には、プログラムモジュールの機能は、様々な実施形態において説明されるように、組み合わされていても、または分散されていてもよい。さらに、当業者は、本発明を他のコンピューターシステム構造で実行してもよいことを理解するであろう。本発明の使用に適している他の周知のコンピューティングシステム、環境、および／または構造は、パーソナルコンピューター（ＰＣ）、現金自動預け払い機（ＡＴＭ）、サーバーコンピューター、携帯型の装置またはラップトップ装置、マルチプロセッサーシステム、マイクロプロセッサーに基づいたシステム、プログラム可能な家電機器、ネットワークＰＣ、ミニコンピューター、およびメインフレームコンピューターなどを含むが、これらに限定されない。本発明を、タスクが通信ネットワークまたは他のデータ送信媒体を介して接続されたリモート処理装置により実行される、分散コンピューティング環境において実行してもよい。分散コンピューティング環境では、プログラムモジュールを、例えばメモリー記憶装置を含むローカルコンピューター記憶媒体およびリモートコンピューター記憶媒体に設けてもよい。
【００２２】
図１は、本発明を実施することができる適切なコンピューティングシステム環境１００の例を示しているが、上記において明らかなように、コンピューティングシステム環境１００は適切なコンピューティング環境の単なる１つの例であり、本発明の使用の範囲または機能を限定することを目的とするものではない。コンピューティング環境１００は、例示されたオペレーティング環境１００において示した任意の要素の１つのまたは組み合わせに関する依存または必要であると解釈すべきではない。
【００２３】
図１を参照すると、本発明を実施する例示的なシステムは、コンピューター１１０の形態の汎用コンピューティング装置を備える。コンピューター１１０の要素は、処理装置１２０、システムメモリー１３０、およびシステムバス１２１を備えてもよいが、これに限定されず、上記システムバス１２１は、様々なシステム要素を処理装置１２０に結合し、例えばシステムメモリーを処理装置１２０に結合する。システムバス１２１は、任意の何種類かのバス構造であってもよく、例えば任意の様々なバスアーキテクチャを使用するメモリーバスまたはメモリーコントローラ、周辺バス、およびローカルバスである。例として、上記アーキテクチャは、業界標準アーキテクチャ（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ビデオエレクトロニクススタンダーズアソシエーション（ＶＥＳＡ）ローカルバス、および（メザニンバスとして知られている）ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バスであるが、これらに限定されない。
【００２４】
一般に、コンピューター１１０は様々なコンピューター読み取り可能な媒体を備える。コンピューター読み取り可能な媒体には、コンピューター１１０によりアクセスされ得る任意の利用可能な媒体であってもよく、揮発性媒体および不揮発性媒体、取り外し可能媒体および固定媒体が含まれる。例として、コンピューター読み取り可能な媒体は、コンピューター記憶媒体および通信媒体を含むことができるが、これらに限定されない。コンピューター記憶媒体は、コンピューター読み取り可能な命令、データ構造、プログラムモジュール、または他のデータなどの情報を格納するために任意の方法または技術で実装される揮発性および不揮発性の、取り外し可能および固定媒体を含む。コンピューター記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、コンパクトフラッシュ（登録商標）メモリーもしくは他のメモリー技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）もしくは他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶装置、または所望の情報を格納するのに使用でき、かつコンピューター１１０によってアクセスすることができる任意の他の媒体が含まれるが、これらに限定されない。一般に、通信媒体は、コンピューター読み取り可能な命令、データ構造、プログラムモジュール、または他のデータを、搬送波または他の転送機構などの変調データ信号として現したものであり、また任意の情報配信媒体を含む。「変調データ信号」は、信号内の情報を符号化するように設定または変更された１つ以上の特性を有する信号を意味している。例として、通信媒体には、有線ネットワークまたは直接有線接続などの有線媒体、ならびに音響、ＲＦ、赤外線、および、他の無線媒体などの無線媒体が含まれるが、これらに限定されない。上記したものの任意の組み合わせも、コンピューター読み取り可能な媒体の範囲内に含まれる。
【００２５】
システムメモリー１３０は、リードオンリーメモリー（ＲＯＭ）１３１およびランダムアクセスメモリー（ＲＡＭ）１３２などの揮発性メモリーおよび／または不揮発性メモリーの形態のコンピューター記憶媒体を含む。一般的には、起動の間などにおいてコンピューター１１０内の要素間で情報を転送することを支援する基本ルーチンを含む基本入力／出力システム１３３（ＢＩＯＳ）はＲＯＭ  １３１に格納されている。一般的には、ＲＡＭ  １３２は、処理装置１２０に即座にアクセス可能な、および／または処理装置１２０により現在処理中のデータおよび／またはプログラムモジュールを格納する。例として、図１は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示しているが、これらに限定されない。
【００２６】
コンピューター１１０は、他の取り外し可能／固定、揮発性／不揮発性のコンピューター記憶媒体を備えることができる。例として、図１は、固定不揮発性磁気媒体から読み取り、または固定不揮発性磁気媒体に書き込むハードディスクドライブ１４１と、取り外し可能な不揮発性磁気ディスク１５２から読み取り、または取り外し可能な不揮発性ディスク１５２に書き込む磁気ディスクドライブ１５１と、ＣＤ−ＲＯＭまたは他の光媒体などの取り外し可能な不揮発性光ディスク１５６から読み取り、または取り外し可能な不揮発性光ディスク１５６に書き込む光ディスクドライブ１５５とを示している。例示的なオペレーティング環境において使用することができる他の取り外し可能／固定、揮発性／不揮発性のコンピューター記憶媒体は、磁気テープカセット、フラッシュメモリーカード、デジタル多用途ディスク（ＤＶＤ）、デジタルビデオテープ、ソリッドステートＲＡＭ、およびソリッドステートＲＯＭなどを含むが、これらに限定されない。一般的には、ハードディスクドライブ１４１は、インターフェース１４０などの固定メモリーインターフェースを通じてシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は、インターフェース１５０などの取り外し可能なメモリーインターフェースを通じてシステムバス１２１に接続される。
【００２７】
図１を参照して上述したドライブおよび付随するコンピューター記憶媒体は、コンピューター１１０のためのコンピューター読み取り可能な命令、データ構造、プログラムモジュール、および他のデータの記憶装置である。図１では、例えばハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を格納するとして示している。これら要素は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同じであっても異なっていてもよい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７は、少なくともこれらが別のものであることを示すために、異なる符号を付されている。ユーザーは、キーボード１６２およびマウス、トラックボール、またはタッチパッドと一般的に呼ばれるポインティング装置１６１などの入力装置を通じてコンピューター１１０に命令および情報を入力してもよい。他の入力装置（図示せず）としては、マイク、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、またはスキャナなどがある。上記および他の入力装置は、多くの場合システムバス１２１に繋げられるユーザー入力インターフェース１６０を通じて処理装置１２０に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などの他のインターフェースおよびバス構造により接続することもできる。
【００２８】
モニター１９１または他の種類の表示装置が、ビデオインターフェース１９０などのインターフェースを介してシステムバス１２１に接続される。ノースブリッジなどのグラフィックインターフェース１８２をシステムバス１２１に接続してもよい。ノースブリッジは、ＣＰＵまたはホスト処理装置１２０と通信し、アクセラレーテッドグラフィクスポート（ＡＧＰ）通信のための機能を担うチップセットである。１つ以上のグラフィック処理装置（ＧＰＵ）１８４がグラフィックインターフェース１８２と通信してもよい。これについては、ＧＰＵ１８４は、レジスタ記憶装置などのオンチップメモリー記憶装置を含み、ＧＰＵ１８４はビデオメモリー１８６と通信する。しかしながら、ＧＰＵ１８４は、コプロセッサーの単なる１つの例であり、様々な処理装置がコンピューター１１０に含まれてもよい。モニター１９１または他の種類の表示装置は、ビデオインターフェース１９０などのインターフェースを介してシステムバス１２１に接続され、ビデオメモリー１８６と通信してもよい。モニター１９１に加えて、コンピューターは、スピーカー１９７およびプリンター１９６などの別の周辺出力装置を備えてもよく、そのスピーカー１９７およびプリンター１９６は、出力周辺インターフェース１９５を通じて接続してもよい。
【００２９】
コンピューター１１０は、ネットワーク接続された環境において、リモートコンピューター１８０などの１つ以上のリモートコンピューターへの論理的接続手段を用いて動作してもよい。リモートコンピューター１８０は、パーソナルコンピューター、サーバー、ルータ、ネットワークＰＣ、ピア装置、または他の共通ネットワークノードであってもよく、一般的には、コンピューター１１０に関係する上述の要素の多くまたはすべてを含むが、メモリー記憶装置１８１だけが図１に例示されている。図１に示す論理的接続手段はローカルエリアネットワーク（ＬＡＮ）１７１およびワイドエリアネットワーク（ＷＡＮ）１７３を含むが、別のネットワークをさらに含んでいてもよい。このようなネットワーキング環境は、オフィス、企業規模のコンピューターネットワーク、イントラネット、およびインターネットにおいて通常のものである。
【００３０】
ＬＡＮネットワーキング環境において使用する場合、コンピューター１１０は、ネットワークインターフェースまたはアダプター１７０を通じてＬＡＮ１７１に接続される。ＷＡＮネットワーキング環境において使用する場合、コンピューター１１０は、一般に、インターネットなどのＷＡＮ１７３への通信を確立するモデム１７２または他の手段を備える。モデム１７２は、内蔵または外付けとすることができ、ユーザー入力インターフェース１６０または他の適切な機構を介してシステムバス１２１に接続してもよい。ネットワーク接続された環境において、コンピューター１１０またはコンピューター１１０の一部に関係して示したプログラムモジュールは、リモートメモリー記憶装置に格納していてもよい。例として、図１は、メモリー装置１８１に存在するとしてリモートアプリケーションプログラム１８５を示しているが、これだけに限定されない。図示したネットワーク接続手段は例示的なものであり、コンピューター間の通信リンクを確立する他の手段を使用してもよい。
【００３１】
当業者は、コンピューター１１０または他のクライアント装置をコンピューターネットワークの一部として設けることができることを理解することであろう。これいついては、本発明は、任意の数のメモリーまたは記憶装置を有し、任意の数の記憶装置またはボリュームにおいて生ずる任意の数のアプリケーションおよびプロセスを有する任意のコンピューターシステムに関係する。本発明は、リモートまたはローカル記憶装置を含むネットワーク環境に設けられたサーバーコンピューターおよびクライアントコンピューターを有する環境に適用することができる。本発明は、プログラミング言語機能、解釈（interpretation）機能、および実行機能を有する標準的なコンピューティング装置に適用することもできる。
【００３２】
併合されたレジストリキーまたは値における仮想削除
オペレーティングシステムは、サイロにおいて動作するプロセスにより生成されるレジストリアクセス要求（例えば、ＷＩＮＤＯＷＳ（登録商標）レジストリ）を監視する。複数のサイロが、コンピューターまたはコンピューターシステムに同時に存在してもよい。複数のプロセスを各サイロ内において実行してもよい。１つのオペレーティングシステムイメージは、サイロを生成し、全てのサイロ内の全てのプロセスを生成および監視する。レジストリキーのサイロ固有ビューは、オペレーティングシステムにしたがって、２つ以上の物理的外部記憶装置（レジストリキー）を１つのキーであるようにサイロに対し見た目上併合することにより生成される。つまり、２つ以上の別個のレジストリキーを、１つのキーとしてサイロ（およびサイロ内で動作するプロセス）に対し公開することができる。１つ以上の物理的外部記憶装置を、１つ以上のサイロのためのサイロ固有ビューの一部を構築するのに使用してもよい。
【００３３】
図２は、上述したような併合されたレジストリにおけるレジストリキーまたは値の仮想削除のためのシステム２００の一実施形態を示している。システム２００は、図１について上述したコンピューター１１０などの１つ以上のコンピューターに存在していてもよい。図２において、１つ以上の実行環境がコンピューター１１０で動作することができる。予定されるある種類の実行環境は、（上記でより詳しく説明した）サイロという実行環境である。図２において、サイロ２０２およびサイロ２２０を示す。サイロは入れ子にすることができる。つまり、サイロ２０２はサイロ（図示せず）を含んでいてもよい。サイロは任意の所望のレベルで入れ子にすることができる。別のサイロ内に入れ子にされたサイロは、しばしば子サイロと呼ばれ、サイロを入れ子にするサイロは、しばしば親サイロと呼ばれる。親サイロは、子サイロが利用できる資源（レジストリキーまたは値を含む）の使用程度を制御してもよい。
【００３４】
サイロは、分離された実行環境を形成するのに使用し、あるサイロに関連付けられた資源はそのサイロ内で動作するプロセスは利用できるが、コンピューターシステムまたはコンピューターネットワークにおけるコンピューターまたは他のコンピューターで動作する他のサイロにアクセスすることはできないとすることもできる。例えば、サイロ２０２が分離された実行環境であった場合、サイロ２０２において動作するプロセス２１６に利用可能な資源（図示せず）は、第２のサイロ、サイロ２２０において動作するプロセス２２６などのプロセスに利用することはできない。しかしながら、サイロ２０２において動作する第２のプロセス（例えば、プロセス２１７）は上記資源にアクセスできる。同様に、プロセス２２６および２２７に利用可能な資源は、サイロ２０２において動作するプロセス２１６および２１７に利用することはできない。
【００３５】
あるいは、本発明の我々の実施形態によれば、サイロは所定量分離され、または制御された実行環境を形成するのに使用してもよく、その実行環境では、いくつかの資源を共有しおよび残りの資源は共有しないか、または資源のいくつかの部分は共有しおよび資源の残りの部分は共有しない。ここで考える資源の１つはレジストリである。例えば、サイロ２０２において、プロセス２１６および２１７などの１つ以上のプロセスが動作し、レジストリにアクセスできてもよい。本発明のいくつかの実施形態では、レジストリはキーの仮想併合ディレクトリ２１２であり、仮想併合レジストリ２１２は、１つの物理的ディレクトリとしてプロセス２１６および２１７に見えるが、実際には、ある環境の元で、ある種類の操作のための特定の処理を実行するコールバックを用いて、オペレーティングシステムにより生成されたレジストリキーの２つ以上のセットの結合の仮想的なビューである。オペレーティングシステム２１４により生成されるビューは、仮想併合レジストリを生成するために、互いに併合されたレジストリの公開キーおよび非公開または（所定のサイロのためだけに）ローカルなキーの結合を含んでいてもよい。本発明のいくつかの実施形態では、複製キーは、複製キーが存在する場合に使用される非公開キー値とともに消える（collapse）。例えば、公開レジストリにおけるキーの１つは、＼ｒｅｇｉｓｔｒｙ＼ｍａｃｈｉｎｅ＼ｓｏｆｔｗａｒｅである。キーは、例えばアプリケーションがマシンの全体の状態を書き込むことができる場所であってもよい。サイロにおいて動作するアプリケーションがそのアプリケーションの状態を＼ｒｅｇｉｓｔｒｙ＼ｍａｃｈｉｎｅ＼ｓｏｆｔｗａｒｅをコピーしたもの（すなわち、＼ｒｅｇｉｓｔｒｙ＼ｍａｃｈｉｎｅ＼ｓｉｌｏ００００ｓｏｆｔｗａｒｅ）に書き込むことができるが、サイロは＼ｒｅｇｉｓｔｒｙ＼ｍａｃｈｉｎｅ＼ｓｏｆｔｗａｒｅの公開バージョンにおける状態を共有できることが望ましい。このように、サイロは、外部システムにおいてなされた変更を見ることができるが、それ自身を変更すること、または新しいキーを書き込むこともできる。その新しいキーは、非公開位置にだけ存在し、サイロの外部のシステムには影響を与えない。したがって、レジストリキー＼ｒｅｇｉｓｔｒｙ＼ｍａｃｈｉｎｅ＼ｓｏｆｔｗａｒｅおよび＼ｒｅｇｉｓｔｒｙ＼ｍａｃｈｉｎｅ＼ｓｉｌｏ００００ｓｏｆｔｗａｒｅは併合される。サイロは＼ｒｅｇｉｓｔｒｙ＼ｍａｃｈｉｎｅ＼ｓｏｆｔｗａｒｅと呼ばれるキーを見るが、そのキーの内容は、物理的な＼ｒｅｇｉｓｔｒｙ＼ｍａｃｈｉｎｅ＼ｓｏｆｔｗａｒｅおよび＼ｒｅｇｉｓｔｒｙ＼ｍａｃｈｉｎｅ＼ｓｉｌｏ００００ｓｏｆｔｗａｒｅを組み合わせたものである。したがって、本発明のいくつかの実施形態において、オペレーティングシステムにより生成された併合レジストリは、グローバルキーの値を含むが、キーの非公開、非共有部分は、特定のサイロに（例えば、サイロ２０２に）関連付けられ、例えばそのサイロにおいて動作するアプリケーションのためのローカルまたは非公開キーを示すこともできる。例えば、図２において、サイロ２０２に関連付けられた仮想併合キー２１２は、グロ���バルキー２０４の値から派生した共有可能な部分２０４ａとローカルキー（例えば、サイロ２０２に関連付けられた非公開、非共有キー２０６）の値から派生した共有不可能な（非公開）部分２０６ａとを有する。サイロ２２０に関連付けられた仮想併合レジストリ２３２は、グローバルキー２０４の値から派生した共有可能な部分２０４ａと、ローカルキー（例えば、サイロ２２０に関連付けられた非公開、非共有キー２０３）の値から派生した共有不可能な部分２３６ａとを含む。本発明のいくつかの実施形態では、キー２１２の共有可能な部分２０４ａは、読み取り専用であり、一方、キー２１２の非公開、非共有部分２０６ａは読み書き可能であるが、本発明はこれだけに限定されない。つまり、仮想併合レジストリキーの非公開部分は、読み取り専用もしくは読み書き可能であってもよく、または読み取り専用もしくは読み書き可能である部分を含んでいてもよい。同様に、仮想併合レジストリキーの共有可能な部分は、読み取り専用もしくは読み書き可能であってもよく、または読み取り専用もしくは読み書き可能である部分を含んでいてもよい。さらに、本発明は２つの値またはキーの２つのセットを併合することに限定されない。任意の数のキー（ｎ個のキー）が仮想併合レジストリを生成するために併合することもできる。本発明のいくつかの実施形態における仮想併合レジストリは、永続的な記憶装置に残存せず、またはメモリーにそれ自体生成されないが、以下においてより詳しく説明するように、レジストリキーアクセス要求を監視し、およびアクセス要求の種類に関連付けられた特定の処理を実行することにより、要求に従ってオペレーティングシステム２１４により動的に導出される。
【００３６】
したがって、２つ以上のサイロが、コンピューターまたはコンピューターシステムに同時に存在していてもよく、レジストリの２つ以上のビューが同時に存在してもよい。つまり、サイロと仮想併合レジストリとの間に１対１対応が存在するが、任意の数のサイロおよび併合ビューが、特定のコンピューターまたはコンピューターシステムにどの時点において存在していてもよい。さらに、仮想併合レジストリにおける各キーの一部は、共有可能な部分を含んでいてもよく、共有可能な部分は、コンピューターシステムにおける全てのサイロについて同じであっても同じでなくてもよく、物理的補助レジストリ２０４と同じであっても同じでなくてもよい。本発明のいくつかの実施形態では、システムにおける全てのサイロ内で動作する全てのアプリケーションまたはプロセスは、サイロの併合レジストリの１つの共有可能な部分を共有し、サイロの併合レジストリは、サイロが動作している特定のコンピューターに存在していてもしていなくてもよい。さらに、併合レジストリの共有可能な部分または共有不可能な部分を「記憶」する物理的ディレクトリが、取り外し可能なディスク、ＣＤ−ＲＯＭ、ＵＳＢキーなどの取り外し可能な媒体に存在してもよい。同様に、物理的補助レジストリはリモートシステムに存在していてもよい。併合レジストリおよびその外部記憶装置のキーの非公開部分または共有不可能な部分についても同じである。
【００３７】
本発明のいくつかの実施形態では、レジストリの併合ビュー（例えば併合されたキー２１２および２３２）を生成するオペレーティングシステム２１４における機構は、フィルタードライバであり、フィルタードライバは、コールバックを登録することにより操作のコードパスにフィルタードライバを挿入することができる。本発明のいくつかの実施形態では、登録されたコールバックは、ＲｅｇＮｔＰｒｅＣｒｅａｔｅＫｅｙＥｘ（Ｅｘ）、ＲｅｇＮｔＰｏｓｔＣｒｅａｔｅＫｅｙＥｘ（Ｅｘ）、ＲｅｇＮｔＰｒｅＱｕｅｒｙＫｅｙ、ＲｅｇＮｔＰｒｅＥｎｕｍｅｒａｔｅＫｅｙ、ＲｅｇＮｔＰｒｅＥｎｕｍｅｒａｔｅＶａｌｕｅＫｅｙ、ＲｅｇＮｔＰｒｅＲｅｎａｍｅＫｅｙ、およびＲｅｇＮｔＰｒｅＫｅｙＨａｎｄｌｅＣｌｏｓｅを含むが、他のコールバックを登録していてもよい。本発明のいくつかの実施形態において、（例えば、コールバックを介して）特定の処理を実行する操作は、レジストリキーについての列挙操作、公開操作、生成操作、名前変更操作、および閉鎖操作である。例えば、列挙操作は、ＲｅｇＮｔＰｒｅＥｎｕｍｅｒａｔｅＫｅｙおよびＲｅｇＮｔＰｒｅＥｎｕｍｅｒａｔｅＶａｌｕｅＫｅｙコールバックに、公開および生成操作は、ＲｅｇＮｔＰｒｅＣｒｅａｔｅＫｅｙＥｘ（Ｅｘ）、ＲｅｇＮｔＰｏｓｔＣｒｅａｔｅＫｅｙＥｘ（Ｅｘ）コールバックに、閉鎖操作は、ＲｅｇＮｔＰｒｅＫｅｙＨａｎｄｌｅＣｌｏｓｅコールバックに、名前変更操作は、ＲｅｇＮｔＰｒｅＲｅｎａｍｅＫｅｙコールバックにそれぞれ関連付けられてもよい。いくつかの実施形態において、レジストリキーアクセス要求がプロセスから送信されると、オペレーティングシステムはコールバックを介して要求を監視し、操作が特定の処理が起きるべき操作の１つである場合、特定の処理を実行する。例えば、図２において、オペレーティングシステム２１４は、サイロ２０２におけるプロセス２１６によりなされた要求２４０などのレジストリキーアクセス要求を監視し、非公開キー２０６（サイロ２０２に関連付けられたキー）および公開キー２０４から仮想併合レジストリ２１２を生成するために特定の処理を実行してもよい。非公開キー２０６から派生する仮想併合レジストリ２１２におけるキーの一部は、（仮想）非公開キー２０６ａにより示され、公開キー２０４から派生する仮想併合レジストリ２１２の一部は、（仮想）公開キー２０４ａにより示される。
【００３８】
各寄与（外部記憶装置）キーは順位に関連付けられてもよい（例えば、図２では、非公開（外部記憶装置）キー２０６は順位２１０に関連付けられ、公開（外部記憶装置）キー２０４は順位２０８に関連付けられている）。いくつかの実施形態における順位は、必要であれば、判断材料（tie breaker）として使用される。例えば、キーアクセス（例えば、公開、一覧など）が要求され、指定された値が同じ名前でキーの２つのセットに存在する場合、どちらの値を要求側に公開するかを判断するのに、寄与セットの順位を使用することができる。つまり、最も大きな値を有するキーのセット内のキー値が、要求側に公開される（例えば、キーの書き込み可能な部分として公開される）。同様に、与えられた名前がある寄与ディレクトリ内のキーであり、同じ名前がキーの別の寄与セット内のサブディレクトリにある場合、最も大きな順位を有するセット内の入力値が、いくつかの実施形態において、要求側に公開される。
【００３９】
例えば、いくつかの実施形態において、列挙されるレジストリキーは、キーの全ての寄与セット内の全てのキーの結合である。同じ名前が２つ以上の寄与セットに存在する場合、どちらのセットの値が公開されるべきであるかを判断するのに、各寄与セットの順位を使用する。キーを生成するときに、キーが任意の寄与セットのいずれにもまだ存在していない場合、キーは最も大きな順位を有するセットに生成される。キーの名前を変更するとき、キーの各寄与セットは、新しい名前がまだ使用されていないかを判断するためにクエリの対象となり、新しい名前が使用されていなければ、キーは新しい名前に変更される。
【００４０】
レジストリキーまたは値を仮想削除することが必要となるか、または望まれると、本発明のいくつかの実施形態では、（併合キーの非公開部分に存在する）レジストリキーまたは値は実際に削除されるのではなく、削除マーカーによりマークを付される。サイロ側から見ると、マークを付されたレジストリキーまたは値は削除される。
【００４１】
上述した要求に答えるために、削除マーカーは、併合キー環境において削除要求を受信したレジストリキーまたは値に関連付けられる。併合キーが公開される場合、一般的には、書き込み可能である併合キーの非公開部分、および読み取り専用である公開部分（１つ以上の公開部分からなる）が存在すると考えられる。非公開位置および公開位置またはディレクトリが論理的併合キーに寄与する。新しいレジストリキーまたは値および（コピーオンライト操作を介して）変更された可能性があるレジストリキーまたは値は、一般に、併合キーの非公開部分に入る。併合キーの公開部分におけるレジストリキーまたは値は、一般に、見ることができるが、変更することはできない。寄与公開位置またはディレクトリにおける１つのレジストリキーもしくは値または複数のレジストリキーもしくは値と同じ名前を有する非公開位置に生成されたレジストリキーまたは値は、一般に、公開レジストリキーまたは値を見えないようにするか、または隠す。なぜなら、非公開レジストリキーまたは値は同じような名前の公開レジストリキーまたは値よりも重要であるからである。しかし、最も高い順位の非公開レジストリキーまたは値が削除されると、公開レジストリキーまたは値の１つは、公表または公開される可能性がある。なぜなら、その時点において、新しい公開レジストリキーまたは値は、同じ名前の最も大きな順位のレジストリキーまたは値であるからである。非公開レジストリキーまたは値に予めアクセスしたアプリケーションにとっては、非公開レジストリキーまたは値は、削除されたようには見えないであろう。非公開レジストリキーまたは値に以前アクセスしたアプリケーションは、以前隠されていたが、新しく公開されたレジストリキーまたは値に新しくアクセスしてもよく、アプリケーションの認識する限りでは、新しく公開されたレジストリキーまたは値は、同じレジストリキーまたは値であるが、予め隠されていたレジストリキーまたは値の内容は異なっているであろう。さらに、レジストリキーまたは値を削除する更なる試みは失敗する。なぜなら、今公開されているレジストリキーまたは値は読み取り専用の位置にあるからである。これは問題である。これらの問題を解決するために、マーカーが非公開位置に付され、マークを付されたレジストリキーまたは値は「削除された」とみなすべきであることを示し、併合キーの論理ビューを介してもはや見ることができないことを示している。したがって、本発明の実施形態では、削除マーカーのための記憶装置が設けられ、削除マーカーは、レジストリキーまたは値アクセス操作の間に生成され、および引き継がれる。削除マーカーを格納する場合には、削除情報のためのある種の永続的な記憶装置が必要となる。削除マーカーを格納する多数の形態が考えられる。ある形態では、削除されたレジストリキーまたは値の名前が修飾され、削除されたことを示す。例えば、レジストリの値「ＡＢＣ」が削除された場合、名前「＄＄ｄｅｌｅｔｅｄ＄＄：ＡＢＣ」を有する新しい値が非公開位置のレジストリディレクトリに書かれてもよい。つまり、削除マーカーは、削除されたキーまたは値の名前から派生した修飾された名前を有する新しいキーまたは値を生成することにより生成されてもよく、レジストリの非公開部分に書かれてもよい。適切な修飾子またはメッセージの存在により、レジストリキーまたは値が仮想的に削除されたことが示される。任意の種類の修飾子またはメッセージが仮想的に削除したことを示してもよく、説明した修飾子は１つの可能な修飾子の単なる例である。別の形態では、削除マーカーがリパースポイントとして格納される。別の形態では、削除マーカーは外部データベースに格納される。例えば、レジストリキーまたは値の名前などの削除マーカー、修飾された名前、またはリパースポイントは、レジストリキーまたは値システムにおける別の場所（おそらく、「削除されたレジストリキーまたは値」と呼ばれるレジストリキーもしくは値、位置、または補助位置）に格納され得るか、または削除マーカーはレジストリキーまたは値システムではない別の場所に格納され得る。この場合、仮想的に削除されたレジストリキーまたは値を示す修飾された名前を格納する代わりに、削除されたレジストリキーまたは値の名前が格納されるようにしてもよく、その場合、所定のレジストリキーまたは値が仮想的に削除されたかどうかを判断する調査操作が必要とされる。したがって、削除データは、削除されたレジストリキーまたは値の名前およびレジストリキーまたは値が削除された場所を示してもよい。これらのことは、削除されたレジストリキーまたは値を識別する削除マーカーを格納すること、削除されたレジストリキーまたは値についてのリパースポイントなどの別のレジストリキーまたは値マーカーを格納すること、または外部（別の）記憶装置に削除データを格納することにより実現してもよい。削除はトランザクション内において起こってもよいので、使用される任意の装置はトランザクションを認識すべきである。データを外部記憶装置に格納する場合には、外部記憶装置がトランザクションに参加できることが必要であり、これは、外部記憶装置が、いつトランザクションが終了したかを知り、終了したときに結果を反映することを意味している。同様に、トランザクションが失敗に終わった場合、外部記憶装置は変更を所定の水準に戻す（すなわち、元に戻す）。外部記憶装置は動作が既に起こされたトランザクション内のビューを提供しなければならないが、トランザクションの外では、動作がまだ起こされていないように見える。
【００４２】
削除マーカーの生成は、レジストリキーまたは値が併合キーから削除されるときに要求される。削除マーカーの引き継ぎは、レジストリキーまたは値を公開する要求を、併合場所から予め削除されたレジストリキーまたは値について受信するとき、レジストリキーまたは値を列挙する要求を、併合場所から予め削除されたレジストリキーまたは値について受信するとき、およびレジストリキーまたは値を生成する要求を、併合場所から予め削除されたレジストリキーまたは値について受信するときなどに要求される。
【００４３】
本発明のいくつかの実施形態において、レジストリキーまたは値が削除されると、同じ名前を有するレジストリキーまたは値は、併合キーの非公開部分とは異なる寄与場所から再び公開されることはない。この場合、寄与（公開）場所内にある同じ名前を有するレジストリキーまたは値が後に出現するとしても、そのレジストリキーまたは値は併合キーで見ることはできない。本発明のいくつかの実施形態において、マーカーは、削除されるレジストリキーまたは値と同じ名前を有するレジストリキーまたは値が併合キーの公開部分に存在する場合に限り作成される。この場合、上記のようにしないと、非公開レジストリキーまたは値を削除することにより、同じ名前の公開レジストリキーまたは値は、公開されるか、または公表されるようになる。同じ名前のレジストリキーまたは値が後に出現する場合、レジストリキーまたは値は併合キーにおいて見ることができる。
【００４４】
本発明のいくつかの実施形態において、オペレーティングシステムのフィルタードライバは様々なレジストリキーまたは値へのアクセス操作をフックし、上述した併合キー操作と協働して、仮想的に削除されたレジストリキーまたは値についての正しい動作（semantics）を行う。例えば、一覧などの操作について、削除マーカーは隠され、仮想的に削除された任意のレジストリキーまたは値が隠される。つまり、削除マーカーは除去されるので、削除マーカーは、一覧要求を受信するときに返されない。同様に、削除マーカーが存在するレジストリキーまたは値は、一覧要求があっても返されない。生成または公開などの操作については、呼び出し側では、削除マーカーまたは仮想的に削除されたレジストリキーもしくは値を公開することができない。併合キー環境においては、公開または生成操作要求を受信し、レジストリキーまたは値を公開するように試みるかどうかを判断するときに、所定の論理が併合キーの非公開または公開部分に提供される。公開要求において指定されているレジストリキーまたは値が公開部分に存在する場合、調査を実行し、そのレジストリキーまたは値の削除マーカーが非公開位置に存在するかどうかを判断する。存在する場合、公開操作は失敗する（例えば、「オブジェクト名が見つからない状態（status object name not found）」を戻す）。削除マーカーを有するレジストリキーまたは値は公開されることを認められない。名前変更操作については、レジストリキーまたは値の名前を削除マーカーの形式の名前に変更することは許可されない。削除操作については、削除マーカーが、併合キーの非公開部分におけるレジストリキーまたは値のために生成される。本発明のいくつかの実施形態における削除マーカーは、修飾された場合のレジストリキーまたは値の名前を有する新しいレジストリキーまたは値を生成することにより生成される。修飾された場合のキーまたは値の名前は、基礎として削除されるべき元々のキーまたは名前を使用し、接頭辞もしくは接尾辞またはその両方を追加し、修飾されたキーまたは値の名前を生成する。修飾されたレジストリキーまたは値の存在により、キーまたは値が仮想的に削除されたことが示される。伝統的に、キーが削除され得る前に、キーは空でなければならない。キーを仮想削除する場合、本発明のいくつかの実施形態では、キーのための削除マーカーが生成され、入れ子にされた削除マーカーが削除され、適切な場合、通常の削除処理が実行される（例えば、削除はキーが非公開位置から公開された場合になされてもよい）。キーはクエリの対象にされてもよい。クエリの結果は、サブキーおよび値の数などの情報を含んでいてもよい。いくつかの実施形態において、クエリ操作はサブキー／値の総数並びに最大のサブキーの長さおよび最大の値の名前の長さフィールドを更新するためにフィルタリングされる。
【００４５】
図３は、本発明の実施形態によるキーを併合する方法のフロー図である。ステップ３０２において、オペレーティングシステム（例えば、図２のＯＳ  ２１４）は、レジストリキーアクセス要求（サイロ２０２において動作するプロセス２１６により生成されるアクセス要求２４０など）を監視する。キーアクセス要求がオペレーティングシステムにより（例えば、コールバックを介して）検出される（ステップ３０４）と、オペレーティングシステム２１４は生成されたアクセス要求の種類を判断し（ステップ３０６、ステップ３１４、ステップ３２２、ステップ３２６、ステップ３３０、およびステップ３３４）、以下においてより詳しく説明するように、適切な処理を実行する。
【００４６】
例えば、ステップ３０６において、オペレーティングシステムは、キーアクセス要求がキーを公開または生成する操作であると判断することができる（ステップ３０６）。図４は、その後に起きる処理（ステップ３０８）のフロー図である。公開または生成要求が、併合レジストリが存在するボリュームに送信されると、生成コールバック（例えば、ＲｅｇＮｔＰｒｅＣｒｅａｔｅＫｅｙＥｘ（Ｅｘ））が呼び出され、オペレーティングシステムのフィルタードライバが要求を調査し、特定の処理が要求されるかどうかを判断することができる。公開または生成操作が呼び出されると、絶対パス名、または現在の公開キーに関係するパス名が提供される。相対公開操作が使用されると、名前解析が、相対ハンドル（relative handle）により参照されるレジストリノードにおいて始まる。絶対公開操作の場合、オペレーティングシステムのＩＯマネージャーは名前を解析し、オブジェクトマネージャーは、デバイスオブジェクトに導く名前の部分を決め、名前の決められていない残りの部分（まだ決められていない部分）を、デバイスオブジェクトへのポインタと共にＩ／Ｏマネージャーに戻す。特定の処理は、参照されるキーの部分がグローバル部分ではなくサイロビューである（ステップ４０２）ときに必要とされる。本明細書で使用されるように、「サイロビューを用いて」操作を実行することは、キーの名前が、レジストリの標準的な物理的ビューではなくサイロの仮想併合レジストリのコンテクスト内で解釈されることを意味している。
【００４７】
ステップ４０２において、公開操作が（相対公開操作ではなく）絶対公開操作であり、呼び出し側がサイロに存在する場合、処理はステップ４０４に進む。本発明のいくつかの実施形態において、オペレーティングシステムは、アクセス要求におけるいくつかのフィールドを見ることにより、キーを公開または生成する操作が、相対または絶対公開／生成操作であるかどうかを判断する。アクセス要求がキーの名前だけを含み、要求を発行するスレッドがサイロにおいて動作するプロセスに属していない場合、上記要求は絶対公開操作と考えられる。要求に格納された情報は、キーに関連付けられたメタデータを検索するのに使用することができる（ステップ４０８）。
【００４８】
したがって、ステップ４０４において、アクセスされたキーの名前を、サイロのコンテクスト内で調査する。新しいキーオブジェクトは、要求内で参照されるキーがサイロ内で元々公開されていたときは必ずサイロビューを用いて生成される。キーオブジェクトの全てのアクセス要求はフィルタリングされるので、２つ以上の補助オブジェクトに、サイロビューを提供するためにアクセスしてもよい。キーは、絶対公開ではなく相対公開が使用されるときは必ずサイロビューを用いて公開される。本発明のいくつかの実施形態において、現在公開されているキーを示す要求内のフィールドが空値ではない場合、要求は相対要求であると考えられる。ステップ４０２において、呼び出し側がサイロに存在しないか、または元々のキーがサイロにおいて公開されていない場合、処理は通常のように進められる（ステップ４０６）。要求が絶対名を使用する（つまり、キーの名前がパス名を用いて明確に参照され、要求の公開キーが空値である）場合、オペレーティングシステムは、要求を発行するプロセス（呼び出し側）がサイロに存在するかどうかを判断する。本発明のいくつかの実施形態において、オペレーティングシステムは、アクセス要求を発行するスレッドがサイロに存在するかどうかを判断することにより、呼び出し側がサイロに存在するかどうかを判断する。あるいは、いくつかの実施形態において、オペレーティングシステムは、サイロ識別子によりタグを付すことができるアクセス要求がサイロ内の呼び出し側から発行されたかどうかを調査することにより、呼び出し側がサイロに存在するかどうかを判断してもよい。呼び出し側がサイロに存在する場合、キーはサイロビューを用いて公開され、非公開部分の値を返す。
【００４９】
したがって、要求内で参照されるキーがサイロにおいて元々公開されていない場合、または要求が絶対公開操作であり、呼び出し側がサイロに存在していない場合、処理はステップ４０６に進む。ステップ４０４において、操作がサイロビューを用いて処理されるべきである場合、要求内のキーの名前を、サイロのコンテクスト内で調査し、解釈する。本発明のいくつかの実施形態において、サイロは、基礎となるマシンと同じ階層を有するレジストリのビューを与えられる（つまり、サイロのビューは、基礎構造または「システムサイロ」と同一の階層を有するように見える）。例えば、＼ｒｅｇｉｓｔｒｙ＼ｍａｃｈｉｎｅ＼ｓｏｆｔｗａｒｅが基礎構造に存在する場合、＼ｒｅｇｉｓｔｒｙ＼ｍａｃｈｉｎｅ＼ｓｏｆｔｗａｒｅがサイロ内で公開される。これは、この階層を要求するアプリケーションが階層を見つけるようになされてもよい。しかしながら、階層を裏付けるキーは、サイロ内の＼ｒｅｇｉｓｔｒｙ＼ｍａｃｈｉｎｅ＼ｓｏｆｔｗａｒｅが、実際には、＼ｒｅｇｉｓｔｒｙ＼ｍａｃｈｉｎｅ＼ｓｏｆｔｗａｒと＼ｒｅｇｉｓｔｒｙ＼ｍａｃｈｉｎｅ＼ｓｉｌｏ０００ｓｏｆｔｗａｒ（サイロ固有レジストリ）とを物理的に併合したものであるように変更してもよい。標準的なエラー処理がなされる。つまり、例えば公開操作において、アクセス要求内の名前により識別されるキーを検索するが、全ての対象とするキーにおいて見つからない場合、エラーメッセージを返す。サブキーが適切なキーにおいて見つかる場合、公開キーを呼び出し側に返す。メタデータは、公開キーを呼び出し側に返す前に、公開または生成を成功させるために公開キーに関連付けられてもよい。キーが見つからない場合、キーを生成するか、またはエラーメッセージを返す。ステップ４０８において、サイロのための併合レジストリキーメタデータを検索する。要求された名前が併合レジストリにおいて見つからない場合、処理は通常のように進む（ステップ４０６）。例えば、エラーメッセージを返してもよく、これはキーが見つからないことを伝える。ステップ４１０において、要求された名前が併合レジストリビューにおいて見つかる場合、所定の情報を返し、名前を付けられたキーを生成、または公開するべきかどうかを判断することができる（ステップ４１２）。いくつかのオペレーティングシステムにおいて、「生成操作」はキーを公開および生成する場合の両方に使用され得る。要求された操作が、ステップ４１６において、「キーを公開する」操作である（すなわち、要求が現在のキーへのアクセスを試みている）場合、オペレーティングシステムは、キーが併合レジストリの非公開部分（共有されていない部分）に存在するかどうかをまず判断することにより非公開寄与キーを調べる。ステップ４１６において、オペレーティングシステムにより、キーが仮想併合レジストリの非公開部分に存在しないと判断される場合、併合レジストリの公開部分を調査する。キーが併合レジストリの公開部分に存在しない場合、エラーメッセージを返す。キーが併合レジストリにおいて見つかる場合、公開キーを返す。ステップ４１２において、キーが生成されるべきであると判断される（すなわち、要求がキーを生成する要求である）場合、ステップ４１４において、オペレーティングシステムは公開部分を調べ、キーが併合レジストリの公開部分にまだ存在していないことを確認する。キーが併合レジストリの公開部分に既に存在する場合、エラーが生じる（ステップ４１８）。キーが併合レジストリの公開部分にまだ存在しない場合、キーを併合レジストリの非公開部分に生成し、メタデータをキーに関連付け、生成されたキーをメタデータと共に呼び出し側に返す（ステップ４２０）。
【００５０】
本発明のいくつかの実施形態において、メタデータは、ＲｅｇＮｔＰｒｅＰｏｓｔＣｒｅａｔｅの間に公開キーに関連付けられる。
【００５１】
再び図３を参照すると、いくつかの異なる種類の一覧要求が存在する。オペレーティングシステムが子キーについての一覧要求を検出すると、キーのリストを返す。ステップ３１４において、オペレーティングシステムが、キーを列挙する操作を検出すると、まず、オペレーティングシステムはキーに関連付けられたメタデータが存在するかを判断する（ステップ３１６）。本発明のいくつかの実施形態において、オペレーティングシステムは、レジストリがメタデータからの併合ビューであるかどうかを判断する（ステップ３１８）。いずれの場合であっても、レジストリが併合ビューである場合（ステップ３１８）、互いに併合された両方のキーの結果を返す（ステップ３２０）。レジストリが併合ビューでない場合、通常の処理を実行する。操作がキー値についての要求である場合（ステップ３２６）、キー値を返す（ステップ３２８）。キーについてのグローバル値および非公開値を併合する。
【００５２】
操作がクエリ操作（名前またはキーについての他の情報のための要求など）である場合（ステップ３２２）、キーの物理的な名前をステップ３２４において検索し、名前を更新し、必要に応じて、要求側の固有の名前を反映する。いくつかの例では、キーの名前についての要求を受信する場合、またはキーについての他の情報のための要求を受信する場合、キーのグローバル名ではなくサイロに関連した名前を返す。
【００５３】
直近の操作がキーの名前を変更する操作である場合（ステップ３３０）、オペレーティングシステムにより、サイロに関連した名前である新しい名前（キーが変えられようとしている名前）は、下方レジストリが新しい名前を見る前にグローバル名に変換し、レジストリが適切にキーの名前を変更するようにしなければならない。ステップ３３４において、操作が、閉鎖する操作であると判断される場合、ＲｅｇＮｔＰｒｅＫｅｙＨａｎｄｌｅＣｌｏｓｅコールバックが呼び出される。ステップ３３６において、閉じられるキーに関連付けられたメタデータを削除する。上記で挙げた行為の１つ以上は、行われなくてもよく、またはスキップされてもよく、上記の行為は図３に示した順番とは異なる順番で進められてもよい。
【００５４】
図５は、仮想削除操作を引き継いでいる生成／公開操作のいくつかの実施形態を示している。ステップ５０２では、レジストリキーまたは値についての生成／公開要求を受信する。ステップ５０４において、上述したように、通常のサイロ併合キー処理を実行する。ステップ５０６において、公開されているレジストリキーまたは値が公開寄与場所内に存在するかどうかを判断する。ステップ５０８において、公開されているレジストリキーまたは値が併合キーの公開部分に存在している場合、対象としているレジストリキーまたは値のための削除マーカーが存在するかどうかを判断し、存在する場合、ステップ５１０において、公開要求は失敗する。ステップ５０８において、対象としているレジストリキーまたは値のための削除マーカーが存在しないと判断される場合、通常のサイロ併合キー処理を実行する（ステップ５１２）。ステップ５０６において、公開されているレジストリキーもしくは値、位置、または補助位置が公開寄与位置に存在しない場合、処理はステップ５１２に進む。削除マーカーは、上述したように任意の適切な形態で実装することができる。
【００５５】
図６は、仮想削除操作を引き継いでいるレジストリキー列挙操作のいくつかの実施形態を示している。ステップ６０２において、レジストリキーもしくは値、位置、または補助位置についての一覧要求を受信する。ステップ６０４において、上述したように通常のサイロ併合キー処理を実行する。ステップ６０６において、削除マーカーを非公開位置（併合キーの非公開部分）から除去する。ステップ６０８において、非公開位置に対応する削除マーカーを有する公開位置の入力値を除去する。ステップ６１０において、通常のサイロ併合キー処理を実行する。本発明のいくつかの実施形態において、削除マーカーが存在するレジストリキーまたは値を除去する。結果を表示するか、または返す。
【００５６】
図７は仮想削除操作のいくつかの実施形態を示している。ステップ７０２において、レジストリキーまたは値についての削除要求を受信する。ステップ７０４において、仮想削除動作が併合キーについて不可能である場合、通常の処理はステップ７０６に進む。一方、仮想削除動作が併合キーについて可能である場合、処理はステップ７０８に進み、削除されるレジストリキーまたは値のために削除マーカーを生成する。ステップ７１０において、削除要求を受信するレジストリキーまたは値が非公開位置に存在する場合、レジストリキーまたは値を「削除する」（ステップ７０６）。ステップ７１０において、削除が要求されるレジストリキーまたは値が公開位置に存在する場合、処理はステップ７１２に進む。ステップ７１２において、削除要求に関連付けられたアクセス許可により、削除要求が可能である場合、レジストリキーまたは値を「削除する」（ステップ７０６）。ステップ７１２において、削除要求に関連付けられたアクセス許可により、削除が不可能である場合、レジストリキーまたは値は削除されない（ステップ７１４）。
【００５７】
図８は、キーをクエリの対象にする操作のいくつかの実施形態を示している。ステップ８０２において、レジストリキーについてのクエリ要求を受信する。ステップ８０４において、通常のサイロクエリキー処理を実行する。ステップ８０６において、存在する任意の削除マーカーに基づいてサブキー／値の総数を更新する。ステップ８０８において、通常のサイロ併合キー処理を実行する。
【００５８】
本明細書で説明している様々な技術は、ハードウェアまたはソフトウェアと共に実装されてもよく、または、適切な場合、ハードウェアおよびソフトウェアを組み合わせたものと共に実装される。したがって、本発明の方法および装置、または方法および装置のある形態または所定の部分は、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、ハードドライブ、または任意の他のマシン読み取り可能な記録媒体などの有形（タンジブルな）媒体に含まれるプログラムコード（すなわち、命令）の形態であってもよい。プログラムコードが、コンピューターなどのマシンにロードされて、マシンにより実行されると、マシンは本発明を実施する装置となる。プログラム可能なコンピューターにおいてプログラムコードを実行する場合、一般的にコンピューティング装置は、プロセッサー、プロセッサーにより読み取り可能な記録媒体（揮発性および不揮発性のメモリーおよび／または記憶素子を含む）、少なくとも１つの入力装置、および少なくとも１つの出力装置を含む。例えば、データ処理ＡＰＩなどの使用により本発明のドメイン固有プログラミングモデル形態を生成および／または実装するために利用する１つ以上のプログラムは、好ましくは高水準の手続き型言語またはオブジェクト指向プログラミング言語で実装され、コンピューターシステムと通信する。しかしながら、プログラムは、必要に応じて、アセンブリ言語またはマシン語で実装され得る。いずれにせよ、言語はコンパイル言語またはインタープリタ型言語に変換される言語であってもよく、ハードウェア装置と組み合わされてもよい。
【００５９】
本発明を、様々な図面の好ましい実施形態と共に説明してきたが、本発明から離れること無く本発明の同一の機能を実行するために、他の類似する実施形態が使用されてもよく、または変更および追加が、説明した実施形態になされてもよい。したがって、本発明は任意の一実施形態に限定されるべきではなく、むしろ特許請求の範囲における広さおよび範囲で考えられるべきである。
【図１】
2010509678.tif 000003
【図２】
2010509678.tif 000004
【図３】
2010509678.tif 000005
【図４】
2010509678.tif 000006
【図５】
2010509678.tif 000007
【図６】
2010509678.tif 000008
【図７】
2010509678.tif 000009
【図８】
2010509678.tif 000010
【国際調査報告】
2010509678.tif 000011
2010509678.tif 000012