(57)【要約】      （修正有）【課題】  各アプリケーションプログラムに関連付けられているアプリケーションＩＤを介したオペレーティングシステムによるアプリケーションプログラムのインストール、実行、および削除を管理すること。【解決手段】  本発明の方法は、アプリケーションＩＤを各アプリケーションプログラムに割り当て、他のアプリケーションと区別する。また、リソースＩＤを各アプリケーションプログラムに関連付けられている各リソースに割り当てる。オペレーティングシステムは、異なるアプリケーションプログラムを識別出来、またその関連するリソースを識別可能にする。この方法により例えば、アプリケーションによる変更は保持されログに記憶されるため、元に戻すことも可能になる。【選択図】  図１
2005129063.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングシステム上の複数のアプリケーションを管理するコンピュータ実施方法であって、
アプリケーションＩＤをアプリケーションプログラムに割り当て、前記割り当てられたアプリケーションＩＤは前記アプリケーションプログラムを他のアプリケーションプログラムと区別するステップと、
リソースＩＤを前記アプリケーションプログラムに関連付けられているリソースに割り当てるステップと、
前記割り当てられたアプリケーションＩＤおよび前記割り当てられたリソースＩＤを関連付けるステップと
を含むことを特徴とするコンピュータ実施方法。
【請求項２】
前記リソースＩＤを前記リソースに割り当てるステップは、前記アプリケーションＩＤをオペレーティングシステムオブジェクトに割り当てるステップを含むことを特徴とする請求項１に記載のコンピュータ実施方法。
【請求項３】
前記割り当てられたアプリケーションＩＤ、前記アプリケーションプログラムに関連付けられているマニフェスト、および前記オペレーティングシステムオブジェクトを記載する追加のメタデータのうちの１つまたは複数に基づいて前記オペレーティングシステムオブジェクトを前記アプリケーションプログラムに割り当てるステップをさらに含むことを特徴とする請求項２に記載のコンピュータ実施方法。
【請求項４】
前記リソースＩＤを前記リソースに割り当てるステップは、前記割り当てられたアプリケーションＩＤ、前記アプリケーションプログラムに関連付けられているマニフェスト、前記リソースの評価、および前記リソースのハッシュのうちの１つまたは複数に基づいて前記リソースＩＤを前記アプリケーションプログラムに割り当てるステップを含むことを特徴とする請求項１に記載のコンピュータ実施方法。
【請求項５】
関連付けられている別のアプリケーションＩＤを有する少なくとも１つの他のアプリケーションプログラムに関連付けられている、前記アプリケーションプログラムの分離ＩＤを決定するステップをさらに含むことを特徴とする請求項１に記載のコンピュータ実施方法。
【請求項６】
前記アプリケーションプログラムを前記割り当てられたアプリケーションＩＤから別のアプリケーションプログラムに関連付けられている別のアプリケーションＩＤに移行する旨の要求を受信するステップと、
前記受信した要求に応答して、前記他のアプリケーションＩＤを前記アプリケーションプログラムに割り当てるステップと
をさらに含むことを特徴とする請求項１に記載のコンピュータ実施方法。
【請求項７】
前記アプリケーションＩＤを前記アプリケーションプログラムに割り当てるステップは、前記アプリケーションプログラムについて、アプリケーションベンダ、アプリケーション名、アプリケーションバージョン、およびチェックサムのうちの１つまたは複数を決定するステップ
を含むことを特徴とする請求項１に記載のコンピュータ実施方法。
【請求項８】
前記リソースＩＤを前記リソースに割り当てるステップは、前記アプリケーションプログラムの実行中に前記リソースが作成されたとき、前記リソースＩＤを前記リソースに割り当てるステップを含むことを特徴とする請求項１に記載のコンピュータ実施方法。
【請求項９】
前記アプリケーションプログラムを構文解析して前記アプリケーションプログラムに関連付けられる署名を生成するステップをさらに含み、前記アプリケーションＩＤを前記アプリケーションプログラムに割り当てるステップは、前記生成された署名に基づいて前記アプリケーションプログラムの事前に割り当てられたアプリケーションＩＤを識別するステップを含むことを特徴とする請求項１に記載のコンピュータ実施方法。
【請求項１０】
前記アプリケーションプログラムからオペレーティングシステムリソースの要求を受信するステップと、
前記受信した要求に応答して、前記割り当てられたアプリケーションＩＤに基づいて前記アプリケーションプログラムのための前記オペレーティングシステムリソースの特定のバージョンが存在するかどうかを決定するステップと、
前記決定ステップに応答して、前記アプリケーションプログラムのための前記特定のバージョンが存在している場合、前記アプリケーションプログラムに前記特定のバージョンを提供するステップと、
そうでない場合、前記決定ステップに応答して、前記特定のバージョンを生成し、前記生成された特定のバージョンを前記アプリケーションプログラムに提供するステップと
をさらに含むことを特徴とする請求項１に記載のコンピュータ実施方法。
【請求項１１】
オペレーティングシステムがそれに関連付けられているリソースをアプリケーションプログラムによる変更から保護できるようにするコンピュータ実施方法であって、
アプリケーションＩＤをアプリケーションプログラムに割り当てるステップと、
前記アプリケーションプログラムからオペレーティングシステムリソースの要求を受信するステップと、
前記受信した要求に応答して、前記アプリケーションＩＤに基づいて前記アプリケーションプログラムのための前記オペレーティングシステムリソースの特定のバージョンが存在するかどうかを決定するステップと、
前記決定ステップに応答して、前記アプリケーションプログラムのための前記特定のバージョンが存在している場合、前記アプリケーションプログラムに前記特定のバージョンを提供するステップと、
そうでない場合、前記決定ステップに応答して、前記特定のバージョンを生成し、前記生成された特定のバージョンを前記アプリケーションプログラムに提供するステップと
を含むことを特徴とするコンピュータ実施方法。
【請求項１２】
前記要求を前記アプリケーションプログラムから受信するステップは、ファイル、フォルダ、オブジェクト、およびオペレーティングシステムプロパティ値のうちの１つまたは複数の前記要求を受信するステップを含むことを特徴とする請求項１１に記載のコンピュータ実施方法。
【請求項１３】
前記アプリケーションＩＤを前記アプリケーションプログラムに割り当てるステップは、前記アプリケーションプログラムに割り当てられているマニフェスト、前記アプリケーションプログラムに関連付けられている複数のファイルの評価、前記アプリケーションプログラムのハッシュ、および前記アプリケーションプログラムに関連付けられているインストールプログラムに対応するインストーラＩＤのうちの１つまたは複数に基づいて、前記アプリケーションＩＤを前記アプリケーションプログラムに割り当てるステップを含むことを特徴とする請求項１または１１に記載のコンピュータ実施方法。
【請求項１４】
前記アプリケーションＩＤを前記アプリケーションプログラムに割り当てるステップは、前記マニフェスト、前記評価、前記ハッシュ、および前記インストーラＩＤのうちの１つまたは複数からメタデータを抽出するステップをさらに含むことを特徴とする請求項１３に記載のコンピュータ実施方法。
【請求項１５】
請求項１から１４のいずれかに記載した前記コンピュータ実施方法を実行するコンピュータ実行可能構成要素を有することを特徴とする１つまたは複数のコンピュータ可読媒体。
【請求項１６】
請求項１から１４のいずれかに記載した前記コンピュータ実施方法を実行することを特徴とするシステム。
【請求項１７】
ソフトウェア製品に関連付けられているＩＤコンテキストを表すデータ構造を格納しているコンピュータ可読媒体であって、前記データ構造は、
前記ソフトウェア製品を識別する値を格納するアプリケーションＩＤフィールドと、
ソフトウェア製品が属する前記ソフトウェア製品のグループに関連付けられている値を格納する分離ＩＤフィールドと
を含むことを特徴とするコンピュータ可読媒体。
【請求項１８】
前記ソフトウェア製品および前記ソフトウェア製品のグループは共通リソースを共有することを特徴とする請求項１７に記載のコンピュータ可読媒体。
【請求項１９】
前記ソフトウェア製品を識別する値を格納する、前記ソフトウェア製品によって作成されたリソースに関連付けられるべきリソースＩＤフィールドをさらに含むことを特徴とする請求項１７に記載のコンピュータ可読媒体。
【請求項２０】
前記アプリケーションＩＤフィールドに格納されている前記値、および前記リソースＩＤフィールドに格納されている前記値は同じであることを特徴とする請求項１９に記載のコンピュータ可読媒体。
【請求項２１】
前記リソースは、プロセス、スレッド、ファイル、システム設定、オペレーティングシステム名前空間、前記オペレーティングシステム名前空間内の名前、およびオペレーティングシステムオブジェクトのうちの１つまたは複数を含むことを特徴とする請求項１９に記載のコンピュータ可読媒体。
【請求項２２】
前記リソースＩＤフィールドは、クリエータコンテキストおよび改訂済みコンテキストを含み、前記クリエータコンテキストは、前記リソースを作成した前記ソフトウェア製品を識別する前記値を格納し、前記改訂済みコンテキストは、前記リソースに関連付けられたＩＤを表す別の値を格納することを特徴とする請求項１９に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、コンピューティング装置のオペレーティングシステムの分野に関する。より詳細には、本発明の実施形態は、アプリケーションＩＤ（ｉｄｅｎｔｉｔｉｅｓ）を介したオペレーティングシステムによるアプリケーションプログラムのインストール、実行、および削除の管理に関する。
【背景技術】
【０００２】
現在のオペレーティングシステムは、有効性および信頼性の向上において劇的に前進しているが、それ以上の向上が望まれている。特に、アプリケーションプログラムのインストール、管理、および削除（すなわちアンインストール）に関するユーザ体験は、依然として向上が必要である。例えば、インストール中、アプリケーションプログラムは、システム設定を誤って構成する、または別のアプリケーションプログラムによって必要とされるファイルを上書きするおそれがある。また、ユーザがアドウェア（ａｄ−ｗａｒｅ）やスパイウェア（ｓｐｙ−ｗａｒｅ）などの望ましくないアプリケーションプログラムをアンインストールすることが難しい可能性がある。また、システムのクラッシュおよびハングの多くは、アプリケーションプログラムに起因する可能性がある。例えば、アプリケーションのアンインストールが不完全である、アプリケーションプログラムをアンインストールしているときに削除しすぎた、またファイルが誤って格納されたという状況は、アプリケーションプログラム、および場合によっては基礎を成すオペレーティングシステムの故障を引き起こすおそれがある。
【０００３】
現在の一部のオペレーティングシステムでは、新しくインストールされたアプリケーションプログラムは、新しくインストールされたアプリケーションプログラムが必要とする古いバージョンまたは新しいバージョンを共有ダイナミックリンクライブラリ（ＤＬＬ）ファイルに上書きする可能性がある。古いファイルまたは新しいファイルと上書きされたファイルとの互換性がない場合、上書きされたファイルに依存する現在インストールされているアプリケーションプログラムは、上書きされたファイルにアクセスしようと試みるとクラッシュするおそれがある。
【０００４】
現在のオペレーティングシステムには、アプリケーションプログラムのインストールに関連するすべてのファイルおよびシステム設定を識別し、関連付ける機構がない。システムがどのアプリケーションのために動作しているかを識別する必要があるので、オペレーティングシステムは、アプリケーションを認識することを望んでいる。しかし、アプリケーションは、アプリケーションのための作業を行っている複数のランタイムプロセス、ヘルパーユーティリティプログラム（ｈｅｌｐｅｒ  ｕｔｉｌｉｔｙ  ｐｒｏｇｒａｍ）、またはシステムプロセスにわたって広くまたがる可能性がある。したがってオペレーティングシステムは、ランタイムオブジェクトがどのアプリケーションとして働いているかを実際に識別するのが難しい。
【０００５】
さらに、オペレーティングシステムは、ファイルおよびシステム設定など、どのリソースがオペレーティングシステム自体によって作成されたかを識別する手段を必要とする。したがって、オペレーティングシステムＯＳは、非ＯＳアプリケーションとして実行しているものに対して、どのランタイムオブジェクトがオペレーティングシステムとして実行しているかを識別することを望む。ＯＳランタイムオブジェクトを識別しなければ、システムは、ファイルなどのシステムオブジェクトへのアクセスをＯＳランタイムオブジェクトのみに制限するのが困難である。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
したがって、こうした欠点または他の欠点の１つまたは複数に対処するために、アプリケーションの影響を管理する改良されたシステムおよび方法が望まれる。
【課題を解決するための手段】
【０００７】
本発明の実施形態は、オペレーティングシステムが、異なるアプリケーションプログラムを識別し、それらを区別できるように、アプリケーションプログラムまたは他のソフトウェア製品、およびその関連のシステムオブジェクト（ファイルなど）を一意に識別するステップを含む。一実施形態では、本発明は、ＩＤを動的に決定し、それをアプリプログラムに割り当てる改良されたオペレーティングシステムを含む。オペレーティングシステムは、アプリケーションプログラムが実行されるたびにオペレーティングシステムによって使用されるように割り当てられたＩＤを保持する。本発明の実施形態は、例えば（１）アプリケーションマニフェストを使用した開発者またはアプリケーション開発者による直接的な割り当て、（２）（例えばインストールプログラムを介した）ＩＤの間接的な割り当て、（３）（「フットプリント（ｆｏｏｔｐｒｉｎｔ）」など）アプリケーションプログラムを備えるファイルの評価に基づいた割り当て、および（４）あるアプリケーションプログラムの別のアプリケーションプログラムによる偽装（ｉｍｐｅｒｓｏｎａｔｉｏｎ）に基づいた割り当てなど、アプリケーションＩＤを決定し、または割り当てるための方法を含む。
【０００８】
本発明の様々な実施形態は、アプリケーションプログラムをシステムから確実にきれいにアンインストールし、アプリケーションプログラムが許可されていないサービスにアクセスしたり、許可されていない動作を行ったりするのを防止し、システムリソースを仮想化してアプリケーションプログラムを互いによりよく分離し、システムへのアプリケーションの影響のロールバック（ファイルタイプの関連付けを「元に戻す」など）を可能にし、ファイルおよびシステム設定のアプリケーションベースの影響の追跡を実施する。
【０００９】
本発明の実施形態は、システムおよびユーザが、カスタムソリューションを、ランタイムオブジェクトの集まりに作用し、共通プロパティに基づいてランタイムオブジェクトを関連付けるよう構成できるようにする一般のランタイムオブジェクト管理戦略を提示する。こうした１つのプロパティは、１つのアプリケーションを表すランタイムオブジェクトの集まりを含む。
【００１０】
本発明の一部の実施形態は、オペレーティングシステムがそれ自体を識別し、オペレーティングシステムＩＤをそれ自体のファイル、システム設定、および他のオブジェクトに関連付けることができるようにする。さらに、本発明の一部の実施形態は、どのランタイムオブジェクトがオペレーティングシステムとして実行しているかをオペレーティングシステムが認識できるようにする。本発明の他の実施形態は、ユーザＩＤの代わりに、またはそれに加えて、アプリケーションＩＤに基づいてセキュリティシステムを作成する。
【００１１】
本発明の一態様によれば、方法は、コンピューティングシステム上の複数のアプリケーションを管理する。この方法は、アプリケーションプログラムにアプリケーションＩＤを割り当てるステップを含む。割り当てられたアプリケーションＩＤは、そのアプリケーションプログラムを他のアプリケーションプログラムと区別する。また、この方法は、アプリケーションプログラムに関連付けられたリソースにリソースＩＤを割り当てるステップを含む。また、この方法は、割り当てられたアプリケーションＩＤおよび割り当てられたリソースＩＤを関連付けるステップを含む。
【００１２】
本発明の別の態様によれば、方法は、オペレーティングシステムがそれに関連付けられているリソースをアプリケーションプログラムによる変更から保護できるようにする。この方法は、アプリケーションプログラムにＩＤを割り当てるステップを含む。また、この方法は、アプリケーションプログラムからオペレーティングシステムリソースの要求を受信するステップを含む。また、この方法は、受信された要求に応答して、ＩＤに基づいて、そのアプリケーションプログラムのためのオペレーティングシステムリソースの特定のバージョンが存在しているかどうかを決定し、アプリケーションプログラムのための特定のバージョンが存在している場合、アプリケーションプログラムに特定のバージョンを提供する。そうでない場合、この方法は、決定に応答して、特定のバージョンを生成し、生成された特定のバージョンをアプリケーションプログラムに提供する。
【００１３】
本発明の別の態様によれば、１つまたは複数のコンピュータ可読媒体は、コンピューティングシステム上の複数のアプリケーションを管理するコンピュータ実行可能構成要素を有する。構成要素には、アプリケーションプログラムにアプリケーションＩＤを割り当てるクリエータ構成要素（ｃｒｅａｔｏｒ  ｃｏｍｐｏｎｅｎｔ）がある。割り当てられたアプリケーションＩＤは、そのアプリケーションプログラムを他のアプリケーションプログラムと区別する。また、構成要素には、アプリケーションプログラムに関連付けられているリソースにリソースＩＤを割り当てるリビジョン構成要素（ｒｅｖｉｓｉｏｎ  ｃｏｍｐｏｎｅｎｔ）、および割り当てられたアプリケーションＩＤおよび割り当てられたリソースＩＤを関連付ける割り当て構成要素などもある。
【００１４】
本発明のさらに別の態様によれば、システムは、複数のアプリケーションプログラムのそれぞれに関連付けられたアプリケーションＩＤを介して複数のアプリケーションプログラムを管理する。システムは、それに関連付けられているオペレーティングシステムリソースを有するオペレーティングシステムを含む。また、システムは、アプリケーションプログラム、およびそれに関連付けられているアプリケーションＩＤを格納するメモリエリアを含む。また、システムは、オペレーティングシステムと通信するようにプログラムされたプロセッサ、およびアプリケーションプログラムからオペレーティングシステムリソースの要求を受信し、受信した要求に応答して、アプリケーションＩＤに基づいてオペレーティングシステムリソースの特定のバージョンをアプリケーションプログラムに提供するメモリエリアも含む。
【００１５】
本発明の別の態様によれば、コンピュータ可読媒体は、ソフトウェア製品に関連付けられたＩＤコンテキストを表すデータ構造を格納する。データ構造は、ソフトウェア製品を識別する値を格納するアプリケーションＩＤフィールドを含む。データ構造は、ソフトウェア製品が属するソフトウェア製品のグループに関連付けられている値を格納する分離ＩＤ（ｉｓｏｌａｔｉｏｎ  ｉｄｅｎｔｉｔｙ）フィールドも含む。
【００１６】
あるいは、本発明は、様々な他の方法および装置を含み得る。
【００１７】
他の特徴は、一部は明らかであり、一部は以下で指摘する。
【発明を実施するための最良の形態】
【００１８】
類似の参照文字は、図面にわたって類似の部分を示す。
【００１９】
一実施形態では、本発明は、コンピューティング装置にインストールされている、またはインストールされる各アプリケーションプログラム、または他のソフトウェア製品に一意のＩＤを割り当てるステップを含む。特に本発明は、アプリケーションプログラムにアプリケーションＩＤを割り当て、作成された、またはアプリケーションプログラムに関連付けられている各リソースにリソースＩＤを割り当てるステップを含む。リソースには、それだけには限定されないが、ファイル、フォルダ、プロセス、スレッド、システム設定、名前付きオブジェクト、アプリケーションプログラミングインターフェイス（ＡＰＩ）、特定のコードパス、実行可能ルーチンのライブラリ、オペレーティングシステムプロパティ値、およびオペレーティングシステムリソースなどがある。例えばいくつかのＡＰＩおよびコードパスは、メール送信機能を備えており、こうしたＡＰＩおよびコードパスへのアクセスが制限されることがある。別の例では、システムをリブートする機能が制限される。リソースは、特定の名前付きオブジェクトだけではなく、システムの名前空間（例えば「名前」自体）も含む。例えば、オブジェクトがある名前で作成される前にその名前を確保しておく、またはそれに「居座る」（ｓｑｕａｔｔｉｎｇ）ことは、脆弱性およびセキュリティの問題を作り出す。
【００２０】
割り当てられたアプリケーションＩＤは、そのアプリケーションプログラムを他のアプリケーションプログラムと区別する。本発明の一実施形態は、アプリケーションＩＤおよびリソースＩＤを関連付けて、安全な操作、拡張性、およびアプリケーションプログラムおよびそのリソースのオペレーティングシステムとの統合を可能にする。アプリケーションＩＤおよびリソースＩＤは、一意性、整合性、および持続性（すなわち進化しないＩＤ）を提供する。一般に、アプリケーションＩＤおよびリソースＩＤは、アプリケーションマニフェストまたは他のメタデータによって明示的に定義される、またはアプリケーションの属性から導出される。一実施形態では、アプリケーションＩＤおよびリソースＩＤは同じである。
【００２１】
同様に、本発明は、オペレーティングシステムに属するリソースを識別する。オペレーティングシステムＩＤは、オペレーティングシステムマニフェストで、またはメタデータから明示的に確保され、または定義され、あるいはＯＳのインストールまたは実行中に導出される。
【００２２】
アプリケーションプログラムおよびそのリソースを識別することによって様々な利点が得られる。例えば、（コンピューティング装置およびリソースとの対話など）各アプリケーションプログラムによってなされた変更は、保持され、ログに記録されるため、各アプリケーションプログラムの識別は、ユーザがコンピューティング装置に対する任意の変更を元に戻すことができるようにする。さらに、各アプリケーションプログラムおよびその関連のリソースの識別は、ユーザがアプリケーションプログラムを完全に削除（例えばアンインストール）し、アプリケーションプログラムによってコンピューティング装置リソースに対してなされた任意の変更を元に戻すことができるようにする。
【００２３】
別の例では、コンピューティング装置にインストールされている、またはインストールされる各アプリケーションプログラムの識別は、オペレーティングシステムが、アプリケーションインストーラによる不注意の変更または安全でない変更から重要なリソースを保護できるようにする。アプリケーションＩＤおよびオペレーティングシステムＩＤは、基礎を成すオペレーティングシステムの整合性および信頼性を向上させる。また、本発明は、読み取り専用アクセス、分離、仮想化、変更の追跡、およびサンドボクシング（ｓａｎｄｂｏｘｉｎｇ）など、他の保護戦略と組合せて、それ以上の保護を提供することもできる。
【００２４】
本明細書の説明、図、および例は、任意の特定のオペレーティングシステムに限定されるものではない。むしろ本発明の実施形態は、任意のタイプ、モデル、および構成のオペレーティングシステムに適用することができる。さらに、本発明の実施形態は、本明細書に記載したＩＤを割り当てる任意の方法例に限定されるものではない。むしろ本発明の実施形態は、アプリケーションプログラムおよびその関連のリソースを一意に識別し、オペレーティングシステムおよびその関連のリソースを識別する任意の方法または設計に適用可能である。
【００２５】
(アプリケーションＩＤの決定および格納)
まず図１を参照すると、フロー図の例は、コンピューティング装置にインストールすべきアプリケーションプログラムのアプリケーションＩＤを生成する方法を示している。図１に示した方法は、オペレーティングシステムの構成要素（クリエータ構成要素など）、またはオペレーティングシステムに関連付けられていない構成要素によって実行することができる。例えば、ＩＤドライバを使用して図１に示した識別サービスを提供することができる。ドライバは、インストールプロセスの一環としてバイナリファイルをスキャンして、アプリケーションＩＤを生成し、かつどのバイナリファイルが互いに属するかを識別するように構成することができる。
【００２６】
図１のフロー図は、それだけには限定されないが、１０２の事前に割り当てられたアプリケーションＩＤ、１０４のアプリケーションプログラムに関連付けられたマニフェスト、および１０６のアプリケーションプログラムのインストールに使用されたインストールプログラムを含めて、様々なソースからのメタデータの抽出を示している。この方法は、アプリケーションＩＤを決定するために、１０８でメタデータを抽出する。図１はソースの分析を特定の順序で示しているが、他の順序も本発明の範囲内である。
【００２７】
事前に割り当てられたアプリケーションＩＤの実施形態の場合、オペレーションシステムは、アプリケーションプログラムの導入パッケージ（ｄｅｐｌｏｙｍｅｎｔ  ｐａｃｋａｇｅ）をスキャンするように構成される。次いで（例えばハッシュを使用することによって）スキャンから一意の署名が生成される。一意の署名は、事前に割り当てられたアプリケーションＩＤとのリンクを確立するために使用される。一実施形態では、ハッシュは、確率的に任意の２つのファイルのハッシュが同じ署名を作成する見込みがないようにするために十分強いハッシュを含む。
【００２８】
一部の実施形態では、アプリケーションＩＤは、アプリケーション開発者によって作成され、アプリケーションマニフェストに格納される。マニフェストは、プログラムがインストールされるときにアプリケーションプログラムに添付される。方法は、アプリケーションプログラムに固有の情報を探し出し、抽出することによって、（例えばソフトウェア分配パッケージに含まれる）マニフェストからアプリケーションＩＤを決定する。本発明は、インストールされるアプリケーションプログラムのアプリケーションＩＤを決定するために、メタデータを抽出し、格納する。一例では、アプリケーションＩＤは、名前フィールドおよびＰＫＨフィールドをハッシュすることによって厳密な名前（ｓｔｒｏｎｇ  ｎａｍｅ）から生成される。この実施形態では、マニフェストは、アプリケーションＩＤの宣言のソースである。
【００２９】
こうしたソースからのメタデータが存在しない場合、本発明の実施形態は、非宣言のアプリケーションＩＤを生成することによってアプリケーションプログラムを識別する。この方法は、アプリケーションプログラムが割り当てられたアプリケーションＩＤを有していない場合（例えばマニフェストまたは事前に定義された他の機構のないアプリケーションなど）、インストール処理が開始すると、（１１２でのアプリケーションＩＤタグを含めて）１１０でアプリケーションＩＤ情報を生成する。これは、（ベンダ、製品名、製品バージョン、およびモジュールチェックサムなど）アプリケーションプログラムについての特定の情報をインストールパッケージから探し出し、抽出することによって達成することができる。例えば、異なるいくつかのアプリケーションを備えるアプリケーションパッケージソフト（ａｐｐｌｉｃａｔｉｏｎ  ｓｕｉｔｅ）を単一のインストールプログラムからインストールすることができる。インストールプログラムは、単一のインストールプログラムからインストールされたすべてのプログラムに適用される単一のアプリケーションＩＤで構成することができる。具体的な例では、ビジネスプロダクティビティパッケージソフトには電子メールプログラムおよび文書処理プログラムなどがあるが、両プログラムは、同じアプリケーションパッケージソフトからのものであるため、インストールプログラムは、インストールされる各アプリケーションに同じアプリケーションＩＤを適用するように構成することができる。別の実施形態では、インストールプログラムは、類似（ｃｏｍｐａｒａｂｌｅ）のＩＤ情報をソフトウェア製品のフットプリント（ｆｏｏｔｐｒｉｎｔ）から生成する。例えば、同じアプリケーションの異なるバージョンは、異なるフットプリントを有しており、その結果異なるアプリケーションＩＤを有する。さらに別の例では、セットアップファイル（ｓｅｔｕｐ．ｉｎｉなど）は、ソフトウェア製品導入パッケージの一部であり得る。ｓｅｔｕｐ．ｉｎｉファイルは、インストールブートストラップ構成要素（ｓｅｔｕｐ．ｅｘｅなど）を実行するための情報を含む。ｓｅｔｕｐ．ｉｎｉファイルの固有のセクション（例えばＳｔａｒｔｕｐ）内のＡｐｐＮａｍｅなどのプロパティは、製品の名前を含み得る。別の例では、ファイルバージョン情報リソースは、ＣｏｍｐａｎｙＮａｍｅやＰｒｏｄｕｃｔＮａｍｅなどのエントリを含み得る。こうしたエントリの値は、製品ベンダおよび製品名の属性値として使用される。情報は、ＧｅｔＦｉｌｅＶｅｒｓｉｏｎｌｎｆｏ（）やＶｅｒＱｕｅｒｙＶａｌｕｅ（）などの関数で抽出される。アプリケーションＩＤデータ構造が１６バイトを格納している例では、構造の最初の半分は、識別されたベンダ名および製品名から生成されたハッシュ値を格納する。
【００３０】
決定され、生成されたＩＤ情報は、（例えば基礎を成すオペレーティングシステムによって）その後使用するために１１４で格納（例えば保持）される。
【００３１】
(アプリケーションプログラムの構成要素の決定)
アプリケーションプログラムは、１つまたは複数の特定のタスクまたは機能を実行するように設計されているコンピュータプログラムまたはソフトウェアを含む。ユーザによって認識されるアプリケーションプログラムは実際には、それだけには限定されないが、特定のタスクの組を実行するように論理的または機能的に分類された実行可能モジュール、ダイナミックライブラリ、リソース、および補助ファイルを含む構成要素の集まりであり得る。構成要素は、明示的、または黙示的に結合されてアプリケーションプログラムを形成することができる。アプリケーションプログラムの構成要素の一部は、互いに強依存関係を有し得る。一部のアプリケーション構成要素は、他のアプリケーションと共有することができる。アプリケーションプログラムは、「バインド」（ｂｉｎｄｉｎｇ）と呼ばれるプロセス中に他のモジュールからインポートされたルーチンを有し得る。例えば、ポータブル（ｐｏｒｔａｂｌｅ）な実行可能ファイル形式では、インポートセクションは、アプリケーションプログラムを作成するためにローダが探し出し、リンクする必要のあるルーチン、モジュール、変数、および他の記号を定義する。別の例では、アプリケーションプログラムによって使用されるすべての外部アセンブリへの参照は、アセンブリのダイナミックリンクライブラリ（ＤＬＬ）内に含まれるマニフェストに列挙されているか、外部的に供給されて複数のＤＬＬにサービスを提供する。
【００３２】
黙示的な依存関係は、一般にはファイル形式内の任意のデータ構造によっては規制されない。１つのモジュールは、別のモジュールからエクスポートされた記号に依存し得るが、バインドは、ランタイム時にホストモジュールが他のモジュールを動的にロードしたときに起こる。例えば、ホストモジュールは、オブジェクトインスタンスの作成、およびオブジェクトの実装を提供するモジュールへの参照を要求する。別の例では、構成要素は、ビットマップ、アイコン、ビデオ、音声などの非実行可能ファイルデータ内に格納されているデータに依存し得る。
【００３３】
本発明の実施形態は、明示的および黙示的なモジュールの依存関係を識別して様々な方法でアプリケーションプログラムの識別を可能にする方法を含む。一般に、アプリケーションプログラムを形成する構成要素は、アプリケーションベンダによって１つの導入パッケージにまとめられる。この方法は、導入パッケージを使用して、インストール中に作成されたファイルおよび格納されたシステム設定を追跡して、特定のアプリケーションプログラムに属するファイルを識別するステップを含む。この方法は、アプリケーションによって作成された各ファイルにＩＤを割り当てる。ＩＤは、図４に示したように、アプリケーションプログラムのアプリケーションＩＤに関連付けられる。
【００３４】
（分離ＩＤ）
一部の実施形態では、分離ＩＤは、アプリケーションＩＤに加えて、本発明に従ってオペレーティングシステムの構成要素（グループ構成要素など）によってアプリケーションプログラムに割り当てられる。分離ＩＤは、このアプリケーションのみに関連付けられる場合もあるが、それに関連付けられている別のアプリケーションＩＤを有する別のアプリケーションプログラムに関連付けられる場合もある。分離ＩＤを使用して、異なるアプリケーションＩＤを備えるアプリケーションプログラムを論理的に分類することができる。一般に、アプリケーションプログラムは、（例えば特定のユーザによってインストールされた）共通のコンテキストを有し得る。例えば、同じアプリケーションパッケージソフトからの２つのアプリケーションプログラムが異なるアプリケーションＩＤを有している場合、オペレーティングシステムは、同じ分離ＩＤを両方のアプリケーションプログラムに割り当てる。アプリケーションＩＤを生成するために集められた情報の一部またはすべてを使用して、同じような特徴に基づいてアプリケーションをいくつかの分離ＩＤに分類することができる。例えば、本発明の実施形態は、ベンダ名、製品名、および／またはモジュールのバイナリコンテンツの署名を使用して、分離ＩＤを生成することができる。
【００３５】
一般に分離ＩＤは、モジュールのメタデータまたは他の属性を取得することによって生成される。モジュールのタイプおよび関数の指定に基づいて、モジュールベンダ（開発者など）がメタデータをモジュールに関連付ける様々な方法がある。メタデータは、モジュールを表す物理的なファイルの一部であってもよく、または個別のファイルに格納されていてもよい。
【００３６】
特定の分離ＩＤに割り当てられているアプリケーションプログラムは、仮想プログラムグループを生成する。仮想プログラムグループ内のすべてのアプリケーションプログラムは、オペレーティングシステムの同等の仮想化ビュー（システムリソースへの同じレベルのアクセス）を受信する。つまり、同じ分離ＩＤを有する異なるアプリケーションは、システムの同じ仮想化ビューを共有する。同じアプリケーションプログラムの異なるバージョンに異なるアプリケーションＩＤが割り当てられている例では、異なるバージョンは、システムリソースへの同等のアクセスを受信することになっているので、異なるバージョンに同じ分離ＩＤを割り当てることができる。
【００３７】
オペレーティングシステムは、アプリケーションＩＤおよび／または分離ＩＤを介してそのリソースのアクセス制御を提供する。例えば、オペレーティングシステムは、アプリケーションに関する潜在的に異なるアクセス権を備える同じファイルの複数のコピーおよび／またはバージョン（仮想コピーなど）を維持し得る。オペレーティングシステムは、書き込みアクセスについて、特定の分離ＩＤを備えるアプリケーションプログラムによって要求されたファイルを動的に仮想化する。一実施形態では、異なるベンダからのすべての製品、および同じベンダからの異なる製品は、仮想化された異なるビューを有しており、一方同じベンダからの同じ製品のすべてのバージョンは、仮想化された同じビューを共有する。ベンダ名および製品名の比較は、ベンダ名および製品名の属性の大文字と小文字を区別しない文字列値を基にすることができる。
【００３８】
次に図２を参照すると、ブロック図の例は、分離ＩＤの使用を示している。図２では、アプリケーションＩＤ  ＩＤ１を備えるアプリケーションプログラム、およびアプリケーションＩＤ  ＩＤ２を備えるアプリケーションプログラムは、同じ分離ＩＤ  ＩｓｏＩＤ１を有する。アプリケーションＩＤ  ＩＤ３を備えるアプリケーションプログラムは、分離ＩＤ  ＩｓｏＩＤ２を有する。オペレーティングシステム２０２は、ファイルＡの２つのコピーを維持しており、ファイルＡの一方のコピー２０４は、ＩｓｏＩＤ１を備えるアプリケーション（アプリケーションプログラムＩＤ１およびＩＤ２など）による書き込みアクセス用のもの、ファイルＡの一方のコピー２０６は、ＩｓｏＩＤ２を備えるアプリケーション（アプリケーションプログラムＩＤ３など）による書き込みアクセス用のものである。
【００３９】
動作中、本発明の一実施形態によるオペレーティングシステム２０２の構成要素（仮想化構成要素など）は、アプリケーションプログラムＩＤ１からファイルＡの要求を受信する。一実施形態では、要求は、割り当てられたＩＤ  ＩＤ１およびＩｓｏＩＤ１を含む。他の実施形態では、オペレーティングシステム２０２は、割り当てられたＩＤ  ＩＤ１およびＩｓｏＩＤ１を推論する、または割り当てられたＩＤ１およびＩｓｏＩＤ１についてアプリケーションプログラムＩＤ１にクエリを行う。受信された要求に応答して、オペレーティングシステム２０２は、受信されたＩＤに基づいて、アプリケーションプログラムのためのオペレーティングシステムリソースの特定のバージョンが存在するかどうかを決定する。この場合、ＩＤ  ＩｓｏＩＤ１のためのファイルＡのコピー２０４は存在している。オペレーティングシステム２０２は、アプリケーションプログラムＩＤ１に、ＩｓｏＩＤ１のために存在するファイルＡのコピー２０４を提供する。ＩｓｏＩＤ１のためのファイルＡのコピー２０４が存在しない場合、オペレーティングシステム２０２は、元のファイルＡからコピーを生成し、生成されたコピーをアプリケーションプログラムＩＤ１に提供する。
【００４０】
（ランタイム中のアプリケーションＩＤおよび分離ＩＤの生成）
次に図３を参照すると、フロー図は、ランタイム中にモジュールのアプリケーションＩＤおよび分離ＩＤを決定する方法例を示している。一実施形態では、オペレーティングシステムまたはクライアントサーバのランタイムプロセスは、図３に示した機能を実行する。親プロセスは、例えばＣｒｅａｔｅＰｒｏｃｅｓｓ（）などの関数を呼び出すことによって子プロセスを生成する。子プロセスに関連付けられているモジュールのアプリケーションＩＤおよび分離ＩＤが存在する場合、この方法は、ＩＤストアからＩＤをロードし、そのＩＤを他のランタイムデータとともにプロセスに割り当てる。ＩＤが存在しない場合、この方法は、ＩＤを決定し、割り当てるための様々な操作を実行する。例えばこの方法は、マニフェストを調べ、マニフェストがＩＤを含んでいる場合、マニフェストからＩＤをロードする。また、この方法は、アプリケーション互換データおよびインストールプログラムデータを調べて、モジュールに関する情報を取得する。この方法はさらに、バージョン情報をモジュールから抽出し、またはチェックサムを算出してアプリケーションＩＤおよび分離ＩＤを決定することができる。この方法は、決定されたＩＤを将来使用するために（グローバルに一意の１６バイトデータ構造として）格納する。
【００４１】
アプリケーションＩＤおよび分離ＩＤは、結合されてアプリケーションプログラムおよびその中のモジュールに関連付けられているＩＤコンテキストを形成することができる。
【００４２】
（アプリケーションＩＤデータ構造）
モジュールまたは構成要素のＩＤタグは、アプリケーションのＩＤコンテキストを保持する。また、ＩＤコンテキストは、アプリケーションＩＤおよび分離ＩＤを生成する方法に関連付けられている属性などの追加情報を格納するための１つまたは複数のフラグを含み得る。例えばフラグは、アプリケーションＩＤおよび分離ＩＤの生成に使用されるメタデータが既知のインストーラとして識別されたモジュールから抽出されたことを示すインストーラビットを含み得る。
【００４３】
次に図４を参照すると、ブロック図の例は、アプリケーションプログラムに関連付けられているファイルのＩＤタグの構造および生成を示している。本発明の実施形態は、アプリケーションプログラムに関連付けられているＩＤコンテキストを使用して、アプリケーションプログラムによって作成または変更されるファイルまたは他のリソースごとにＩＤタグを作成する方法を含む。ＩＤコンテキストは、カーネルタグ付けサービス（ｋｅｒｎｅｌ  ｔａｇｇｉｎｇ  ｓｅｒｖｉｃｅ）を使用して記憶装置（ｓｔｏｒｅ）内に保持される。例えば、ＩＤコンテキストは、ファイルストリームまたはファイル属性内に保持することができる。
【００４４】
一実施形態では、ファイルまたは他の構成要素のＩＤタグは、ファイルの作成中に形成されたクリエータコンテキスト（ＣｒｅａｔｅＦｉｌｅ（）など）、およびプロセス作成中に形成された改訂済みコンテキスト（ｒｅｖｉｓｅｄ  ｃｏｎｔｅｘｔ）（ＣｒｅａｔｅＰｒｏｃｅｓｓ（）など）を含む。ファイルタグは、ファイルのプロセスの作成の間にＩＤが推敲または改訂されるまでクリエータコンテキストのみを有し得る。
【００４５】
次に図５を参照すると、ブロック図の例は、ファイル作成中のＩＤコンテキストの伝搬を示している。図５の例では、プロセス１はファイルＡを作成する。プロセス１のＩＤからの改訂済みＩＤコンテキストは、ファイルＡのＩＤタグのクリエータＩＤコンテキスト部分を形成し、ファイルＡの改訂済みＩＤコンテキストは空のままである。
【００４６】
（プロセス作成中のＩＤコンテキストの改訂）
次に図６を参照すると、モジュールのプロセス作成中に改訂済みＩＤコンテキストを作成するためのファイルＡなどモジュールのＩＤコンテキストの推敲（ｅｌａｂｏｒａｔｉｏｎ）を示している。例えば、ユーザがモジュールを実行したとき、本発明の実施形態は、モジュールに関連付けられたクリエータＩＤコンテキストがあるかどうかを決定する。クリエータＩＤコンテキストがある場合、ＩＤコンテキストは、推敲されて、改訂済みコンテキストを作成し、それをタグに保持する。改訂済みＩＤコンテキストは、例えばオペレーティングシステムによって格納されたモジュールに関するランタイムデータに関連付けられる。
【００４７】
モジュールのためのＩＤタグが存在しない場合、本発明の実施形態は、ＩＤを決定し、クリエータコンテキストおよび改訂済みコンテキストを形成する。作成されたＩＤコンテキストは、モジュールをさらに実行するためにファイルのタグに保持される。
【００４８】
ＩＤコンテキストの改訂は、ヒューリスティックアルゴリズムを使用し、署名を、（例えば継承されたＩＤコンテキストなど）事前に投入されたアプリケーションＩＤのライブラリと照合するステップを含む。さらに、推敲方法は、親プロセスの改訂済みコンテキスト、モジュール（ファイルＡなど）のクリエータコンテキスト、およびモジュール自体（ファイルＡなど）を分析して、モジュールの改訂済みコンテキストを生成するステップを含む。一例では、モジュールが宣言ＩＤ（ｄｅｃｌａｒａｔｉｖｅ  ｉｄｅｎｔｉｔｙ）を有していない場合、モジュールのクリエータコンテキストは、改訂済みコンテキストにコピーされる。別の例では、モジュールが宣言ＩＤを有している場合、改訂済みコンテキストの値はモジュールまたはメタデータから導出される。
【００４９】
代替実施形態では、汎用のシステムユーティリティは、ＩＤなしに実行するが、それがロードする第１の非システムライブラリからＩＤを導出する。
【００５０】
次に図７を参照すると、フロー図例は、プロセス作成中のＩＤ情報のリビジョンを示している。本発明の一実施形態は、ＩＤコンテキストを改訂する構成要素（リビジョン構成要素など）、および改訂済みＩＤコンテキストをアプリケーションＩＤに関連付ける構成要素（割り当て構成要素など）を含む。一実施形態では、図７に示した方法は、単一のオペレーティングシステム構成要素によって行われる。この方法は、７０２で実行されるモジュールのＩＤコンテキストを取得するステップ、および７０４での親プロセスのＩＤコンテキストを取得するステップを含む。７０６でモジュールが改訂済みＩＤコンテキストを有している場合、７０８でそのプロセスについて改訂済みＩＤコンテキストが戻される。７０６でモジュールは改訂済みＩＤコンテキストを有していないが、７１０でモジュールのための宣言ＩＤ（マニフェストなど）は存在している場合、この方法は、７１２で宣言ＩＤからモジュールのＩＤコンテキストの改訂済みコンテキストを形成する。７１０で宣言ＩＤは存在しないが、７１４でモジュールは既知のインストーラである場合、この方法は、７２６でモジュールのメタデータから改訂済みコンテキストを形成する。７１４でモジュールは既知のインストーラではないが、７１６で既知の共有インストーラエンジンである場合、この方法は、７１８でＩＤコンテキストを起動環境から導出すべきであるかどうかを決定する。７１８でＩＤコンテキストを起動環境から導出すべきである場合、この方法は、７２０でプロセス起動環境（コマンドラインで参照されるファイルなど）から改訂済みコンテキストを形成する。７１８でＩＤコンテキストは起動環境から導出される必要がない場合、この方法は、７２２で親プロセスＩＤコンテキストがシステムＩＤコンテキストと同じであるかどうかを決定する。７２２で親プロセスＩＤコンテキストがシステムＩＤコンテキストと異なる場合、この方法は、７２４で親プロセスコンテキストをモジュールＩＤコンテキストにコピーする。７２２で親プロセスＩＤコンテキストがシステムＩＤコンテキストと同じである場合、この方法は、７２６でモジュールのメタデータから改訂済みコンテキストを形成する。
【００５１】
７１６でモジュールは既知の共有インストーラエンジンではないが、７２８でモジュールのＩＤコンテキストが「インストーラによって作成」フラグを有している場合、この方法は、７３０でクリエータコンテキストから改訂済みコンテキストを形成する。７２８でモジュールのクリエータＩＤコンテキストが「インストーラによって作成」フラグを有してない場合、この方法は、７２６でモジュールのメタデータから改訂済みコンテキストを形成する。この方法は、７３２で新しいプロセスのために改訂済みＩＤコンテキストを戻す。
【００５２】
一実施形態で、割り当てられたモジュールのＩＤコンテキストは、再割り当てのためにタグ付けされる。モジュールにおいてプロセスを作成しようとするその後の試行は、新しいＩＤを生成し、割り当てるよう本発明の一実施形態を促す。別の実施形態では、ファイル／プロセス作成階層構造のリバースエンジニアリングおよび障害回復を可能にするための情報が保持される。こうした情報は、各モジュールのシステム全体のキャッシュおよびそのＩＤタグを含み得る。さらに別の実施形態では、モジュールごとにマニフェストが自動的に生成され、ＩＤコンテキストデータで更新される。
【００５３】
（ＩＤコンテキストの偽装）
一部の場合では、アプリケーションが一時的に別のアプリケーションを偽装（ｉｍｐｅｒｓｏｎａｔｅ）することができることが有用となり得る。例えば、インストールされているアプリケーションがクライアントからインストールされたと思われるように、サーバベースのインストールプログラムに、クライアント常駐インストールプログラムのアプリケーションＩＤを一時的に偽装させることが望ましい場合がある。偽装されたアプリケーションＩＤの使用は、スレッドまたはプロセスが別のアプリケーションＩＤコンテキストで実行できるようにする。本発明の実施形態は、アプリケーションＩＤをあるアプリケーションから別のアプリケーションに移行するためのランタイムサービス（偽装構成要素など）を提供することができる。ランタイムサービスは、アプリケーションが、あるアプリケーションの代わりに作業を行うために別のアプリケーションのＩＤを取得できるようにし、その完了の後に元のＩＤが復元される。選択されたアプリケーションプログラムのみが他のアプリケーションプログラムのふりをすることができるようにするために、アクセス制御を実装することができる。例えば、要求者の権利が目的のプロセスまたはトークンのセキュリティ記述子と照合される。
【００５４】
本発明の実施形態は、黙示的な偽装も提供する。黙示的な偽装の場合、システムは、ＩＤタグから取得されたＩＤコンテキストをオーバーライドし、プロセスモジュールについての他の情報に基づいて異なるコンテキストを割り当てる。例えば、親プロセスは、ローカルサーバのコンテキスト内のオブジェクトをインスタンス化する。サーバスレッドに、オブジェクトのインスタンス化を開始した親プロセスと同じＩＤコンテキストが割り当てられる。明示的な偽装の例は、他のプロセスが既知の共有インストーラエンジンである場合、親の「ブーストラップ」プロセスのＩＤを別のプロセスに割り当てるステップを含む。
【００５５】
（アプリケーションセキュリティＩＤ）
本発明の実施形態は、アプリケーションのＩＤ、およびアプリケーションを稼働させているユーザのＩＤにセキュリティ権を関連付けることによって、その権限をアプリケーションに付与する。アプリケーション固有のセキュリティ権は、アプリケーションの代わりに実行するプロセスおよびサービスに関連付けられているセキュリティトークンにアプリケーション固有のセキュリティＩＤ（ＡＰＰ−ＳＩＤ）を追加することによって、稼働しているアプリケーションに関連付けることができる。オペレーティングシステムのオブジェクト（それだけには限定されないが、ファイル、ポート、メモリ、プロセス、スレッド、およびシステムサービスなど）に関連付けられているアクセス制御リスト（ＡＣＬ）は、ＡＰＰ−ＳＩＤおよびユーザのセキュリティ識別子に関するアクセス権を含む。
【００５６】
本発明では、アクセス権の付与を決定するときに、本発明のセキュリティモニタでのアクセスチェックは、複数のＳＩＤを考慮に入れる。以前のシステムでは、ユーザに帰属する単一のＳＩＤのみが存在していた。ＡＰＰ−ＳＩＤは、ＡＣＬによって付与されるアクセス権に対して計算すべき少なくとも１つの新しいＳＩＤを導入する。また、一部の実施形態では、１つのアクセス要求は、その要求に関連付けられている複数のＡＰＰ−ＳＩＤを有することができる。
【００５７】
ＡＰＰ−ＳＩＤの実施形態は、一般のセキュリティモニタで、ＡＣＬ自体によって指定されるいくつかの方法、つまり提示されているすべてのＳＩＤの特権の共通部分（ｉｎｔｅｒｓｅｃｔｉｏｎ）に従ってアクセス権を付与する（例えば最小公倍数（ｌｅａｓｔ  ｃｏｍｍｏｎ））方法、またはＳＩＤのアクセス権の和集合（ｕｎｉｏｎ）に従ってアクセス権を付与する方法のうちの１つで複数のＳＩＤを解釈する。
【００５８】
ＳＩＤの共通部分の算出は、ユーザがオブジェクトにアクセスでき、しかしアプリケーションにそのアクセス権を付与したくないときに行われる。あるいは、ＳＩＤの共通部分の算出は、あるアプリケーションがオブジェクトにアクセスでき、しかしユーザ（または他のすべてのアプリケーション）もアクセス権を有している場合を除いてアクセス権を付与したくないときに行われる。共通部分の使用の１つは、ユーザによってアクセス可能ないくつかのファイルにのみアクセスできるように、ネットワークからダウンロードされたアプリケーションのアクセスを制限する。
【００５９】
和集合の解釈によるアクセス権の付与は、アプリケーションが、ユーザが所有していない追加のアクセス権を取得できるようにする。こうした使用の１つでは、ユーザは、システムクロックでの日付を変更するシステムサービスにアクセスすることはできない。しかしユーザは、日付を変更することができるＡＰＰ−ＳＩＤを有するサービスにアクセスすることはできる。利点は、例えば限られた範囲内の日付の変更のみを可能にするなど、アクセス可能なサービスが、日付を変更するための基礎を成すサービスよりさらに限られた機能を提供することである。ＡＰＰ−ＳＩＤは、こうした中間サービスの書き込みを可能にする。
【００６０】
一部の実施形態は、例えば、たとえ和集合によってＧＲＡＮＴアクセスが算出されていても、アクセス制御リスト内のＤＥＮＹアクセス制御エントリ（ＡＣＥ）に従ってアクセスを拒否するなど、アクセスチェックの他の組合せを使用する。他の実施形態は、あるオブジェクトに関してユーザのＳＩＤに追加の特権を付与または拒否するためにＡＰＰ−ＳＩＤに関連付けられているＧＲＡＮＴ／ＤＥＮＹ  ＡＣＥを使用することによって、アプリケーションおよびユーザＳＩＤを異なるように扱うことができる。
【００６１】
別の実施形態では、アプリケーションＩＤを使用して、一般化された特権（機能など）をアプリケーションに関連付けることもできる。機能は、オブジェクトに関連付けられているアクセスリストと照合されず、代わりに明示的に主要なシステムパスのコードによってチェックされるという点で、ＡＣＬベースのセキュリティとは異なる。例えば、ある機能（メール送信など）をアプリケーションと関連付けることができる。メール送信に関連する特定のオブジェクトはなく、メールの送信に使用できるいくつかのコードパスがある。各コードパスは、アプリケーションがコードパスを実行するのを許可する前に、メールを送信するアプリケーションの特権をチェックする。
【００６２】
（アプリケーションＩＤに基づいたアプリケーションへのサービス提供）
アプリケーションＩＤおよび分離ＩＤは、オペレーティングシステムがそのシステムにインストールされているアプリケーションにサービスを提供するやり方を管理するための枠組みを提供する。サービスは、アプリケーションＩＤまたは分離ＩＤに基づいて提供することができる。本発明の一実施形態は、ランタイム中にＩＤ情報へのアクセスを提供するアプリケーションプログラミングインターフェイス（ＡＰＩ）とともにアプリケーションＩＤおよび／または分離ＩＤのための記憶システムを使用する。実装によっては、サービスプロバイダは、アプリケーションプロセス、またはアプリケーションに属するファイルまたはリソースセットに対するアクションを行うためにランタイム状態（すなわちアプリケーションが稼働しているかどうか）に関係なくサービス提供されるアプリケーションのＩＤを取得することができる。
【００６３】
次に、本明細書に記載した特徴の潜在的ないくつかの利点について説明する。これらは潜在的な利点であるが、特定の特徴の実際の実装および選択は、こうした利点がある場合はそれらのうちのどれが特定の実装に関連付けられるかを決定する。ソフトウェアアプリケーションＩＤは、システムがアプリケーションを１つのエンティティとして認識し、それに対してサービスを提供できるようにする。非宣言ＩＤの決定、および割り当ては、システムにインストールされている、およびインストールされるすべてのアプリケーションをオペレーティングシステムが自動的に認識できるようにする。ソフトウェア導入パッケージの正確で信頼できる識別は、パッケージに関連付けられているアプリケーションプログラムのＩＤを早期に検出し、投入するために重要である。アプリケーションにサービスを提供する概念は、個々のアクティビティをそれぞれ備える異なるアプリケーションのサービス提供から、オペレーティングシステムからロードされたソフトウェアに対する共通の組のアクションへと、ソフトウェア管理プロセスを拡張し、一般化する。アプリケーションＩＤの枠組みの範囲内で、各アプリケーションは、それ自体の識別情報を有している。別のアプリケーションの代わりに、あるアプリケーションによって実行すべきタスクのクラスがある。最も一般的な例は、管理およびメンテナンスである。本発明の実施形態は、管理ツールおよびユーティリティがサービス提供するアプリケーションのふりをすることができるようにする。
【００６４】
（一般のランタイムオブジェクト管理）
セットとは、プロセス、スレッド、および他のセットなど、ラインタイムエンティティメンバを含むコンテナオブジェクトを指す。セットのメンバは、アプリケーションに属するすべてのランタイムオブジェクト、ログオンセッション、または何らかのユーザ定義済みのルールによるものなど、固有のプロパティを共有する。オペレーティングシステムは、セットに使用可能な固有のプロパティごとに標準のセットタイプを定義することができ、またユーザおよびアプリケーションがカスタムセットタイプを定義できるようにする。ランタイムオブジェクトは複数のセットに属していてもよく、ランタイムオブジェクトのセットのメンバシップリストを取得することができる。
【００６５】
セットは、他のセットを含むこともできる。例えば、製品のアプリケーションパッケージソフトは、製品ごとにセットを定義し、製品の各セットを含むアプリケーションパッケージソフトを表すセットを作成することができる。各製品を起動させるためにアプリケーションパッケージソフトによって使用されるユーティリティプログラムプロセスは、アプリケーションパッケージソフトのセットの直接のメンバであり得るが、必ずしも個々の製品のセットの直接のメンバである必要はない。
【００６６】
セットは、リソースの消費の一時停止、終了、制御／監査、リソースの仮想化、メンバシップのクエリ、メンバの追加／削除、固有のプロパティのクエリ／設定、セットタイプのクエリ／設定など、そのすべてのメンバに対する一括のアクションを可能にする。オペレーティングシステムおよび他の構成要素は、セットに対して行う他のアクションを定義することができる。
【００６７】
セットは継承属性を可能にし、親によって作成された任意のランタイムオブジェクトは、継承が実行可能な状態で親オブジェクトのセットに自動的に加わる。別の継承属性は、セットのメンバシップが作業項目の期間中にクライアント−サーバモデルの通信ネットワークを介して伝搬できるようにする。例えば、クライアントプログラムプロセスは、ある作業項目を実行するためにサーバプロセスと連絡をとる。次いで要求を受信し、処理するサーバスレッドは、作業が終了するまでクライアントコンテキストの継承のセットに一時的に加わる。
【００６８】
セット内の各メンバは、メンバがどのようにしてセットに加わったかの指示を有する。指示は、例えば子作成継承、作業項目継承、または明示的なメンバシップなどを含む。子作成継承は、親オブジェクトが子オブジェクトを作成するときに継承属性によりセットに加わるメンバを表す。作業項目継承は、ランタイムオブジェクトが別のランタイムオブジェクトの代わりに作業を行っていることを意味する。明示的なメンバシップは、ユーザまたはプログラムがランタイムオブジェクトをセットに手動で追加したことを示す。特殊なセットタイプは、特定の必要性にカスタム指示を指定することができる。
【００６９】
オペレーティングシステムは、適切なエンティティのみがセットに対するアクセスを行うことができるように、ＡＣＬを介してセットのセキュリティを制御することもできる。
【００７０】
（セットを使用したアプリケーションのランタイム識別）
セットは、アプリケーションに属するすべてのランタイムオブジェクト、およびアプリケーションの代わりに作業を行うランタイムオブジェクトを識別するための便利な方法を提供する。システムは、アプリケーションセットタイプを作成し、固有のプロパティをアプリケーションＩＤ値として設定する。
【００７１】
アプリケーションが起動されたとき、オペレーティングシステムは、アプリケーションイメージのアプリケーションＩＤを取り出し、固有のプロパティとしてアプリケーションＩＤを有するアプリケーションセットを開くか、作成する。オペレーティングシステムは、プロセスオブジェクトなど、新しく作成されたランタイムオブジェクトをアプリケーションセットに追加する。アプリケーションセットは、この場合、メンバがアプリケーションの起動を介してセットに加わったことを示すための特殊な指示を有し得る。新しいランタイムオブジェクトは、必要に応じてその親のセットを継承する。
【００７２】
どのランタイムオブジェクトがアプリケーションに属しているかを決定したい構成要素は、目的のアプリケーションＩＤを備えるアプリケーションセットを開き、そのメンバについてクエリを行う。呼出側は、継承または明示という指示の間でメンバを区別することを選択することができる。逆に構成要素は、ランタイムオブジェクトがどのアプリケーションとして稼働しているかを決定することができる。呼出側は、ランタイムオブジェクトのセットのメンバシップについてクエリを行い、アプリケーションセットタイプについてフィルタにかける。構成要素は、参加指示を介してセットのメンバシップをさらに区別することができる。
【００７３】
（アプリケーションＩＤでのアプリケーションのファイルの識別）
アプリケーションは一般に、実行ファイル、ダイナミックリンクライブラリ（ＤＬＬ）、およびリソースなどのファイルから特定のコンピュータ実行可能命令を起動させるため、アプリケーションに属するファイルの識別は重要な役割を果たす。どのファイルがそれに属しているかをアプリケーションが宣言しないとき、アプリケーションのファイルを識別するために、オペレーティングシステムは、アプリケーションによって実行されたファイルの作成を追跡し、こうしたファイルをアプリケーションに関連付けることができる。
【００７４】
アプリケーションのファイルを見つけ出す１つの手段は、ファイルシステムフィルタドライバによるアプリケーションファイルの作成の監視を伴う。例えば、アプリケーションインストールプロセスが始まると、オペレーティングシステムは、アプリケーションの適切なアプリケーションＩＤを決定し、関連するアプリケーションセットにプロセスを追加する。アプリケーションセットの任意のランタイムオブジェクトメンバがファイルを作成すると、オペレーティングシステムは、そのファイルから始まるその後のランタイムオブジェクトもアプリケーションセットに加わるように、ファイルをアプリケーションに関連付ける。
【００７５】
本発明は、アプリケーションによって作成されたユーザファイルとアプリケーションによって作成されたアプリケーションファイルとの間を区別する。例えば、文書処理アプリケーションは、実行に必要なアプリケーションファイルをインストールする。さらに、同じ文書処理アプリケーションは、ユーザの代わりに文書ファイルを作成する。オペレーティングシステムは、ユーザの文書ファイルはバックアップすべきであるが、アプリケーションのファイルはバックアップする必要のないバックアップなどのサービスを提供することができる。逆にユーザは、アプリケーションのアンインストールまたはアプリケーションリソースの仮想化のように、ユーザの文書ファイルが一部のオペレーティングシステムサービスによってスキップされることを望むかもしれない。
【００７６】
最終的にアプリケーションは、どのファイルの作成がユーザの代わりに行われるのが最適であるかがわかる。したがってアプリケーションは、システムに、特定のファイルの作成がユーザファイルのためのものであることを示すことができる。他のすべてのファイル作成は、アプリケーションファイルとして扱われる。
【００７７】
アプリケーションの協力なしに、オペレーティングシステムは、アプリケーションのインストールを監視し、かつ／またはオペレーティングシステムがアプリケーションファイルとして扱うランタイムオブジェクトを更新することによって、ユーザファイルとアプリケーションファイルとの間を区別しようと試みる。アプリケーションによって行われる他のファイルの作成は、ユーザファイルとして扱われる。他の考え得る識別メタデータには、それだけには限定されないが、ファイル拡張子、コードモジュールヘッダーの存在、およびファイルシステムパスなどがある。
【００７８】
（システム構成要素および関連のリソースの識別）
構成要素はしばしば、特定のランタイムオブジェクトがオペレーティングシステムに属しているかどうか、およびどのリソースがオペレーティングシステムによって作成されたかを決定する必要がある。例えば、オペレーティングシステムは、オペレーティングシステム構成要素によるアクセスについて制限する必要がある特定のリソースを有している。アプリケーションがこうしたリソースにアクセスできないようにすべきである。
【００７９】
オペレーティングシステムに属するリソースを決定するために、オペレーティングシステムは、そのリソースの所有権をマニフェストで明示的に宣言し、オペレーティングシステムに属するリソースの識別情報を関連付けデータベースに事前に投入し、そのリソースに直接署名し、そのリソースを保護された場所に格納し、またはオペレーティングシステムリソースインストーラによって実行されたリソースの作成を監視することができる。オペレーティングシステムインストーラを監視するための他の技術も含まれる。
【００８０】
オペレーティングシステムのアプリケーションＩＤは、アプリケーションが取得する以上のアクセス権を付与することもあるので、オペレーティングシステムアプリケーションＩＤは保護される。一実施形態では、オペレーティングシステムを示すために使用されるアプリケーションＩＤは、特権のあるオペレーティングシステム構成要素のみによる割り当てのために確保され、制限される。
【００８１】
オペレーティングシステムは、オペレーティングシステムの構成要素間をさらに区別することを望む可能性がある。この粒度は、オペレーティングシステムが個々の構成要素を他のオペレーティングシステム構成要素から保護できるようにする。
【００８２】
（機能ベースのセキュリティ）
ランタイムアプリケーションＩＤを備え、どのファイルがアプリケーションに属するかを認識することによって、システムは、アプリケーションＩＤに基づいてオブジェクトを保護しようと試みることができる。システムは、オブジェクトを保護するために、ユーザＩＤに加えてアプリケーションＩＤを使用することができる。
【００８３】
例えばアプリケーションは、その一時ファイルへのアクセスをそれ自体に制限したいと決定することができる。したがってアプリケーションは、そのアプリケーションのみがそのファイルにアクセスできるように、そのファイルにセキュリティを設定する。異なるアプリケーションが元のアプリケーションの一時ファイルを開こうとすると、システムは要求を拒否する。
【００８４】
別の例では、財務アプリケーションは、ユーザの財務文書へのアクセスを、そのユーザのみ、またそのアプリケーションに限定すべきであることを決定することができる。このように、ユーザのコンテキストで稼働しているウィルスプログラムには、ユーザの財務文書へのアクセス権がない。他の財務アプリケーションがユーザの財務文書にアクセスする必要がある場合、元の財務アプリケーションは、特定のアプリケーション、または財務アプリケーションＩＤのグループにアクセス権を明示的に付与することができる。
【００８５】
さらに別の例では、システムは、アプリケーションが行うアクション（ユーザの個人文書へのアクセスやネットワークへのアクセスなど）をユーザおよびアプリケーション発行元が定義できるようにする。アクションを監視する、またはアクションを行うシステム構成要素は、その機能へのアクセス権がアプリケーションに付与されているかどうかをチェックする。アプリケーションがアクセス権のないアクションを行おうと試みると、システムは適切に応答する。システムは、試行されたアクションを拒否する、またはユーザに試行を通知し、アプリケーションにその機能へのアクセス権を付与すべきかどうかを確認する。
【００８６】
一実施形態では、ユーザは、アプリケーション機能を指定するのにどのアプリケーション発行元を信頼すべきかを定義する。したがって悪質なプログラムは、信頼のあるアプリケーション発行元を有している見込みがなく、したがってユーザは、アプリケーション発行元が信頼できない、または未知であるためにアプリケーションの一部のアクション要求を拒否する。
【００８７】
本発明のシステムは、既存のセキュリティシステムを、ユーザレベルの粒度（ＡＣＬごとなど）を超えて、本発明のシステムが実施する、ユーザがより理解できるアプリケーションアクションのシステムに拡張することを試みる。
【００８８】
（アーキテクチャ例）
次に図８を参照すると、ブロック図の例は、システムリソースを保護する機構との関連でアプリケーションＩＤサービスのアーキテクチャを示している。図８のアーキテクチャは、単にＩＤ情報のアプリケーションの一例にすぎない。ＩＤ情報の他のアーキテクチャおよび他のアプリケーションは、本発明の範囲内に含まれるものとする。
【００８９】
図８では、クライアントサーバランタイムプロセスは、ＣｒｅａｔｅＰｒｏｃｅｓｓ（）中にＩＤを決定し、それを各モジュールに割り当てる。決定され割り当てられたＩＤを使用して、ファイルおよびシステム設定の軽減を行い、オペレーティングシステムリソースを保護する。構成要素ストアまたは他のメモリエリアは、明示されていないアプリケーションの自動的に生成されたアプリケーションＩＤ、およびすべてのタイプのプロセスの分離ＩＤを格納する。分離生成ルールおよび分離ポリシーは、１組の基準に基づいたアプリケーション識別子のより大きいグループへの整合性のある分類を可能にする。ファイルタグ付けサービスは、アプリケーションＩＤおよび分離ＩＤを、プロセスによって作成されたファイルごとにファイルストリーム内に格納する。システム設定の軽減およびファイルの軽減では、個別の仮想環境を作成し、処理された変更にマーク付けを行うためにアプリケーションＩＤおよび分離ＩＤを使用する。
【００９０】
（動作環境例）
図９は、汎用コンピューティング装置の一例をコンピュータ１３０の形で示している。本発明の一例では、コンピュータ１３０などのコンピュータは、本明細書に示し、記載した他の図での使用に適している。コンピュータ１３０は、１つまたは複数のプロセッサまたは処理ユニット１３２およびシステムメモリ１３４を有している。示した実施形態では、システムバス１３６は、システムメモリ１３４を含む様々なシステム構成要素をプロセッサ１３２に結合する。バス１３６は、様々なバスアーキテクチャのうちの任意のものを使用するメモリバスまたはメモリコントローラ、周辺バス、高速グラフィックスポート（ａｃｃｅｌｅｒａｔｅｄ  ｇｒａｐｈｉｃｓ  ｐｏｒｔ）、およびプロセッサまたはローカルバスを含む任意のいくつかのタイプのバス構造のうちの１つまたは複数を表す。こうしたアーキテクチャには、それだけには限定されないが一例として、業界標準アーキテクチャ（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ビデオ電子装置規格化協会（ＶＥＳＡ）ローカルバス、およびメザニンバスとしても知られている周辺部品相互接続（ＰＣＩ）バスなどがある。
【００９１】
コンピュータ１３０は一般に、少なくとも何らかの形式のコンピュータ可読媒体を有する。コンピュータ可読媒体は、揮発性媒体および不揮発性媒体、脱着式媒体および固定式媒体を含み、コンピュータ１３０によってアクセスできる使用可能な任意の媒体でよい。コンピュータ可読媒体は、それだけには限定されないが一例として、コンピュータ記憶媒体および通信媒体を含む。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、他のデータなど、情報を記憶するための任意の方法または技術で実施される揮発性および不揮発性の脱着式および固定式媒体がある。例えば、コンピュータ記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶装置、または所望の情報の格納に使用でき、コンピュータ１３０からアクセスできる他の任意の媒体などがある。通信媒体は一般に、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを搬送波または他の移送機構などの変調されたデータ信号に組み込む。これには任意の情報配送媒体がある。当分野の技術者は、信号に情報を符号化するように１つまたは複数のその特性が設定または変更された、変調されたデータ信号に精通している。有線ネットワーク、直接配線された接続などの有線媒体、および音響、ＲＦ、赤外線、その他の無線媒体などの無線媒体が通信媒体の例である。また、上記のどんな組合せでもコンピュータ可読媒体の範囲内に含まれる。
【００９２】
システムメモリ１３４は、コンピュータ記憶媒体を脱着式および／または固定式、揮発性および／または不揮発性メモリの形で含む。示した実施形態では、システムメモリ１３４は、読み取り専用メモリ（ＲＯＭ）１３８およびランダムアクセスメモリ（ＲＡＭ）１４０を含む。基本入出力システム１４２（ＢＩＯＳ）は、例えば起動中など、コンピュータ１３０内の要素間での情報の転送を助ける基本ルーチンを含み、一般にＲＯＭ１３８に格納されている。ＲＡＭ１４０は一般に、処理ユニット１３２から直接アクセス可能な、かつ／または処理ユニット１３２が現在処理しているデータおよび／またはプログラムモジュールを含む。図９は、それだけには限定されないが一例として、オペレーティングシステム１４４、アプリケーションプログラム１４６、他のプログラムモジュール１４８、およびプログラムデータ１５０を示している。
【００９３】
コンピュータ１３０は、他の脱着式／固定式、揮発性／不揮発性コンピュータ記憶媒体を含むこともできる。例えば図９は、固定式不揮発性磁気媒体から読み取り、あるいはそこに書き込むハードディスクドライブ１５４を示している。また図９は、脱着式不揮発性磁気ディスク１５８から読み取り、あるいはそこに書き込む磁気ディスクドライブ１５６、およびＣＤ−ＲＯＭや他の光媒体など、脱着式不揮発性光ディスク１６２から読み取り、あるいはそこに書き込む光ディスクドライブ１６０を示している。動作環境の例で使用できる他の脱着式／固定式、揮発性／不揮発性コンピュータ記憶媒体には、それだけには限定されないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、半導体ＲＡＭ、半導体ＲＯＭなどがある。ハードディスクドライブ１５４、磁気ディスクドライブ１５６、および光ディスクドライブ１６０は一般に、インターフェイス１６６などの不揮発性メモリインターフェイスによってシステムバス１３６に接続されている。
【００９４】
上述し、図９で示したドライブまたは他の大容量記憶装置およびその関連のコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびコンピュータ１３０の他のデータのストレージを提供する。図９では例えば、ハードディスクドライブ１５４は、オペレーティングシステム１７０、アプリケーションプログラム１７２、他のプログラムモジュール１７４、およびプログラムデータ１７６を格納するものとして示されている。これらの構成要素は、オペレーティングシステム１４４、アプリケーションプログラム１４６、他のプログラムモジュール１４８、およびプログラムデータ１５０と同じであっても、異なっていてもよいことに留意されたい。オペレーティングシステム１７０、アプリケーションプログラム１７２、他のプログラムモジュール１７４、およびプログラムデータ１７６は少なくとも異なるコピーであることを示すために、ここではそれらに異なる番号を付している。
【００９５】
ユーザは、キーボード１８０やポインティング装置１８２（マウス、トラックボール、ペン、タッチパッド）などの入力装置またはユーザインターフェイス選択装置を介してコマンドおよび情報をコンピュータ１３０に入力することができる。他の入力装置（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、スキャナなどがある。これらおよび他の入力装置は、システムバス１３６に結合されているユーザ入力インターフェイス１８４を介して処理ユニット１３２に接続されるが、パラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）など他のインターフェイスおよびバス構造で接続してもよい。モニタ１８８または他のタイプの表示装置もまた、ビデオインターフェイス１９０などのインターフェイスを介してシステムバス１３６に接続される。モニタ１８８に加えて、コンピュータはしばしば、出力周辺インターフェイス（図示せず）を介して接続できるプリンタ、スピーカなどの他の周辺出力装置（図示せず）を含んでいる。
【００９６】
コンピュータ１３０は、リモートコンピュータ１９４など１つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク式環境で動作することができる。リモートコンピュータ１９４は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア装置、または他の一般のネットワークノードでよく、一般にコンピュータ１３０に関連して上述した多くまたはすべての要素を含む。図９に示した論理接続は、ローカルエリアネットワーク（ＬＡＮ）１９６および広域ネットワーク（ＷＡＮ）１９８を含むが、他のネットワークを含んでいてもよい。ＬＡＮ１３６および／またはＷＡＮ１３８は、有線ネットワーク、無線ネットワーク、その組合せなどとすることができる。こうしたネットワーキング環境は、オフィス、全社規模のコンピュータネットワーク、イントラネット、およびグローバルコンピュータネットワーク（インターネットなど）ではごく一般的である。
【００９７】
ローカルエリアネットワーキング環境で使用する場合、コンピュータ１３０は、ネットワークインターフェイスまたはアダプタ１８６を介してＬＡＮ１９６に接続される。広域ネットワーキング環境で使用する場合、コンピュータ１３０は一般に、モデム１７８、またはインターネットなどＷＡＮ１９８を介して通信を確立する他の手段を含む。モデム１７８は、内蔵のものでも外付けのものでもよく、ユーザ入力インターフェイス１８４または他の適切な機構を介してシステムバス１３６に接続される。ネットワーク式環境では、コンピュータ１３０に関連して示したプログラムモジュール、またはその一部をリモートメモリ記憶装置（図示せず）に格納することができる。図９は、それだけには限定されないが一例として、リモートアプリケーションプログラム１９２をメモリ装置上に存在するものとして示している。図示したネットワーク接続は例であり、コンピュータ間の通信リンクを確立する他の手段を使用してもよい。
【００９８】
一般にコンピュータ１３０のデータプロセッサは、様々なときにコンピュータの様々なコンピュータ可読記憶媒体に格納された命令によってプログラムされる。プログラムおよびオペレーティングシステムは一般に、フロッピー（登録商標）ディスクやＣＤ−ＲＯＭなどで配布される。プログラムおよびオペレーティングシステムは、そこからコンピュータの２次的メモリにインストールまたはロードされる。実行時、それらは、少なくとも部分的にコンピュータの１次電子メモリにロードされる。これらおよび他の様々なタイプのコンピュータ可読媒体がマイクロプロセッサまたは他のデータプロセッサとともに以下に記載したステップを実施する命令またはプログラムを含んでいる場合、本明細書に記載した本発明はこうした媒体を含んでいる。また、本明細書に記載した方法および技術にしたがってプログラムされている場合、本発明は、コンピュータ自体も含んでいる。
【００９９】
例示のために、プログラムおよびオペレーティングシステムなどの他の実行可能プログラム構成要素は、本明細書では個別のブロックとして示している。しかし、こうしたプログラムおよび構成要素は、様々なときにコンピュータの様々な記憶構成要素に存在し、コンピュータのデータプロセッサによって実行されることを理解されたい。
【０１００】
本発明をコンピュータ１３０を含むコンピューティングシステム環境例との関連で説明しているが、本発明は、他の多数の汎用または専用コンピューティングシステム環境または構成で動作可能である。コンピューティングシステム環境は、本発明の使用または機能の範囲に関して限定を示唆するものではない。さらに、コンピューティングシステム環境を、動作環境の例に示した構成要素のいずれか１つ、またはその組合せに関連する任意の依存性または必要条件を有しているものと解釈すべきではない。本発明との使用に適したよく知られているコンピューティングシステム、環境、および／または構成の例には、それだけには限定されないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップ装置、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能家庭用電化製品、携帯電話、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記の任意のシステムまたは装置を含む分散コンピューティング環境などがある。
【０１０１】
本発明は、１つまたは複数のコンピュータ、または他の装置によって実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的な文脈で説明することができる。一般にプログラムモジュールは、それだけには限定されないが、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、構成要素、データ構造などを含む。また、本発明は、タスクが通信ネットワークによってリンクされているリモート処理装置によって実行される分散コンピューティング環境でも実施することができる。分散コンピューティング環境では、プログラムモジュールを、メモリ記憶装置を含むローカルおよびリモートのコンピュータ記憶媒体に置くことができる。
【０１０２】
ソフトウェアアーキテクチャの文脈において、インターフェイスは、ソフトウェアモジュール、構成要素、コード部分、またはコンピュータ実行可能命令の他のシーケンスを含む。インターフェイスは、例えば、第１のモジュールの代わりにコンピューティングタスクを実行する第２のモジュールにアクセスする第１のモジュールを含む。第１および第２のモジュールは、一例では、例えばオペレーティングシステムによって提供されるアプリケーションプログラミングインターフェイス（ＡＰＩ）、構成要素オブジェクトモデル（ＣＯＭ）インターフェイス（ピアツーピアアプリケーション通信など）、および拡張可能マークアップ言語メタデータ交換フォーマット（ＸＭＩ）インターフェイス（Ｗｅｂサービス間の通信用など）を含む。
【０１０３】
インターフェイスは、例えばＪａｖａ（登録商標）２  Ｐｌａｔｆｏｒｍ  Ｅｎｔｅｒｐｒｉｓｅ  Ｅｄｉｔｉｏｎ（Ｊ２ＥＥ）、ＣＯＭ、または分散ＣＯＭ（ＤＣＯＭ）の例における密結合された同期実装とすることができる。あるいは、またはそれに加えて、インターフェイスは、（例えば簡易オブジェクトアクセスプロトコルを使用した）Ｗｅｂサービスなどにおける疎結合された非同期実装とすることができる。一般にインターフェイスは、密結合、疎結合の同期および非同期の特徴のうちの任意の組合せを含む。さらにインターフェイスは、標準プロトコル、専用プロトコル、または標準および専用のプロトコルの任意の組合せに従うことができる。
【０１０４】
本明細書で記載したインターフェイスはすべて単一のインターフェイスの一部であり、または個別のインターフェイス、またはその任意の組合せとして実装することができる。インターフェイスは、ローカルまたはリモートに実行して機能を提供することができる。さらに、インターフェイスが含んでいる機能は、本明細書に示した、または記載したものより多くても、または少なくてもよい。
【０１０５】
動作中、コンピュータ１３０は、図に示したものなど、アプリケーションＩＤおよび分離ＩＤを決定し、割り当てるためのコンピュータ実行可能命令を実行して、コンピューティングシステム上の複数のアプリケーションの管理を可能にする。
【０１０６】
本明細書に示し、記載した方法の実行または実施の順序は、特に明記しない限り必須ではない。つまり方法の要素は、特に明記しない限り任意の順序で行うことができ、方法が含んでいる要素は、本明細書に開示したものより多くても、少なくてもよい。
【０１０７】
上記を考慮すると、本発明のいくつかの目的が達成され、他の有利な結果が得られることがわかる。
【０１０８】
本発明の範囲から逸脱することなく様々な変更を上記の構成、製品、および方法に加えることができるので、上記の説明に含まれ、添付の図面に示したすべての事柄は、例として解釈されるものとし、限定の意味で解釈されるものではない。
【図面の簡単な説明】
【０１０９】
【図１】異なるソースからアプリケーションに関するメタデータを取得することによるアプリケーションＩＤの生成を示すフロー図例である。
【図２】分離ＩＤを示すブロック図例である。
【図３】アプリケーションＩＤおよび分離ＩＤの生成を示すフロー図例である。
【図４】アプリケーションのメタデータの構成要素からのアプリケーションプログラムに関連付けられているファイルまたは他のリソースのＩＤコンテキストの生成を示すブロック図例である。
【図５】新しいファイル生成中のＩＤコンテキストの伝搬を示すブロック図例である。
【図６】プロセス作成中のＩＤ情報のリビジョンを示すブロック図例である。
【図７】ＩＤ情報のリビジョンを示すフロー図例である。
【図８】アプリケーションＩＤサービスのアーキテクチャを示すブロック図例である。
【図９】本発明を実施するのに適したコンピューティングシステム環境の一例を示すブロック図である。
【符号の説明】
【０１１０】
２０２  オペレーティングシステム
２０４  ＩｓｏＩＤ１用のファイルＡのコピー
２０６  ＩｓｏＩＤ２用のファイルＡのコピー
１３２  処理ユニット
１３４  システムメモリ
１３６  システムバス
１４４  オペレーティングシステム
１４６  アプリケーションプログラム
１４８  他のプログラムモジュール
１５０  プログラムデータ
１６６  不揮発性メモリインターフェイス
１７０  オペレーティングシステム
１７２  アプリケーションプログラム
１７４  他のプログラムモジュール
１７６  プログラムデータ
１８４  ユーザ入力インターフェイス
１８６  ネットワークインターフェイス
１９０  ビデオインターフェイス
１９２  リモートアプリケーションプログラム
１９６  ローカルエリアネットワーク
１９８  広域ネットワーク
【図１】
2005129063.tif 000003
【図２】
2005129063.tif 000004
【図３】
2005129063.tif 000005
【図４】
2005129063.tif 000006
【図５】
2005129063.tif 000007
【図６】
2005129063.tif 000008
【図７】
2005129063.tif 000009
【図８】
2005129063.tif 000010
【図９】
2005129063.tif 000011