(57)【要約】実行時中にアプリケーションプログラム（１３６、２３２）によって使用されるコンポーネントおよびアセンブリ（１０、２０、３０、７０、８０、９０）にセキュリティを提供するためのシステムおよび方法を提供する。アセンブリ（１０、２０、３０、７０、８０、９０）が、アプリケーションプログラム（１３６、２３２）によって記述されるバージョニング規則を実施するのに使用することができるバージョン情報を担持する。実行時に、アプリケーションプログラム（１３６、２３２）によって要求されたバージョン番号が、実際に見出されるアセンブリ（１０、２０、３０、７０、８０、９０）のバージョン番号と比較される。バージョン番号を比較することに加えて、本発明は、暗号ハッシュに基づいてより厳密な形態のバージョン検査を提供する。アセンブリ（１０、２０、３０、７０、８０、９０）が、そのアセンブリ（１０、２０、３０、７０、８０、９０）を構成するファイルのリストを含むモジュール情報を備える。各モジュール（１４、４５、５０、９６、９８）に関して記録された情報の一部は、マニフェストが構築された時点におけるモジュールの内容のハッシュである。別のアセンブリ（８０、９０）を参照するアセンブリ（７０）が、その参照されるアセンブリ（８０、９０）のマニフェスト（８２、９４）のハッシュを計算する。アセンブリマニフェスト（８２、９４）は、アセンブリが依存する、または参照する他のアセンブリに関する情報である依存関係情報を含むことが可能である。
2004513412.tif 000002
【特許請求の範囲】
【請求項１】
実行時中にアプリケーションプログラムによって使用されることが可能なアセンブリの完全性を助長するための方法であって、
アセンブリに該アセンブリを構成する複数のモジュールのリストを含むマニフェストを提供するステップと、
前記マニフェストに前記複数のモジュールのリストのうちの少なくとも１つのモジュールの内容のハッシュを提供するステップと
を含むことを特徴とする方法。
【請求項２】
前記マニフェストに前記複数のモジュールのリストのうちの少なくとも１つのモジュールの内容のハッシュを提供するステップは、前記マニフェストに前記アセンブリを構成する複数のモジュールのリストの各モジュールのハッシュを提供するステップを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記アセンブリのマニフェストの中で識別情報を提供するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記識別情報が、発行元情報およびバージョン情報を含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記アセンブリの終りで前記アセンブリの内容のハッシュを提供するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記複数のモジュールのリストのうちの少なくとも１つのモジュールの内容の実際のハッシュを決定し、前記実際のハッシュを前記アセンブリのマニフェストの中に常駐する前記複数のモジュールのリストのうちの少なくとも１つのモジュールの内容のハッシュと比較することにより、前記アセンブリの内容が変更されているかどうかを判定するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記アセンブリが変更されている場合、前記アセンブリの発行元が信頼できるかどうかを判定するステップをさらに含むことを特徴とする請求項６に記載の方法。
【請求項８】
前記アセンブリが変更されている場合、前記アセンブリの発行元が信頼できるかどうかを判定するステップが、前記アセンブリのマニフェストの中に常駐するバージョン情報および発行元名情報をチェックするステップを含むことを特徴とする請求項７に記載の方法。
【請求項９】
前記マニフェストに前記アセンブリが依存する少なくとも１つの他のアセンブリのマニフェストのハッシュを提供するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項１０】
実行時中にアプリケーションプログラムによって使用されることが可能なアセンブリの完全性を助長するための方法であって、
少なくとも１つのアセンブリに、該アセンブリが依存する複数の参照のアセンブリのリストを含むマニフェストを提供するステップと、
前記複数の参照のアセンブリのリストの中の少なくとも１つの参照のアセンブリのマニフェストのハッシュを該マニフェストに提供するステップと
を含むことを特徴とする方法。
【請求項１１】
前記複数の参照のアセンブリのリストの中の少なくとも１つの参照のアセンブリのマニフェストのハッシュを該マニフェストに提供するステップは、前記複数の参照のアセンブリのリストの中の各々の参照のアセンブリのハッシュを提供するステップを含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記アセンブリの前記マニフェストの中で識別情報を提供するステップをさらに含むことを特徴とする請求項１０に記載の方法。
【請求項１３】
前記識別情報が、発行元情報およびバージョン情報を含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記アセンブリの終りで前記アセンブリの内容のハッシュを提供するステップをさらに含むことを特徴とする請求項１０に記載の方法。
【請求項１５】
前記複数の参照のアセンブリのリストの中の少なくとも１つの参照のアセンブリの内容の実際のハッシュを決定し、前記実際のハッシュと前記アセンブリのマニフェストの中に常駐する複数の参照のアセンブリのリストの中の少なくとも１つの参照のアセンブリの内容のハッシュとを比較することにより、前記少なくとも１つの参照のアセンブリの内容が変更されているかどうかを判定するステップをさらに含むことを特徴とする請求項１０に記載の方法。
【請求項１６】
前記少なくとも１つの参照のアセンブリが変更されている場合、前記少なくとも１つの参照のアセンブリの発行元が信頼できるかどうかを判定するステップをさらに含むことを特徴とする請求項１５に記載の方法。
【請求項１７】
前記少なくとも１つの参照のアセンブリが変更されている場合、前記少なくとも１つの参照されるアセンブリの発行元が信頼できるかどうかを判定する前記ステップが、前記少なくとも１つの参照されるアセンブリのマニフェストの中に常駐するバージョン情報および発行元名情報を検査するステップを含むことを特徴とする請求項１６に記載の方法。
【請求項１８】
実行時にアプリケーションプログラムによって使用されることが可能な少なくとも１つのコンピュータ実行可能コンポーネントを有するコンピュータ可読媒体であって、
アセンブリを含んでおり、該アセンブリはマニフェストを含み、該マニフェストは前記アセンブリを構成する複数のモジュールのリストおよび前記複数のモジュールの中の少なくとも１つのアセンブリの内容のハッシュを含み、および前記複数のモジュールは前記アセンブリを構成することを特徴とするコンピュータ可読媒体。
【請求項１９】
前記マニフェストが、少なくとも１つの参照のアセンブリのリスト、および前記少なくとも１つの参照のアセンブリのマニフェストのハッシュを含むことを特徴とする請求項１８に記載のコンピュータ可読媒体。
【請求項２０】
前記マニフェストが、識別情報およびバージョン情報を含むことを特徴とする請求項１９に記載のコンピュータ可読媒体。
【請求項２１】
前記アセンブリが、ダイナミックリンクライブラリ（ｄｙｎａｍｉｃａｌｌｙ ｌｉｎｋｅｄ ｌｉｂｒａｒｙ）であることを特徴とする請求項１９に記載のコンピュータ可読媒体。
【請求項２２】
実行時にアプリケーションプログラムによって使用されることが可能な少なくとも１つのコンピュータ実行可能コンポーネントを有するコンピュータ可読媒体であって、
アセンブリを含んでおり、該アセンブリはマニフェストを含み、該マニフェストは少なくとも１つの参照のアセンブリのリストおよび前記少なくとも１つの参照のアセンブリのマニフェストの内容のハッシュを含み、前記参照のアセンブリは前記アセンブリが参照することを特徴とするコンピュータ可読媒体。
【請求項２３】
実行時にアプリケーションプログラムによって使用されることが可能なアセンブリの完全性を助長するためのシステムであって、
アセンブリを構成する複数のモジュールのリストを有する、前記アセンブリに関するマニフェストを提供するように適合された第１のコンポーネントと、
前記マニフェストに、前記複数のモジュールのリストのうちの少なくとも１つのモジュールのハッシュを提供するように適合された第２のコンポーネントと
を含むことを特徴とするシステム。
【請求項２４】
前記少なくとも１つのモジュールのハッシュを前記少なくとも１つのモジュールの実際のハッシュ値と比較するように適合された第３のコンポーネントをさらに含むことを特徴とする請求項２３に記載のシステム。
【請求項２５】
前記マニフェストが、識別情報およびバージョン情報を含み、前記マニフェストの中の少なくとも１つのモジュールのハッシュと前記少なくとも１つのモジュールの実際のハッシュ値が異なる場合、前記第３のコンポーネントが、オリジネータ（ｏｒｉｇｉｎａｔｏｒ）情報およびバージョン情報の検討に基づき、前記アセンブリが実行されるべきかどうかを判定するように適合されていることを特徴とする請求項２４に記載のシステム。
【請求項２６】
同一の名前を有する別のアセンブリが、システム上に常駐する場合、アプリケーションプログラムが実行するアセンブリのバージョンを決定するための結合ポリシー情報を提供するように適合された結合コンポーネントをさらに含むことを特徴とする請求項２３に記載のシステム。
【請求項２７】
実行時にアプリケーションプログラムによって使用されることが可能なアセンブリの完全性を助長するためのシステムであって、
少なくとも１つの参照のアセンブリを有する、アセンブリに関するマニフェストを提供するように適合された第１のコンポーネントと、
前記マニフェストに、前記少なくとも１つの参照のアセンブリのハッシュを提供するように適合された第２のコンポーネントとを含むことを特徴とするシステム。
【請求項２８】
前記マニフェストの中の少なくとも１つの参照されるアセンブリのハッシュを前記少なくとも１つの参照のアセンブリの実際のハッシュ値と比較するように適合された第３のコンポーネントをさらに含むことを特徴とする請求項２７に記載のシステム。
【請求項２９】
前記第３のコンポーネントに結合ポリシー情報を提供するように適合された結合コンポーネントをさらに含むことを特徴とする請求項２７に記載のシステム。
【請求項３０】
実行時にアプリケーションプログラムによって使用されることが可能なアセンブリの完全性を助長するためのシステムであって、
少なくとも１つの関連するアセンブリのリストを有するマニフェストをアセンブリに関連させるための手段と、
前記マニフェストに前記少なくとも１つの関連するアセンブリのハッシュを提供するための手段とを含むことを特徴とするシステム。
【請求項３１】
前記少なくとも１つの関連するアセンブリが、モジュールであることを特徴とする請求項３０に記載のシステム。
【請求項３２】
前記少なくとも１つの関連するアセンブリが、参照のアセンブリであることを特徴とする請求項３０に記載のシステム。
【請求項３３】
前記マニフェストの中の少なくとも１つの関連するアセンブリのハッシュ値を前記少なくとも１つの関連するアセンブリの実際のハッシュ値と比較するための手段をさらに含むことを特徴とする請求項３０に記載のシステム。
【請求項３４】
結合ポリシーを確立するための手段をさらに含むことを特徴とする請求項３０に記載のシステム。
【請求項３５】
前記アセンブリおよび前記少なくとも１つの関連するアセンブリの少なくともどちらかが、ダイナミックリンクライブラリであることを特徴とする請求項３０に記載のシステム。
【発明の詳細な説明】
【０００１】
（技術分野）
本発明は、コンピュータシステムに関し、より詳細には、実行時にアプリケーションプログラムによって使用されるコンポーネントの完全性を確保するためのシステムおよび方法に関する。
【０００２】
（背景技術）
過去には、アプリケーションプログラムは、単一の一体構造の２進ファイルから成っていた。コンパイラがアプリケーションプログラムを生成した後、アプリケーションプログラムは、次のバージョンが再コンパイルされて、発送されるまで変更されなかった。オペレーティングシステム、ハードウェア、および市場の需要の変化は、次のバージョンが実施され、再コンパイルされるのを待つことに依存していた。今日、アプリケーションプログラムは、いくつかのコンポーネントから成り、さらに、これらのコンポーネントの多くは、実行時にリンクされる。これらのコンポーネントには、動的にリンクされたライブラリ（ＤＬＬ）、および様々なアプリケーションプログラムによって共用されるその他のファイルが含まれる。これらのＤＬＬは、実行時にリンクされるべきアプリケーションコンポーネントの中のテーブル内にリストされる。オペレーティングシステムは、ローダ探索パス、アプリケーションディレクトリ、オペレーティングシステムディレクトリ、またはユーザ指定パスの中でダイナミックリンクライブラリの名前を探索し、実行のためにそのＤＬＬコードをメモリ内にロードすることが可能になるようにする。これらのＤＬＬは、異なるアプリケーションプログラムによって共用されることが可能であるため、１つのアプリケーションのためにＤＬＬに変更を加えることにより、別のアプリケーションの動作を止める可能性がある。
【０００３】
さらに、Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムなどのオペレーティングシステム上で実行される多くのアプリケーションプログラムは、共用のオペレーティングシステムコンポーネントを使用する。現行のＭｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのプラットフォームでアドミニストレータおよび開発者が直面する主要な問題の１つは、展開されたアプリケーションプログラムの一部として実行されるまさにその一組のダイナミックリンクライブラリおよびその他のファイルを制御できないことである。１つのアプリケーションプログラムをインストールすることが、その他のアプリケーションプログラムが依存するファイルに上書きすることによって、それらのアプリケーションに影響を与えてしまうことは、極めてよく起きる。残念ながら、あるアプリケーションが依存するファイルが変更されたとき、それを検出するためにＭｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムに組み込まれるサポートは、存在しない。
【０００４】
現在、アプリケーションプログラムを構築して試験するために使用されたアセンブリを追跡する手立ては、存在しない。過去には、コンポーネントを変更しても、その変更が、アプリケーションプログラムの機能性に影響を与えない場合、アプリケーションプログラムを実行することができた。例えば、コンポーネントの発行元（ｐｕｂｌｉｓｈｅｒ）が、コンポーネントの小さな誤りを訂正した場合でも、アプリケーションプログラムは、問題なく動作することができる。また、バージョンアップグレードが発行元によって行われた場合、アプリケーションプログラムは、そのコンポーネントに下位互換性がある場合、問題なくそのコンポーネントを実行することができる。しかし、発行元が、新しいバージョンが前のコンポーネントと下位互換性があると誤認していた場合、コンポーネントの発行元によるバージョンアップグレードからアプリケーションプログラムを保護する手立てはない。さらに、信頼できない第三者（ｕｎｔｒｕｓｔｅｄ ｔｈｉｒｄ ｐａｒｔｙ）によってコンポーネントが変更された場合、コードを実行することにより、アプリケーションプログラムが動作している環境のソフトウェアおよびハードウェアが損傷する可能性がある。一部のコードは、コンポーネントの名前（例えば、ｆｏｏｌ．ｄｌｌ、ｋｅｒｎｅｌ２．ｄｌｌ）でバージョン情報を含んでいる。アプリケーションプログラムは、それらのコンポーネントを名前で参照するので、名前の変更により、アプリケーションプログラムが動作を終了させられ、またはシステム上に常駐する古いバージョンのコンポーネントを使用させられる。
【０００５】
したがって、当技術分野では、実行時中にアプリケーションプログラムによって使用されるコンポーネントの完全性を確保し、検証するための方法が必要とされると共に現在は不適切である。また、実行時にコンポーネントの完全性を検証するためのツールが求められている。
【０００６】
（発明の開示）
本発明は、アプリケーションプログラムによって実行時中に使用されるコンポーネントまたはアセンブリ（例えば、メタデータを含むコンポーネント）のセキュリティを提供し、完全性を助長するシステムおよび方法に関する。本発明は、暗号技術を使用してコンポーネント間の関係を円滑にする。アドミニストレータおよび開発者は、このシステムおよび方法を利用して、一緒に試験されたまさにその一組のダイナミックリンクライブラリ（ＤＬＬ）およびその他のファイルが、実際、展開された後に一緒に実行されるのを助けることができる。アセンブリは、アプリケーションプログラムによって記述されたバージョニング規則を実施するのに使用することができるバージョン情報を担持する（ｃａｒｒｙ）。実行時に、アプリケーションプログラムによって要求されたバージョン番号が、実際に見出されるアセンブリのバージョン番号と比較される。バージョン番号を比較することに加えて、本発明は、暗号ハッシュに基づくより厳密な形態のバージョン検査も提供する。
【０００７】
各アセンブリは、そのアセンブリを構成するファイルまたはモジュールのリストを含むマニフェスト（ｍａｎｉｆｅｓｔ）を備えることができる。各ファイルに関して記録された情報の一部は、マニフェストが構築された時点におけるそのファイルの内容のハッシュである。このハッシュは、ファイルの内容全体にわたって計算される。マニフェストを発行するコードは、通常、ハッシュを計算することに責任を負う可能性のあるコンパイラまたはポストリンクツールである。本発明は、セキュアハッシュ（ｓｅｃｕｒｅｄ ｈａｓｈ）アルゴリズム（ｓｈａ−１）、ＭＤ５などの様々なハッシュアルゴリズム、またはハッシュを計算する際に暗号法として許容できる任意の他のハッシュアルゴリズムを使用することが可能である。本発明の一態様では、マニフェストの作成者が、どのハッシュアルゴリズムが使用されるのを望むかを指定することができる。ファイルハッシュは、アセンブリがグローバルアセンブリキャッシュの中にインストールされたとき、またファイルがディスクからロードされるたびに毎回、確認することが可能である。
【０００８】
前述したファイルハッシュは、展開可能なユニット（例えば、アセンブリ）の完全性を助長する。ただし、ほとんどのアプリケーションは、いくつかのアセンブリから成る。したがって、アプリケーション全体の完全性を保証するには、それぞれの個別のアセンブリが変更されていないことを確認するだけでなく、実行時にアプリケーションプログラムによって使用されるアセンブリのセットが、以前に一緒に構築されて試験されたものと同じセットであることを確認する必要がある。本発明の一態様では、別のアセンブリを参照するアセンブリが、参照される（参照の）アセンブリのマニフェストのハッシュを計算する。アセンブリマニフェストは、アセンブリが依存する、または参照する他のアセンブリに関する情報である依存関係情報を含むことが可能である。依存関係情報の一環として記憶される情報の一部は、参照される（参照の）アセンブリのマニフェストのハッシュである。参照されるアセンブリのマニフェストをハッシングするだけで十分である。というのは、そのマニフェストが、すべての構成ファイルのハッシュを含むからである。ファイルハッシュと同様に、参照されるアセンブリのマニフェスト上のハッシュも、そのマニフェストを発行するツールによって計算されることが可能である。
【０００９】
本発明の一態様によれば、実行時中にアプリケーションプログラムによって使用されることが可能なアセンブリの完全性を助長するための方法が提供される。アセンブリは、そのアセンブリを構成するモジュールのリストを含むマニフェストを備え、またマニフェストは、モジュールのリストのうちの少なくとも１つのモジュールの内容のハッシュを備える。
【００１０】
本発明の別の態様は、実行時にアプリケーションプログラムによって使用されることが可能なアセンブリの完全性を助長するための方法に関する。アセンブリは、そのアセンブリが依存する参照されるアセンブリのリストを含むマニフェストを備え、またマニフェストは、参照されるアセンブリのリストのうちの少なくとも１つの参照されるアセンブリのマニフェストのハッシュを備える。
【００１１】
本発明のさらに別の態様では、実行時にアプリケーションプログラムによって使用されることが可能な少なくとも１つのコンピュータ実行可能コンポーネントを有するコンピュータ可読媒体が提供される。このコンピュータ可読媒体は、アセンブリを構成するモジュールのリスト、およびモジュールのリストのうちの少なくとも１つのモジュールの内容のハッシュを含むマニフェストを有するアセンブリを含む。
【００１２】
本発明の別の態様は、実行時にアプリケーションプログラムによって使用されることが可能な少なくとも１つのコンピュータ実行可能コンポーネントを有するコンピュータ可読媒体に関する。このコンピュータ可読媒体は、アセンブリが依存する少なくとも１つの参照されるアセンブリのリスト、およびその少なくとも１つの参照されるアセンブリのマニフェストの内容のハッシュを含むマニフェストを有するアセンブリを含む。
【００１３】
本発明の別の態様によれば、実行時中にアプリケーションプログラムによって使用されることが可能なアセンブリの完全性を助長するためのシステムが提供される。このシステムは、アセンブリに関するマニフェストを提供するように適合された第１のコンポーネントを含む。マニフェストは、アセンブリを構成するモジュールのリストを有する。また、このシステムは、モジュールのリストのうちの少なくとも１つのモジュールのハッシュをマニフェストに提供するように適合された第２のコンポーネントも含む。
【００１４】
本発明の代替の態様では、実行時中にアプリケーションプログラムによって使用されることが可能なアセンブリの完全性を助長するためのシステムが提供される。このシステムは、アセンブリに関するマニフェストを提供するように適合された第１のコンポーネントを含む。マニフェストは、少なくとも１つの参照されるアセンブリを含む。また、システムは、その少なくとも１つの参照されるアセンブリのマニフェストのハッシュをマニフェストに提供するように適合された第２のコンポーネントも含む。
【００１５】
本発明の別の態様は、実行時中にアプリケーションプログラムによって使用されることが可能なアセンブリの完全性を助長するためのシステムに関する。このシステムは、関連するアセンブリのリストを有するマニフェストをアセンブリに関連させるための手段、ならびにマニフェストまたは少なくとも１つの関連するアセンブリのハッシュをマニフェストに提供するための手段を含む。
【００１６】
以上の目的、および関連する目的を達するため、本発明は、以下に十分に説明し、特許請求の範囲で詳細に示す特徴を含む。以下の説明、および添付の図面は、本発明のある例としての実施形態を詳細に提示する。ただし、これらの実施形態は、本発明の原理を使用できる様々な仕方のいくつかだけを示すものであり、本発明は、すべてのそのような実施形態および均等形態を含むものとする。本発明のその他の目的、利点、および新しい特徴は、本発明の以下の詳細な説明を図面と併せて考慮したとき、明白となる。
【００１７】
（発明を実施するための形態）
次に、本発明を図面を参照して説明する。図面では、全体にわたり、同様の要素を指すのに同様の参照番号を使用している。本発明は、実行時中にアプリケーションプログラムによって使用されるコンポーネントの完全性を助長するためのシステムおよび方法に関して説明する。これらのコンポーネントは、通常、ダイナミックリンクライブラリ（ＤＬＬ）であるが、実行時にアプリケーションプログラムにリンクされる定義ファイル、宣言ファイル、および実行可能ファイルを含むことも可能である。本発明の少なくとも１つの態様によるアセンブリは、コンポーネントとして本明細書で定義される。コンポーネントは、アセンブリを定義するメタデータを含む。メタデータはアセンブリを構成するコンポーネントを記述し、またアセンブリが依存するアセンブリを記述する。本発明は、ハッシングなどの暗号技術を使用して、アプリケーションプログラムによって使用されるアセンブリの完全性を確実にする。さらに、本発明は、ＤＬＬの完全性を保証しながら、大きいＤＬＬファイルをいくつかのより小さいファイルに分割する縮小を可能にする。
【００１８】
図１は、本発明によるアセンブリの関係を示している。第１のアセンブリ１０は、トップアセンブリ１２（例えば、メタデータセクションまたはマニフェストを有するファイル）、およびモジュールまたはサブアセンブリ１４を含む。アセンブリ１０は、トップアセンブリ、およびアセンブリ１０を構成する任意の数のモジュールを含むことが可能である。トップアセンブリは、メタデータセクションまたはマニフェストを含むアセンブリとして定義される。メタデータセクションまたはマニフェストは、アセンブリを定義する識別情報、他のアセンブリに対する依存関係を定義するアセンブリリファレンス、およびモジュールまたはサブアセンブリに対するリンクを定義するモジュールリファレンスを含むことが可能である。第１のアセンブリ１０に関する情報を含むメタデータセクション１６が、トップアセンブリ１２の中で提供される。メタデータセクション１６は、識別情報コンポーネント１７、およびファイル検証ダイジェストコンポーネント１８を含む。識別情報コンポーネント１７は、第１のアセンブリ１０に関する情報を含み、一方、ファイル検証ダイジェストコンポーネント１８は、モジュール１４に関する情報を含む。識別情報コンポーネント１７は、簡単な名前、バージョン情報、オペレーティングシステム情報またはプロセッサ情報、発行元情報などの情報を、第１のアセンブリ１０に関する多くの他のタイプの情報に加えて含むことが可能である。ファイル検証ダイジェストコンポーネント１８は、モジュール１４のハッシュを含むことが可能である。
【００１９】
識別情報コンポーネント１７の中の情報は、他者にとってアクセス可能であり、一方、ファイル検証ダイジェストコンポーネント１８の中の情報は、他者にとってアクセス可能ではないが、アセンブリが変更されていないのを確認するため、実行時に先立って、または実行時に使用することが可能である。トップアセンブリダイジェスト１９は、トップアセンブリ１２の終りで提供することができる。トップアセンブリダイジェスト１９は、トップアセンブリ１２の内容のハッシュを含むことが可能である。トップアセンブリハッシュを使用して、トップアセンブリ１２の内容が変更されていないのを確認することができ、一方、ファイル検証ダイジェストコンポーネント１８の中のハッシュを使用して、モジュール１４が変更されていないのを確認することができる。
【００２０】
ほとんどのアプリケーションプログラムは、いくつかのアセンブリから成り、アセンブリのいくつかは、実行中、その他のアセンブリを参照することを理解されたい。したがって、図１は、第１のアセンブリ１０に依存する第２のアセンブリ２０が提供されていることも示している。第２のアセンブリ２０に関する情報、ならびに第２のアセンブリ２０が実行時中に参照する第１のアセンブリ１０に関する情報を含むメタデータセクション２２が、第２のアセンブリ２０の中で提供される。メタデータセクション２２は、識別情報コンポーネント２４、およびリファレンス検証ダイジェストコンポーネント２６を含む。識別情報コンポーネント２４は、第２のアセンブリ２４に関する情報を含み、一方、リファレンス検証ダイジェストコンポーネント２６は、第１のアセンブリ１０に関する情報を含む。識別情報コンポーネント２４は、簡単な名前、バージョン情報、オペレーティングシステム情報またはプロセッサ情報、発行元情報などの情報を、第２のアセンブリ２０に関する多くの他のタイプの情報に加えて含むことが可能である。リファレンス検証ダイジェストコンポーネント２６は、第１のアセンブリ１０のトップアセンブリ１２のメタデータセクション１６のハッシュを含むことが可能である。
【００２１】
識別情報コンポーネント２４の中の情報は、他者にとってアクセス可能であり、一方、ファイル検証ダイジェストコンポーネント２６の中の情報は、他者にとってアクセス可能ではないが、実行時に先立って、または実行時に、第１のアセンブリ１０および第２のアセンブリ２０が変更されていないのを確認するために使用することができる。メタデータセクション１６は、モジュール１４のハッシュを含むため、モジュール１４が変更されていないのを確認するのに第２のアセンブリ２０のメタデータセクション２２の中でハッシュを提供する必要はない。リファレンス検証ダイジェスト２６は、オプションとして、トップアセンブリ１２のハッシュ値を含むことが可能である。ただし、これは、必要ではない。というのは、トップアセンブリダイジェスト１９の中のトップアセンブリハッシュを、実行時前に、または実行時に判定されたトップアセンブリ１２の実際のハッシュ値と比較することができるからである。
【００２２】
図２は、本発明によるアセンブリの構成をより詳細に示している。アセンブリ３０は、トップアセンブリ４０、第１のモジュール４５、および第２のモジュール５０から成る。トップアセンブリ４０は、アセンブリマニフェストと呼ばれるメタデータセクション４２を含む。アセンブリマニフェスト４２は、次の情報を有する識別情報を含む。オリジネータ（ｏｒｉｇｉｎａｔｏｒ）名情報、ロケール（ｌｏｃａｌｅ）情報、メジャーバージョン情報、マイナーバージョン情報、改訂情報、構築情報、およびモジュール情報。その他の情報（例えば、オペレーティングシステム）も、識別マニフェストの中に入れることができる。モジュール情報は、アセンブリ３０を構成するモジュールのリスト、および各モジュールのファイル内容のハッシュである。実行時に先立って、または実行時に、同一のハッシュアルゴリズムを使用して、アセンブリマニフェスト４２の中のモジュールハッシュを第１のモジュール４５および第２のモジュール５０の実際のハッシュに照らして検査して、アセンブリ３０の完全性を決定することができる。オプションとして、トップアセンブリ４０が、ファイルの終りに位置するトップアセンブリハッシュ４３を含む。トップアセンブリハッシュは、トップアセンブリ４０の中で何らかの変更が行われたかどうかを判定するのに利用することができる。アセンブリ３０が変更されている場合、アセンブリ３０を呼び出すアプリケーションプログラムは、中止するのを選択することができる。本発明の代替の態様では、アプリケーションプログラムは、識別情報を検討することを選択して、その変更が信頼できるソースによって実行されたかどうかを判定することができる。次に、アプリケーションプログラムは、アセンブリ３０の実行を中止するか、許可するかを選択することができる。
【００２３】
図３は、本発明による別のアセンブリを参照するアセンブリの構成をより詳細に示している。アセンブリＢとラベル付けされた参照を行うアセンブリ７０が、アセンブリＣとラベル付けされた第１の参照される（参照の）アセンブリ８０、およびアセンブリＤとラベル付けされた第２の参照される（参照の）アセンブリ９０を参照する。参照を行うアセンブリ７０は、図２で説明したトップアセンブリ４０のモジュール情報と同様のモジュール情報を有するアセンブリマニフェスト７２を含む。また、アセンブリマニフェスト７２は、参照を行うアセンブリ７０が実行中に依存するアセンブリのリストなどの依存関係情報も含む。また、依存関係情報は、それぞれの参照されるアセンブリのトップアセンブリマニフェストのハッシュも含む。オプションとして、依存関係情報は、トップアセンブリのハッシュを含む。第１の参照されるアセンブリ８０は、識別情報と依存関係情報をともに含むアセンブリマニフェスト８２、およびオプションのトップアセンブリダイジェスト８３を有する。依存関係情報の存在により、第１の参照されるアセンブリ８０も、少なくとも１つの他のアセンブリに依存することがアプリケーションプログラムに知らされる。第１の参照されるアセンブリ８０は、モジュールを全く有さず、したがって、モジュール情報も、何らかのモジュールに関するハッシュも全く存在しない。第２の参照されるアセンブリ９０は、モジュール情報を含むアセンブリマニフェスト９４を有するが、依存関係情報は全く有さない。したがって、第２の参照されるアセンブリ９０は、依存関係情報を全く有さないので、実行するのに他のアセンブリには全く依存しない。オプションのトップアセンブリダイジェスト９５も、第２の参照されるアセンブリ９０の終りで提供される。第２の参照されるアセンブリ９０は、トップアセンブリ９２、第１のモジュール９６、および第２のモジュール９８から成る。モジュール情報は、アセンブリ９０のモジュールのリスト、および各モジュールの内容全体のハッシュを含む。アセンブリ７０、８０、および９０の内容全体が、実行時にコンピュータシステムのキャッシュの中にロードされ、ハッシュが、実行時に、または実行時に先立って、マニフェストの中に記憶されたハッシュで確認されることが可能である。
【００２４】
図４および以下の説明は、本発明を実施することができる適切なコンピュータ環境の簡単な一般的説明を提供することを目的とする。本発明は、パーソナルコンピュータ上またはサーバコンピュータ上で実行されるコンピュータプログラムのコンピュータ実行可能命令の一般的な文脈で説明するが、本発明は、他のプログラムモジュールとの組み合わせでも実施できることが、当業者には理解されよう。一般に、プログラムモジュールには、特定のタスクを行う、または特定の抽象データタイプを展開するルーチン、プログラム、コンポーネント、データ構造等が含まれる。さらに、本発明は、単一プロセッサまたはマルチプロセッサのコンピュータシステム、ミニコンピュータ、メインフレームコンピュータ、ハンドヘルドコンピュータ装置、マイクロプロセッサベースの家庭用電化製品またはプログラマブル家庭用電化製品、その他を含む他のコンピュータシステム構成でも実施できることが、当業者には理解されよう。本発明の例示する実施形態は、通信網を介してリンクされた遠隔処理装置によってタスクが行われる分散コンピュータ環境でも実施することができる。ただし、本発明のいくつかの実施形態は、独立型コンピュータ上で実施することができる。分散コンピュータ環境では、プログラムモジュールは、ローカルのメモリ記憶デバイスと遠隔のメモリ記憶デバイスの両方の中に配置されていることが可能である。
【００２５】
図４を参照すると、本発明を実施するための例としてのシステムは、処理装置１２１、システムメモリ１２２、ならびにシステムメモリを含む様々なシステムコンポーネントを処理装置１２１に結合するシステムバス１２３を含む従来のパーソナルコンピュータまたは従来のサーバコンピュータ１２０を含む。処理装置は、Ｉｎｔｅｌ ｘ８６、Ｐｅｎｔｉｕｍ（登録商標）、ならびにＩｎｔｅｌ、およびＣｙｒｉｘ、ＡＭＤ、Ｎｅｘｇｅｎを含む他社から互換性のあるマイクロプロセッサ、ＤｉｇｉｔａｌからのＡｌｐｈａ、ＭＩＰＳ Ｔｅｃｈｎｏｌｏｇｙ、ＮＥＣ、ＩＤＴ、ＳｉｅｍｅｎｓからのＭＩＰＳ、ＩＢＭおよびＭｏｔｏｒｏｌａからのＰｏｗｅｒＰＣを含む様々な市販のプロセッサの任意のものとすることが可能である。デュアルマイクロプロセッサ、およびその他のマルチプロセッサアーキテクチャも、処理装置１２１として使用することができる。
【００２６】
システムバスは、いくつかを挙げれば、ＰＣＩ、ＶＥＳＡ、Ｍｉｃｒｏｃｈａｎｎｅｌ、ＩＳＡ、およびＥＩＳＡなどの様々な従来のバスアーキテクチャの任意のものを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含むいくつかのタイプのバス構造の任意のものとすることが可能である。システムメモリは、読取り専用メモリ（ＲＯＭ）１２４およびランダムアクセスメモリ（ＲＡＭ）１２５を含む。始動時中などにコンピュータ１２０内部の要素間における情報の転送を助ける基本ルーチンを含む基本入力／出力システム（ＢＩＯＳ）が、ＲＯＭ１２４の中に記憶されている。
【００２７】
コンピュータ１２０は、ハードディスクドライブ１２７と、例えば、取外し可能なディスク１２９に対して読取りまたは書込みを行う磁気ディスクドライブ１２８と、例えば、ＣＤ−ＲＯＭディスク１３１を読み取るため、またはその他の光媒体に対して読取りまたは書込みを行うための光ディスクドライブ１３０とをさらに含む。ハードディスクドライブ１２７、磁気ディスクドライブ１２８、および光ディスクドライブ１３０がそれぞれ、ハードディスクドライブインターフェース１３２、磁気ディスクドライブインターフェース１３３、および光ドライブインターフェース１３４でシステムバス１２３に接続される。以上のドライブおよび関連するコンピュータ可読媒体は、サーバコンピュータ１２０に、データ、データ構造、コンピュータ実行可能命令等の不揮発性ストーレッジを提供する。以上のコンピュータ可読媒体の説明は、ハードディスク、取外し可能な磁気ディスク、およびＣＤについて述べているが、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、その他などのコンピュータによって読取り可能なその他のタイプの媒体も、例としての動作環境で使用できることが、当業者には理解されよう。
【００２８】
オペレーティングシステム１３５、１つまたは複数のアプリケーションプログラム１３６、その他のプログラムモジュール１３７、およびプログラムデータ１３８を含むいくつかのプログラムモジュールをドライブおよびＲＡＭ１２５の中に記憶することができる。例示するコンピュータにおけるオペレーティングシステム１３５は、Ｍｉｃｒｏｓｏｆｔ Ｗｉｎｄｏｗｓ（登録商標） ＮＴ Ｓｅｒｖｅｒオペレーティングシステム、ならびに前述したＭｉｃｒｏｓｏｆｔ Ｔｒａｎｓａｃｔｉｏｎ Ｓｅｒｖｅｒ、Ｍｉｃｒｏｓｏｆｔ Ｗｉｎｄｏｗｓ（登録商標） ９５、Ｍｉｃｒｏｓｏｆｔ Ｗｉｎｄｏｗｓ（登録商標） ９８、またはＭｉｃｒｏｓｏｆｔ Ｗｉｎｄｏｗｓ（登録商標） ２０００とすることが可能である。
【００２９】
ユーザは、キーボード１４０、またはマウス１４２などのポインティングデバイスを介してコンピュータ１２０にコマンドおよび情報を入力することができる。その他の入力デバイス（図示せず）には、マイクロホン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナ等が含まれることが可能である。以上の入力デバイスおよびその他の入力デバイスは、しばしば、システムバスに結合されたシリアルポートインターフェース１４６を介して処理装置１２１に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などのその他のインターフェースで接続することも可能である。また、モニタ１４７、またはその他のタイプの表示デバイスも、ビデオアダプタ１４８などのインターフェースを介してシステムバス１２３に接続される。モニタに加えて、コンピュータは、通常、スピーカおよびプリンタなどのその他の周辺出力デバイス（図示せず）も含む。
【００３０】
コンピュータ１２０は、遠隔サーバまたはクライアントコンピュータ１４９などの１つまたは複数の遠隔コンピュータに対する論理接続を使用するネットワーク化された環境で動作することが可能である。遠隔コンピュータ１４９は、ワークステーション、サーバコンピュータ、ルータ、ピア装置、またはその他の一般的なネットワークノードとすることが可能であり、通常、コンピュータ１２０に関連して説明した要素の多く、またはすべてを含む。ただし、メモリ記憶デバイス１５０だけを図４に示している。図４で描かれる論理接続は、ローカルエリアネットワーク（ＬＡＮ）１５１およびワイドエリアネットワーク（ＷＡＮ）１５２を含む。そのようなネットワーキング環境は、オフィス、企業全体のコンピュータ網、イントラネット、およびインターネットで一般的である。
【００３１】
ＬＡＮネットワーキング環境で使用される場合、コンピュータ１２０は、ネットワークインターフェースまたはネットワークアダプタ１５３を介してローカルネットワーク１５１に接続される。ＷＡＮネットワーキング環境で使用される場合、サーバコンピュータ１２０は、通常、モデム１５４を含むか、またはＬＡＮ上で通信サーバに接続されるか、またはインターネットなどのワイドエリアネットワーク１５２を介して通信を確立するための他の手段を有する。内部または外部にあることが可能なモデム１５４は、シリアルポートインターフェース１４６を介してシステムバス１２３に接続される。ネットワーク化された環境では、コンピュータ３２０に関連して描かれたプログラムモジュール、またはその部分が、遠隔メモリ記憶デバイスの中に記憶されることが可能である。図示したネットワーク接続は、例としてのものであり、コンピュータ間で通信リンクを確立する他の手段も使用できることが理解されよう。
【００３２】
コンピュータプログラミング分野の技術者の慣行に従って、本発明を以下で、別段、明示しない限り、コンピュータ１２０によって行われる動作の作用および記号表現に関連して説明する。そのような作用および動作は、ときとして、コンピュータによって実行されるものとして述べられる。作用および記号で表現される動作には、電気信号表現の結果としての変換または縮小をもたらす、データビットを表す電気信号の処理装置１２１による操作、およびメモリシステム（システムメモリ１２２、ハードドライブ１２７、フロッピー（登録商標）ディスク１２９、およびＣＤ−ＲＯＭ１３１を含む）の中の記憶場所にデータビットを維持して、これにより、コンピュータシステムの動作を再構成すること、または別の仕方で変更すること、ならびに信号のその他の処理が含まれることが理解されよう。データビットが維持されるメモリ場所は、そのデータビットに対応する特定の電気特性、磁気特性、または光特性を有する物理的な場所である。
【００３３】
図５は、本発明に関するより詳細な環境を示している。プロセッサ２００が、バス２２５を介してメモリ媒体２２０に結合されている。また、プロセッサは、ネットワーク回線２１５を介してネットワーク２１０にも結合されている。ネットワーク２１０により、プロセッサが、他の遠隔コンピュータとの間でアセンブリおよびその他のコンポーネントの取得および送信を行うことが可能になる。メモリ媒体２２０は、メモリの残りの部分とは別個のキャッシュメモリ２３０を含む。キャッシュメモリ２３０は、アプリケーションプログラム２３２が実行される場所である。残りのメモリは、第２のキャッシュ、ＲＯＭ、ＲＡＭ、あるいは何らかの固定の媒体またはフロッピー（登録商標）ディスク媒体であるのが可能であることを理解されたい。ハッシングコンポーネント２６０が、アセンブリの開発段階中にアセンブリのバージョン情報およびハッシュを挿入するため、メモリ媒体２２０上に常駐する。ただし、ハッシングコンポーネント２６０は、アプリケーションプログラムおよびアセンブリの最初の展開および試験の最中にハッシュを挿入すること、または後の時点でアドミニストレータによって行われることが可能である。ハッシングコンポーネント２６０は、オペレーティングシステム２７５の一部として常駐するアプリケーションプログラムインターフェース（ＡＰＩ）とすることが可能である。ただし、ハッシングコンポーネント２６０は、アプリケーションプログラム２３２の一部であることも可能である。さらに、ハッシングコンポーネント２６０は、いくつかの異なるコンポーネントから、例えば、ハッシュ機能およびバージョニング機能に関して別個のコンポーネントで構成することが可能である。
【００３４】
アプリケーションプログラム２３２は、展開されて、キャッシュ２３０（例えば、ロードされたすべてのアセンブリを記憶するメモリ内のキャッシュ）の中にロードされる。アプリケーションプログラム２３２は、ローダ２５０と通信し、ローダ２５０が、実行時にアプリケーションプログラム２３２によって使用されるようにアプリケーションプログラム２３２によって指定されたアセンブリを探し出し、そのアセンブリをキャッシュ２３０の中にロードする。この例では、アセンブリＡとラベル付けされた第１のアセンブリ２３４、およびアセンブリＢとラベル付けされた第２のアセンブリ２３６が、キャッシュ２３０の中にロードされる。第２のアセンブリ２３６は、やはりキャッシュ２３０の中にロードされる第１のモジュール２３８および第２のモジュール２４０を含む。第１のアセンブリ２３４および第２のアセンブリ２３６は、オペレーティングシステムの一部である共用のアセンブリとして常駐することが可能であり、遠隔コンピュータ上にライブラリとして常駐することが可能であり、アプリケーションプログラム２３２の一部としてディレクトリの中に、または別のアプリケーションプログラムの中に常駐することが可能である。
【００３５】
また、結合コンポーネント２８０も、メモリ媒体２２０の中に常駐する。結合コンポーネント２８０は、結合ポリシーを提供し、共用のアセンブリを扱うアプリケーションを管理するのに使用される。結合コンポーネント２８０は、アセンブリの元のバージョンに結合するか、アップグレードされたバージョンに結合するか、または標準化されたバージョンに結合するかの決定を行うことができる。例えば、第２のアセンブリ２３６が、第１のアセンブリ２３４の更新されたバージョンである場合、第１のアセンブリ２３４および第２のアセンブリ２３６が、同じアセンブリ名を有することが可能である。さらに、両方のアセンブリが、ローダ２５０によってキャッシュ２３０の中にロードされることが可能である。次に、結合コンポーネント２８０は、結合コンポーネント２８０の中で定義された結合ポリシーに基づき、アプリケーションプログラム２３２が、第１のアセンブリ２３４または第２のアセンブリ２３６に結合すべきか否かを判定することができる。結合コンポーネント２８０は、同じ名前を有するアセンブリが、システム内部で並んで常駐することを可能にし、またアプリケーションプログラム２３２、開発者、またはアドミニストレータに、適切な結合ポリシーがどのようなものであるかの決定を制御する能力を与える。
【００３６】
確認コンポーネント２７０が、メモリ媒体２２０上に常駐する。確認コンポーネントは、アセンブリ内部のマニフェストを読み取るために起動され、アセンブリ、およびアセンブリのマニフェストをハッシングするのに使用されるハッシュアルゴリズムを呼び出す。次に、確認コンポーネント２７０は、マニフェストの中のハッシュをアセンブリに対してハッシュを実行することによって得られた実際のハッシュと比較する。次に確認コンポーネント２７０は、アセンブリで何らかの変更が行われているか否かをアプリケーションプログラム２３２に伝えることができる。次に、確認コンポーネント２７０は、中止するか否かを決定することができる。本発明の代替の態様では、確認コンポーネント２７０は、結合コンポーネント２８０によって設定された結合ポリシーに基づいてバージョン情報および発行元情報を検査することができる。このバージョン情報および発行元情報を使用して、ハッシュ確認に基づいて変更が発見されている場合でも、アプリケーションプログラムがそのアセンブリを実行すべきかどうかを判定することができる。本発明のさらに別の代替の態様では、確認コンポーネントが、アプリケーションプログラムの最初の展開および試験の最中に使用されるアセンブリのハッシュのテーブルを保持する。次に、確認コンポーネントは、アセンブリに対してハッシュを実行し、そのハッシュをテーブルの中にあるハッシュと比較することができる。確認コンポーネント２７０は、オペレーティングシステム２７５の一部として常駐するアプリケーションプログラムインターフェース（ＡＰＩ）とすること、またはアプリケーションプログラム２３２の一部とすることも可能である。
【００３７】
コンポーネントの以上の例は、例示する目的でだけ別個のものとして描いていることを理解されたい。様々なコンポーネントは、前述した機能性を維持しながらも、他のコンポーネントの中に組み込むことが可能なことを理解されたい。さらに、以上の説明は、どのようにコンポーネントが相互作用して本発明を実施することができるかの例であり、その他の例を使用して本発明を実施することも可能である。
【００３８】
図６は、モジュールを有するアセンブリの完全性を確実にし、確認するための１つの特定の方法を示している。ステップ３００で、少なくとも１つのモジュールを有するアセンブリが提供される。ステップ３１０で、識別情報およびモジュール情報を備えたアセンブリマニフェストを有するアセンブリのトップアセンブリが提供される。ステップ３２０でハッシングコンポーネント２６０を起動することにより、モジュール情報の中の少なくとも１つのモジュールのファイル内容全体のハッシュが提供される。この時点で、アプリケーションプログラム２３２、およびこのアプリケーションプログラムによって使用されるアセンブリを実行のためにキャッシュ２３０の中にロードすることが可能である。ステップ３３０で、モジュール情報の中の少なくとも１つのモジュールのハッシュ値が、その少なくとも１つのモジュールの実際のハッシュ値と比較される。ステップ３４０で、アセンブリの内容が変更されているかどうかの判定が行われる。アセンブリが変更されていない場合（いいえ）、そのアセンブリが、ステップ３４５で実行される。アセンブリが変更されている場合（はい）、通常、誤りが戻され、アプリケーションプログラムは、中止する。ステップ３５０で、結合コンポーネント２８０の中で定義された特定の結合ポリシーに基づき、識別情報を検査するオプションのステップが提供される。ステップ３６０で、変更が信頼できる発行元によって行われたかどうかの判定が、確認コンポーネント２７５によって行われる。発行元が、信頼できる場合（はい）、そのアセンブリが、ステップ３６５で実行される。発行元が、信頼できない場合（いいえ）、ステップ３７０で、アプリケーションプログラム２３２に誤りが戻され、アプリケーションプログラム２３２は、中止する。
【００３９】
図７は、他のアセンブリによって参照されるアセンブリの完全性を確実にし、確認するための１つの特定の方法を示している。ステップ４００で、少なくとも１つの他のアセンブリを参照するアセンブリが提供される。ステップ４１０で、識別情報および依存関係情報を有するアセンブリマニフェストがそのアセンブリに提供される。依存関係情報は、少なくとも１つの参照されるアセンブリのリストを含む。ステップ４２０で、ハッシングコンポーネント２６０を起動することにより、その少なくとも１つの参照されるアセンブリのマニフェストのハッシュが、依存関係情報の一部として提供される。この時点で、アプリケーションプログラム２３２、およびこのアプリケーションプログラムによって使用されるアセンブリが、実行のためにローダ２５０によってキャッシュ２３０の中にロードされることが可能になる。ステップ４３０で、依存関係情報の中の少なくとも１つの参照されるアセンブリのハッシュ値が、確認コンポーネント２７０を使用することによってその少なくとも１つの参照されるアセンブリのマニフェストの実際のハッシュ値と比較される。ステップ４４０で、何らかの参照されるアセンブリの内容が変更されているかどうかの判定が行われる。参照されるアセンブリのどれも変更されていない場合（いいえ）、その参照されるアセンブリが、ステップ４４５で実行される。参照されるアセンブリのどれかが変更されている場合（はい）、通常、誤りが戻され、アプリケーションプログラムが中止する。結合コンポーネント２８０の中で定義される特定の結合ポリシーに基づき、識別情報を検査するオプションのステップが、ステップ４５０で提供される。ステップ４６０で、変更が、信頼できる発行元によって行われているかどうかの判定が行われる。発行元が信頼できる場合（はい）、その参照されるアセンブリが、ステップ４６５で実行される。発行元が信頼できない場合（いいえ）、ステップ４７０で、アプリケーションプログラムに誤りが戻され、アプリケーションプログラムは、中止する。
【００４０】
本発明をプログラミング方法、および／またはコンピュータアーキテクチャ、および特定の例に関して説明してきたが、本発明を実施するのに適した様々なプログラミング方法および／またはコンピュータアーキテクチャを使用することができ、それらの方法およびアーキテクチャも頭記の特許請求の範囲に含まれるものであることを理解されたい。
【００４１】
本発明を本発明の好ましい態様に関して説明してきた。明らかに、以上の詳細な説明を読み、理解することで、他の人々は、修正形態および変更形態を思い付くであろう。本発明は、すべてのそのような修正形態、変更形態、およびそれらと等価の形態を含むと解釈されるものとする。
【００４２】
（産業上の利用可能性）
本発明は、コンピュータおよびコンピュータソフトウェアの分野で産業上の利用可能性を有する。
【図面の簡単な説明】
【図１】
本発明の一態様による複数のモジュールを有するアセンブリを参照するアセンブリを示すブロック図である。
【図２】
本発明の一態様による複数のモジュールを有するアセンブリを詳細に示すブロック図である。
【図３】
本発明の一態様による複数のアセンブリを参照するアセンブリを詳細に示すブロック図である。
【図４】
本発明の環境によるコンピュータシステムを示すブロック図である。
【図５】
本発明による環境を詳細に示すブロック図である。
【図６】
本発明の一態様によるアセンブリの完全性を助長するための１つの特定の方法を示す流れ図である。
【図７】
本発明の一態様によるアセンブリの完全性を助長するための別の方法を示す流れ図である。
【図１】
2004513412.tif 000003
【図２】
2004513412.tif 000004
【図３】
2004513412.tif 000005
【図４】
2004513412.tif 000006
【図５】
2004513412.tif 000007
【図６】
2004513412.tif 000008
【図７】
2004513412.tif 000009
【国際公開パンフレット】
2004513412.tif 000010
2004513412.tif 000011
2004513412.tif 000012
2004513412.tif 000013
2004513412.tif 000014
2004513412.tif 000015
2004513412.tif 000016
2004513412.tif 000017
2004513412.tif 000018
2004513412.tif 000019
2004513412.tif 000020
2004513412.tif 000021
2004513412.tif 000022
2004513412.tif 000023
2004513412.tif 000024
2004513412.tif 000025
2004513412.tif 000026
2004513412.tif 000027
2004513412.tif 000028
2004513412.tif 000029
2004513412.tif 000030
2004513412.tif 000031
2004513412.tif 000032
2004513412.tif 000033
2004513412.tif 000034
2004513412.tif 000035
2004513412.tif 000036
2004513412.tif 000037
2004513412.tif 000038