(57)【要約】ソフトウェアコンポーネントのパブリック設定値にアクセスするためのリクエストが、ソフトウェア製品のソフトウェアコンポーネントから受信される。リクエストがパブリック設定に適切なフォーマットに従っているか否かチェックが実行される。リクエストが適切なフォーマットに従っている場合、リクエストされたアクセスが実行される。しかしながら、リクエストが適切なフォーマットに従っていない場合、リクエストされたアクセスが拒否される。パブリック設定に関する複数の値が受信され、同時に保持され得る。【選択図】図１
2012530297.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサー（７０２）と、
１つ以上の計算機可読媒体（７０４）と、を含んでいて、前記計算機可読媒体はその上にストアされる複数の命令を有していて、当該命令が前記プロセッサーによって実行されるとき、
ソフトウェア製品のソフトウェアコンポーネントから前記ソフトウェアコンポーネントのパブリック設定値にアクセスするためのリクエストを受信するステップ（６０２）と、
前記リクエストが、前記パブリック設定に適切なフォーマットに従っているか否かチェックするステップ（６０６）と、
前記リクエストが、前記適切なフォーマットに従っている場合、前記リクエストされたアクセスを実行（６０８）し、さもなければ、前記リクエストされたアクセスを拒否するステップ（６１０）と、を前記プロセッサーに実行させることを特徴とする計算装置（７００）。
【請求項２】
前記値にアクセスするための前記リクエストが、パブリック設定格納部に前記パブリック設定に関する値を書き込むためのリクエストであることを特徴とする請求項１記載の計算装置。
【請求項３】
前記値にアクセスするための前記リクエストが、パブリック設定格納部から前記パブリック設定に関する値を読み出すためのリクエストであることを特徴とする請求項１記載の計算装置。
【請求項４】
前記命令が更に、前記ソフトウェアコンポーネントが前記装置上にインストールされたとき、前記適切なフォーマットを、前記ソフトウェアコンポーネントを記述しているメタデータを格納している宣言部のパブリック設定宣言として受信するステップを前記プロセッサーに実行させることを特徴とする請求項１記載の計算装置。
【請求項５】
前記命令が更に、前記パブリック設定に関する複数の値を保持するステップを前記プロセッサーに実行させ、前記リクエストされたアクセスを実行するステップが、前記パブリック設定に関する前記複数の値のどれが前記ソフトウェアコンポーネントへ返却されるべきか決定することであること、を特徴とする請求項１記載の計算装置。
【請求項６】
前記リクエストが、前記パブリック設定に対する実効値に関するリクエストであって、前記リクエストされたアクセスを実行するステップが、
１つ以上のルールに基づいて、前記複数の値のどれが実効値であるか決定するステップと、
前記複数の値のうち前記実効値であると決定された１つを前記ソフトウェアコンポーネントへ返却するステップとであること、を特徴とする請求項５記載の計算装置。
【請求項７】
前記１つ以上のルールが、前記複数の値のどれが優先権を有しているか記述していて、前記１つ以上のルールが、
前記複数の値が管理者によって設定された第１の値を含んでいる場合、前記第１の値が前記実効値であることを示す第１のルールと、
前記複数の値が、前記第１の値を含んでいないが、しかし前記ソフトウェアコンポーネントによって設定された前記第２の値を含んでいる場合、前記第２の値が実効値であることを示す第２のルールと、
前記複数の値が、前記第１の値も前記第２の値も含んでいない場合、デフォルト値が前記実効値であることを示す第３のルールと、を含んでいることを特徴とする請求項６記載の計算装置。
【請求項８】
前記命令が更に、
前記パブリック設定に関する複数の値を保持するステップと、
前記ソフトウェアコンポーネントのリセットを実行するためのリクエストを受信するステップと、
前記リセットを実行するための前記リクエストに応答して前記複数の値の１つ以上を削除する、一方、前記少なくとも複数の値の１つを保持するステップを前記プロセッサーに実行させることを特徴とする請求項１記載の計算装置。
【請求項９】
前記命令が更に、複数の異なるタイプのアクセスをリクエストするために前記ソフトウェアコンポーネントによって呼び出され得る複数の方法を有するアプリケーションプログラミングインターフェースを公開するステップを前記プロセッサーに実行させることと、前記リクエストを受信するステップが、前記ソフトウェアコンポーネントによって呼び出される前記複数の方法のうちの１つを有していること、を特徴とする請求項１記載の計算装置。
【請求項１０】
前記命令が更に、前記アクセスがプライベート状態に適切なフォーマットに従っているか否かチェックせずに、前記ソフトウェアコンポーネントが、前記ソフトウェアコンポーネントの前記プライベート状態にアクセスするステップを前記プロセッサーに実行させることを特徴とする請求項１記載の計算装置。
【請求項１１】
機器の１つ以上のプロセッサーによって実装される方法であって、
ソフトウェアコンポーネントに関する設定宣言を受信するステップ（５０２）であって、前記設定宣言が、宣言された設定にアクセスするために適切なフォーマットを識別するものと、
前記設定された宣言に関する複数の値を受信するステップ（５０６）と、
前記複数の値を同時に保持するステップ（５０８）と、を含む方法。
【請求項１２】
前記設定宣言を受信するステップが、前記設定宣言を、前記ソフトウェアコンポーネントを記述しているメタデータを格納している宣言部の一部として受信するステップを含む請求項１１記載の方法。
【請求項１３】
前記設定宣言が、前記複数の値の１つを含んでいることを特徴とする請求項１２記載の方法。
【請求項１４】
更に、
前記宣言された設定に対する実効値に関するリクエストを前記ソフトウェアコンポーネントから受信するステップと、
前記複数の値のどれが前記実効値であるか１つ以上のルールに基づいて決定するステップと、
前記実効値であることが決定された前記複数の値の１つを前記ソフトウェアコンポーネントへ返却するステップと、を含む請求項１１記載の方法。
【請求項１５】
前記１つ以上のルールが、
前記複数の値が、前記ソフトウェアコンポーネントによって設定された値を管理者が上書きする第１の値を含んでいる場合、前記第１の値が前記実効値であること、
さもなければ、前記複数の値が、前記ソフトウェアコンポーネントによって設定された値を含んでいる場合、前記ソフトウェアコンポーネントによって設定された値が前記実効値であること、
さもなければ、前記複数の値が、デフォルト値を管理者が上書きする第２の値を含んでいる場合、前記第２の値が前記実効値であること、
さもなければ、前記デフォルト値が、前記実効値であることを示すルールを含んでいることを特徴とする請求項１４記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システムに関し、具体的には、オペレーティングシステムレジストリに対するアクセスコントロールに関する。
【背景技術】
【０００２】
[0001]計算機は、典型的に、別のアプリケーションを計算機にインストールし、実行可能にすることを含む様々な機能性を提供するオペレーティングシステムを実行している。上記オペレーティングシステムは、多くの場合、アプリケーションが、アプリケーションの多重実行全域で持続されるべき様々なタイプの情報を格納し得る場所を提供している。この場所は、例えば、オペレーティングシステムレジストリであり得る。上記情報を保持することは、アプリケーションにとって有益であり得るが一方、今の格納機構には、それらの課題がないわけではない。上記課題の１つは、異なるアプリケーションが、典型的に、同一の場所と対話することであって、あるアプリケーションによって格納された情報が、別のアプリケーションによって削除され、上書きされ、あるいは破壊される状況を発生させる。上記状況は、アプリケーションが意図されたように実行しなかったり、全く何も実行しないことさえもたらす。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本発明の目的は、ソフトウェアコンポーネント状態に対するアクセスを制御する方法及びシステムを提供することである。
【課題を解決するための手段】
【０００４】
[0002]この「課題を解決するための手段」は、更に「発明を実施するための形態」に後述される概念のいくつかを簡易形式で紹介するために提供される。この「課題を解決するための手段」は、請求項記載対象の主要因も本質的な特徴も特定することを意図されておらず、請求項記載対象の範囲を限定するために使用されることも意図されていない。
【０００５】
[0003]１つ以上の態様に従って、ソフトウェアコンポーネントの設定値にアクセスするリクエストが、ソフトウェア製品のソフトウェアコンポーネントから受信される。上記設定は、例えば、それに続くソフトウェアの起動が持続情報を読み出し得て、当該構成情報（コンフィギュレーション）を再構築し得るように、ソフトウェアの実行時を過ぎても持続する方法で格納するように、ソフトウェアコンポーネントが所望している構成情報である。リクエストが設定に適切なフォーマットに従っているか否かチェックが実行される。リクエストが適切なフォーマットに従っている場合、リクエストされたアクセスが実行される。しかしながら、リクエストが適切なフォーマットに従っていない場合、リクエストされたアクセスは拒否される。
【０００６】
[0004]１つ以上の態様に従って、ソフトウェアコンポーネントに関する設定宣言が受信される。設定宣言が、宣言された設定にアクセスするために適切なフォーマットを識別する。設定宣言レコードが保持される。宣言された設定に関する複数の値も受信され、複数の値が同時に保持される。
【０００７】
[0005]同様の機能を参照するために、同一の番号が図面内で使用されている。
【図面の簡単な説明】
【０００８】
【図１】[0006]１つ以上の実施形態によるソフトウェアコンポーネント状態に対するアクセスコントロールを実装している計算装置の例を示している。
【図２】[0007]１つ以上の実施形態によるソフトウェアコンポーネントの例を示している。
【図３】[0008]１つ以上の実施形態によるソフトウェアコンポーネント設定値に対するアクセスコントロールを実装している計算装置の例を示している。
【図４】[0009]１つ以上の実施形態によるソフトウェアコンポーネント状態を格納するためのファイルシステム階層構造の例を示しているブロック図である。
【図５】[0010]１つ以上の実施形態によるソフトウェアコンポーネント設定値に対するアクセスコントロール装置に関するプロセスの例を示す流れ図である。
【図６】[0011]１つ以上の実施形態によるソフトウェアコンポーネント設定値に対するアクセスコントロール装置に関する別のプロセスの例を示す流れ図である。
【図７】[0012]１つ以上の実施形態によるソフトウェアコンポーネント状態に対するアクセスコントロールを実装するように構成され得る計算装置の例を示している。
【発明を実施するための形態】
【０００９】
[0013]ソフトウェアコンポーネントの持続的設定に対するアクセスコントロールが本明細書に論述される。これらの設定は、異なるソフトウェアコンポーネントの実行全域で持続される。ソフトウェア製品は１つ以上のソフトウェアコンポーネントから生成されていて、そのそれぞれが、設定格納制御モジュールと通信し得る。設定格納制御モジュールが、ソフトウェアコンポーネントに関連付けられた少なくともいくつかの持続的状態に対するアクセスを制御する。ソフトウェアコンポーネントは、設定格納制御モジュールがアクセス制御する対象の（パブリック設定として参照される）あるタイプの持続的設定を格納し得る。ソフトウェアコンポーネントは、（プライベート状態として参照される）別のタイプの持続的設定又は情報も格納し得る。パブリック設定及びプライベート状態の場合双方とも、ソフトウェアコンポーネントの持続的状態データが格納される場所が、制御される。パブリック設定の場合、データ構造及びタイプが、ソフトウェアコンポーネントの宣言された設定スキーマによって課せられる制約ごとに、格納制御モジュールによって制約される。プライベート状態の場合、ソフトウェアコンポーネント自体がデータ構造及びタイプを決定するが、実際にはデータが格納される場所を決定しない。
【００１０】
[0014]特定のソフトウェアコンポーネントによってアクセスされ得る特定のパブリック設定が、ソフトウェアコンポーネントの不変宣言部の一部である設定スキーマで宣言されている。ソフトウェアコンポーネントが設定スキーマで宣言されているパブリック設定だけに対しソフトウェアコンポーネントそれぞれがアクセスするように、設定格納制御モジュールが制約し、ソフトウェアコンポーネントからパブリック設定にアクセスするための別のリクエストは、設定格納制御モジュールによって拒否される。
【００１１】
[0015]加えると、設定格納制御モジュールが、設定それぞれに関する異なる複数の値を保持し得、それに対するアクセスを可能にし得る。設定値が書き込まれたときに設定値が格納される場所は、値を書き込む身元に依存し得る。したがって、異なるコンポーネント、モジュール、機器などが、同一設定に格納され、同時に持続される異なる設定値を有し得る。異なるこれらの設定値のどれが、特定の設定値に関するリクエストに応答して返却されるか識別するアルゴリズム又はルールセットが使用され得る。
【００１２】
[0016]図１は、１つ以上の実施形態によるソフトウェアコンポーネント状態に対するアクセスコントロールを実装している計算装置の例（１００）を示している。計算装置（１００）は、アプリケーションを実行可能な異なる様々な機器であり得る。例えば、計算装置（１００）は、デスクトップコンピューター、サーバーコンピューター、ラップトップコンピューター、通信移動局、娯楽電化製品、表示装置と通信可能に接続されるセットトップボックス、携帯電話、又はその他の無線電話、ゲーム端末、自動車用コンピューターなどであり得る。かくして、計算装置（１００）は、大容量メモリー及びプロセッサー資源を有する大きなリソース機器（例えば、パーソナルコンピューター、ゲーム端末）から限られたメモリー及び／又は処理資源を有する小さなリソース装置（例えば、従来のセットトップボックス、携帯用ゲーム端末）と多岐に渡り得る。
【００１３】
[0017]計算装置（１００）は、ソフトウェアコンポーネント設定格納制御モジュール（１０２）及びソフトウェアコンポーネント状態ストア（１０４）を含む。ソフトウェアアプリケーションとしても参照される２つのソフトウェア製品（１０６）及び（１０８）が計算装置（１００）に含まれるように例示されている。２つのソフトウェア製品（１０６）及び（１０８）が図１の例に示されているが、代替として、計算装置（１００）に２つより少ないか又は２つより多いソフトウェア製品を含み得る。ソフトウェア製品（１０６）及び（１０８）それぞれは、１つ以上のソフトウェアコンポーネントを含む。図１の例において、ソフトウェア製品（１０６）は、ソフトウェアコンポーネント（１１２）、ソフトウェアコンポーネント（１１４）、及びソフトウェアコンポーネント（１１６）を含むが一方、ソフトウェア製品（１０８）は、ソフトウェアコンポーネント（１１６）及びソフトウェアコンポーネント（１１８）を含む。図１に見られ得るように、異なる複数のソフトウェア製品が、ソフトウェアコンポーネント（例えばソフトウェアコンポーネント（１１６））を共有し得る。
【００１４】
[0018]ソフトウェアコンポーネント設定格納制御モジュール（１０２）は、ソフトウェアコンポーネント状態ストア（１０４）内のソフトウェアコンポーネント（１１２〜１１８）に関する少なくともいくつかの設定の格納とそれに対するアクセスと、を管理する。これらの設定は、ソフトウェアコンポーネント（１１２〜１１８）に関する構成情報であって、ソフトウェアコンポーネント（１１２〜１１８）の異なる実行全域で制御モジュール（１０２）によって持続される。ソフトウェアコンポーネント（１１２〜１１８）それぞれに関する複数の異なる設定が、制御モジュール（１０２）によって管理され得る。異なるこれらの設定それぞれが、より詳細に後述されるアイデンティティ設定及び１つ以上の設定値を有している。ソフトウェアコンポーネント（１１２〜１１８）によって格納される特定の設定及びソフトウェアコンポーネント（１１２〜１１８）がこれらの設定をどのように使用するかは、個々のソフトウェアコンポーネント（１１２〜１１８）の開発者によって決定される。しかしながら、設定値（単数又は複数）の格納は、制御モジュール（１０２）によって制御され管理される。
【００１５】
[0019]図１に見られるように、ソフトウェア製品それぞれは、１つ以上のソフトウェアコンポーネントから構成される。ソフトウェア製品のソフトウェアコンポーネントは、計算装置（１００）上で実行され得る命令及びデータを含んでいて、ソフトウェアコンポーネントと一緒にソフトウェア製品の機能性を提供している。概して、制御モジュール（１０２）に対するアクセスは、ソフトウェア製品によって実行されるというよりもむしろ、実行中、ソフトウェアコンポーネントによって実行される。
【００１６】
[0020]図２は、１つ以上の実施形態によるソフトウェアコンポーネントの例（２００）を示している。ソフトウェアコンポーネントは、ソフトウェアコンポーネントを記述している１つ以上のファイル及びメタデータ双方の集まりである。ソフトウェアコンポーネント（２００）は、ソフトウェアコンポーネント（２００）に関する様々な命令及び／又はデータをそれぞれ格納している１つ以上のリソースファイル（２０２）を含む。ソフトウェアコンポーネント（２００）に含まれる特定のリソースファイル（２０２）は、ソフトウェアコンポーネント（２００）の開発者の所望に基づいて変化し得る。
【００１７】
[0021]宣言部（２０４）は、ソフトウェアコンポーネント（２００）を記述しているメタデータを格納している。１つ以上の実施形態において、宣言部（２０４）は、１つ以上のソフトウェアコンポーネント（２００）の識別子、ソフトウェアコンポーネント（２００）のバージョン番号、及びソフトウェアコンポーネント（２００）に関する（まとめて「設定スキーマ」として参照される）１つ以上のパブリック設定宣言を含む。ソフトウェアコンポーネント（２００）の識別子によって、ソフトウェアコンポーネント（２００）は、機器にインストールされた別のソフトウェアコンポーネントを区別可能になる。識別子は、ソフトウェアコンポーネント（２００）の開発者によって割り当てられた名前、ソフトウェアコンポーネント（２００）の開発者の識別子、ソフトウェアコンポーネント（２００）の配布者又は発行者の識別子、ソフトウェアコンポーネント（２００）のバージョン番号など、に基づいて異なる様々な方法で生成され得る。
【００１８】
[0022]ソフトウェアコンポーネント（２００）のバージョン番号は、ソフトウェアコンポーネント（２００）の異なるバージョンを容易に識別可能にする。１つ以上の実施形態において、２つの異なるバージョン番号である契約バージョン番号及びサービスバージョン番号が、宣言部（２０４）に含まれる。代替として契約バージョン番号及びサービスバージョン番号は、１つ以上のエレメントが契約バージョン番号であって１つ以上のエレメントがサービスバージョン番号である複数のエレメント数と一緒に結合され得る。これらのバージョン番号は、より詳細に後述される特定の状況において、ソフトウェアコンポーネント（２００）の更新を容易にするために使用され得るが一方、以前の設定を保持している。
【００１９】
[0023]宣言部（２０４）に宣言されているパブリック設定スキーマは、ソフトウェアコンポーネントによって活用される１つ以上のパブリック設定それぞれの名前、データタイプ、及びデフォルト値を定義している。その特定の設定に対するソフトウェアコンポーネントの実行時のアクセスが、正しいフォーマットであることを保障するためのスキーマのパブリック設定宣言それぞれが、格納コントロールマネージャによって活用される（正しいフォーマットの検証は、図１の格納制御モジュール（１０２）の役割の１つである）。宣言されたパブリック設定それぞれに関連付けられた値（例えば、より詳細に後述されるデフォルト値、ソフトウェアコンポーネントによって書き込まれるソフトウェアの値、及び値のオーバーライドポリシー）が、ソフトウェアコンポーネント（２００）の異なる実行の全域で持続される。例えば、ソフトウェアコンポーネント（２００）の実行が終了され得、後で再開され得、再開されたとき、ソフトウェアコンポーネント（２００）の設定に関して格納されている値がリトリーブされ得、ソフトウェアコンポーネント（２００）が、実行終了前と同一の設定値を有する同一の設定を有することを可能にする。
【００２０】
[0024]設定スキーマに宣言された特定の設定は、整数、文字列、ブールのようなオペレーティングシステムに定義されている低レベルのデータタイプのいくつかのうち１つを用いて宣言される。より複雑なデータタイプをこの一連の基本データタイプの複合物として表すための複数の設定が、設定スキーマに宣言され得る。画面の（例えばユーザーインターフェースの部品がどこに表示されるか識別する）場所などの情報、フォントサイズ及び／又は書体、選択言語、デフォルトの格納場所、選択ボリュームレベルなど、特定の入力装置を利用可能にするか又は利用不可にすることを示すパブリック設定が、例えば、宣言され得る。
【００２１】
[0025]ソフトウェアコンポーネント（２００）によって格納された値に関する設定は、ユーザーデータというよりもむしろソフトウェア状態を参照することに留意されたい。ソフトウェア状態は、たとえソフトウェア状態の値がユーザーのリクエストに応答して変更され得ても、オペレーティングシステム（又は代替として別のアプリケーション）によって管理される場所及び存在期間を有するデータを参照している。他方において、ユーザーデータは、ユーザーによって明示的に管理されている場所及び存在期間を有する（例えば、特定のドキュメントファイル、画像ファイル、音楽ファイルなどの）データファイルを参照している。
【００２２】
[0026]ソフトウェアコンポーネント（２００）は、パブリック設定及び／又はプライベート状態を格納し得る。プライベート状態は、非スキーマ化（すなわち、プライベート状態が設定宣言においてスキーマ化されていない）情報を参照していて、その構造及びデータタイプがソフトウェアコンポーネントの実装によって決定される。プライベート状態及びその格納は、より詳細に後述される。
【００２３】
[0027]パブリック設定は、他方において（図１のモジュール（１０２）のような）ソフトウェアコンポーネント設定格納制御モジュールによって管理される状態を参照している。宣言部（２０４）は、設定の身元、格納された設定に関する情報タイプ、及び任意として設定に関するデフォルト値を識別する、パブリック設定それぞれに関する設定宣言を含む。
【００２４】
[0028]１つ以上の実施形態において、宣言部（２０４）におけるパブリック設定宣言は、３つのエレメントである名前、タイプ、及びデフォルト値を含んでいる。名前は、パブリック設定を識別する呼称を指定し、ソフトウェアコンポーネント（２００）によって使用される別のパブリック設定からパブリック設定を区別する。パブリック設定に関するタイプは、データタイプ（例えば、特定の値を格納するために使用されるサイズ、フォーマット、及びセマンティクス）を識別する。整数、ブール値、文字列、日付、及び／又は時刻値、ファイル若しくはディレクトリーに対する参照など、異なる様々な設定タイプが支援され得る。デフォルト値は、ソフトウェアコンポーネント（２００）の開発者によって定義されるパブリック設定に関するデフォルト値を識別する。より詳細に後述されるようにこのデフォルト値は、設定値がたとえ後で変更され得ても保持される。１つ以上の実施形態において、それぞれ設定値は、デフォルト値を有しているが、空文字列のデフォルト値、「空」の値、又は０などが使用され得る。別の実施形態においては、どんなデフォルト値も開発者によって提供され得ない。
【００２５】
[0029]図１に戻ると、ソフトウェアコンポーネント（１１２〜１１８）それぞれは、プライベート状態及び／又はパブリック設定を保持し得る。ソフトウェアコンポーネント（１１２〜１１８）それぞれは、それが所望している制御モジュール（１０２）にそのプライベート状態を事前宣言することが制約されないどんなデータも情報も格納し得る。しかしながら、プライベート状態のデータの場所は、オペレーティングシステムによって制御される。計算装置（１００）のオペレーティングシステムの格納制御モジュール（１０２）又は代替として別のコンポーネント若しくはモジュールが、１つ以上のファイルシステム階層構造の場所か又はそれがそのプライベート状態を格納し得る別のレジストリ情報ストアをソフトウェアコンポーネントそれぞれに提供する。
【００２６】
[0030]他方ではパブリック設定は、格納制御モジュール（１０２）によって管理されている設定を参照している。ソフトウェアコンポーネント（１１２〜１１８）それぞれは、モジュール（１０２）にパブリック設定として保持させたい特定の設定を、事前に宣言する。この事前宣言は、例えば、前述したように宣言部のパブリック設定宣言を使用することによって実行される。パブリック設定宣言は、パブリック設定にアクセスしようとするソフトウェアコンポーネント実行前のモジュール（１０２）に対する事前の宣言である。
【００２７】
[0031]パブリック設定の事前宣言は、それらの設定に適切なフォーマットの正確な仕様を制御モジュール（１０２）に提供する。そのパブリック設定を事前宣言することによって、ソフトウェアコンポーネントが、事前に宣言されたパブリック設定だけにアクセスするように制約される。例えば、状態が事前宣言された名前を有すること、事前宣言された設定値タイプを有すること、事前宣言されたデフォルト値を有すること、が制御モジュール（１０２）によって制約される。
【００２８】
[0032]図３は、１つ以上の実施形態によるソフトウェアコンポーネント設定値に対するアクセスコントロールを実装している計算装置の例（３００）を示している。計算装置（３００）は、例えば、図１の計算装置（１００）であり得る。説明を容易にするために、単一のソフトウェアコンポーネント（３０４）を有するソフトウェア製品（３０２）が図３に例示されている。しかしながら、前述したように複数のソフトウェアコンポーネントがソフトウェア製品に含まれ得ることを十分に理解されよう。
【００２９】
[0033]ソフトウェアコンポーネント（３０４）は、パブリック設定及び／又はプライベート状態をソフトウェアコンポーネント状態ストア（３０６）に格納し得る。ソフトウェアコンポーネント状態ストア（３０６）は、例えば、図１のストア（１０４）であり得る。ストア（３０６）のプライベート状態部（３０８）は、任意の情報をソフトウェアコンポーネント開発者の裁量で計算装置（３００）のオペレーティングシステムによって決定される場所に格納するが一方、ストア（３０６）のパブリック設定部（３１０）は、パブリック設定を格納する。ソフトウェアコンポーネント（３０４）は、プライベート状態部（３０８）に直接アクセスし、セーブし、リトリーブし、さもなければ、所望に応じて、計算装置（３００）のオペレーティングシステムによって指定された場所のプライベート状態にアクセスし得る。ソフトウェアコンポーネント（３０４）は、オペレーティングシステムによってこの場所が通知され得るか、又は代替としてその場所がオペレーティングシステムによって抽出され得、ソフトウェアコンポーネントが、オペレーティングシステムによって公開された１つ以上のアプリケーションプログラミングインターフェース（ＡＰＩ）の方法を介し、プライベート状態部（３０８）にアクセスし得る。
【００３０】
[0034]しかしながら、ソフトウェアコンポーネント（３０４）は、ソフトウェアコンポーネント設定格納制御モジュール（３１２）を介しパブリック設定部（３１０）にアクセスする。制御モジュール（３１２）は、典型的に、計算装置（３００）上で実行するオペレーティングシステムの一部として実装され得るが、制御モジュール（３１２）は、代替として、別個のモジュール又はコンポーネントとして実装され得る。したがって、ソフトウェアコンポーネント（３０４）からパブリック設定部（３１０）をセーブし、リトリーブするか、又はさもなければストア（３０６）にアクセスするためのリクエストが、ソフトウェアコンポーネント（３０４）によって直接的というよりむしろモジュール（３１２）によって実行される。制御モジュール（３１２）は、例えば、図１の制御モジュール（１０２）であり得る。
【００３１】
[0035]ソフトウェアコンポーネント（３０４）によって使用されるパブリック設定名称は、格納制御モジュール（３１２）に対するパブリック設定を識別し、モジュール（３１２）は、パブリック設定をソフトウェアコンポーネント（３０４）によって使用される別のパブリック設定から区別可能にする。モジュール（３１２）は、前述したような命名されたパブリック設定を検証するために設定スキーマを活用する。ソフトウェアコンポーネント（３０４）によって使用されるこのパブリック設定名称は、設定スキーマに宣言された設定名称であり得るか、又は代替としてパブリック設定に関する設定スキーマ及び／又はより複雑な呼称で宣言されたシステムを調整するための、より複雑なタイプの設定名称に関連付けられた別の名前であり得る。
【００３２】
[0036]プライベート状態部（３０８）は、任意として、使い捨て状態部（３１４）も含む。使い捨て状態部（３１４）は、小さな値として見なされ、削除され得るプライベート状態を格納しているが、一方ソフトウェアコンポーネント（３０４）の適切な動作を保持している。１つ以上の実施形態において、使い捨て状態部（３１４）は、ストア（３０６）から削除された後、容易に再決定され得るプライベート状態を格納する。例えば、ソフトウェアコンポーネント（３０４）は、使い捨て状態部（３１４）を性能キャッシュタイプとして使用し得、ソフトウェアコンポーネント（３０４）が別のいくつかのソフトウェアコンポーネントから算出又は取得する情報（例えば、長い計算の中間結果）を格納し得る。ソフトウェアコンポーネント（３０４）が情報を使用することを所望するたびに情報を再計算又は再取得するというよりもむしろ、使い捨て状態部（３１４）から情報をリトリーブすることによってソフトウェアコンポーネント（３０４）の性能が改善され得る。しかしながら、使い捨て状態部（３１４）が削除された場合、情報は更に、再算出され得るか又は再取得され得、ソフトウェアコンポーネント（３０４）の適切な動作を維持する。
【００３３】
[0037]使い捨て状態部（３１４）を有すると、異なる様々な用法シナリオを利用容易にし得る。例えば、異なる複数のリセットレベルが使用され得、その１つが、より詳細に後述される使い捨て状態部（３１４）内のプライベート状態の削除であり得る。別の例として、ストレージ空間の要求が所望されたとき、使い捨て状態部（３１４）内の情報が削除され得、使い捨て状態部（３１４）が別の用途のために再要求され得る。
【００３４】
[0038]計算装置（３００）のソフトウェアコンポーネント設定格納制御モジュール（３１２）又はオペレーティングシステムの別のコンポーネント又はモジュールは、ソフトウェアコンポーネント状態ストア（３０６）を制御する。この制御は、ストア（３０６）の場所（例えば、特定の記憶装置又は機器、特定のファイルシステムパスなど）と、ストア（３０６）が組織化される（例えば、ファイルシステム階層構造、テーブル、リストなどを使用する）方法と、を含む。
【００３５】
[0039]ソフトウェアコンポーネント状態ストア（３０６）は、異なる様々な方法で実装され得る。例えば、ストア（３０６）は、１つ以上のテーブル、１つ以上のデータベース、１つ以上のリスト、他のレコードなどを使用した（例えば、図４を参照して、より詳細に後述される）ファイルシステムの階層構造を使用し実装され得る。
【００３６】
[0040]１つ以上の実施形態において、ソフトウェアコンポーネント状態ストア（３０６）は、計算装置（３００）の異なるユーザー及び異なるソフトウェアコンポーネント（３０４）に対して使用される異なるフォルダーを使用したファイルシステム階層構造で実装され得る。ファイルシステム階層構造の一部はプライベート状態部（３０８）に関連付けられ得るが、一方ファイルシステム階層構造の別の部分はパブリック設定部（３１０）に関連付けられ得る。
【００３７】
[0041]図４は、１つ以上の実施形態によるソフトウェアコンポーネント設定を格納するためのファイルシステム階層構造の例を示すブロック図である。図４は、例えば、図３のストア（３０６）又は図１のストア（１０４）であり得るソフトウェアコンポーネント状態ストア（４００）を例示している。
【００３８】
[0042]図４に例示されるように、トップレベル又は第１のレベル（４０４）、第２のレベル（４０６）、第３のレベル（４０８）、及び第４のレベル（４１０）を有するストア（４００）が統合化される。第１のレベル（４０４）は、ユーザーに関するディレクトリー又はフォルダーを格納している。計算装置上において、異なるユーザーが利用可能な特定のソフトウェアコンポーネントが変化し得、異なるユーザーによって使用される同一のソフトウェアコンポーネントが、異なるパブリック設定及び／又はプライベート状態を有し得る。図４の例において、単一のユーザー（ユーザーＡ）が存在しているが、代替としてトップレベル（４０４）は、計算装置上の更なるユーザーそれぞれに関する更なるディレクトリー又はフォルダーを含み得る。
【００３９】
[0043]第２のレベル（４０６）は、ソフトウェアコンポーネントに関するディレクトリー又はフォルダーを格納している。異なるソフトウェアコンポーネントに関する設定が異なる場所に格納される。ソフトウェアコンポーネントそれぞれは、トップレベル（４０４）のフォルダーの下にそれ自身のサブディレクトリー又はサブフォルダーを有する。図４の例において、２つのソフトウェアコンポーネントが存在しているが、代替として第２のレベル（４０６）は、更なるソフトウェアコンポーネントに関する更なるディレクトリー又はフォルダーを含んでいるか、又は代替として単一のソフトウェアコンポーネントに関するディレクトリー又はフォルダーを含み得る。
【００４０】
[0044]第３のレベル（４０８）は、パブリック設定及びプライベート状態に関するディレクトリー又はフォルダーを格納している。ソフトウェアコンポーネントそれぞれは、パブリック設定及びプライベート状態を有し得、パブリック設定及びプライベート状態を格納するための別個のディレクトリー又はフォルダーが、第３のレベル（４０８）に含まれる。公的サブディレクトリー又はサブフォルダー、及び私的サブディレクトリー又はサブフォルダーが、第３レベル（４０６）のソフトウェアコンポーネントディレクトリー又はフォルダーそれぞれの下に含まれる。ソフトウェアコンポーネントに関するパブリック設定を格納している１つ以上のファイルは、ソフトウェアコンポーネントに関するフォルダーの下の公的サブフォルダーに含まれ得る。パブリック設定それぞれに関する別個のファイルは公的サブフォルダーに含まれ得るか、又は代替として複数のパブリック設定は公的サブフォルダー内のファイルに含まれ得る。
【００４１】
[0045]第４のレベル（４１０）は、使い捨てのプライベート状態に関するディレクトリー又はフォルダーを格納している。プライベート状態は、前述したように使い捨て状態を含み得る。使い捨てプライベート状態に関する情報は、第４のレベル（４１０）の「使い捨て」サブフォルダー内の１つ以上のファイルとして格納されるが、一方、別のプライベート状態に関する情報は、第３レベル（４０８）の私的サブフォルダー内の１つ以上のファイルとして格納される。
【００４２】
[0046]図３に戻ると、ソフトウェアコンポーネント設定格納制御モジュール（３１２）は、１つ以上のパブリック設定宣言（３２０）を取得する。パブリック設定宣言（３２０）それぞれは、前述したようにソフトウェアコンポーネント（３０４）に関する事前設定宣言である。１つ以上の実施形態において、パブリック設定宣言（３２０）は、ソフトウェアコンポーネント（３０４）が計算装置（３００）にインストールされたとき、インストールコンポーネント若しくはモジュールによって制御モジュール（３１２）に提供される。代替として、制御モジュール（３１２）は、異なる方法でパブリック設定宣言（３２０）を取得し得る。例えば、パブリック設定宣言（３２０）は、制御モジュール（３１２）によって、（例えば、インターネット又は別のネットワークを介し）リモートサービスから、計算装置（３００）の別のローカルストア（取り外し可能又は固定の計算機記憶媒体）から、別のリモートサービス又はソースから、別の計算装置、などからリトリーブされ得る。
【００４３】
[0047]一旦、取得されると、制御モジュール（３１２）は、パブリック設定宣言（３２０）を実行する。実行中、制御モジュール（３１２）は、パブリック設定部（３１０）のパブリック設定にアクセスするためのリクエストをソフトウェアコンポーネント（３０４）から受信する。制御モジュール（３１２）は、アクセスをチェックし、それらがパブリック設定宣言（３２０）に従っているか検証する。例えば、制御モジュール（３１２）は、設定アイデンティティ及びアクセスタイプが、パブリック設定宣言（３２０）に宣言された設定アイデンティティ及びタイプに従っていることを検証する。
【００４４】
[0048]制御モジュール（３１２）は、アプリケーションプログラミングインターフェース（ＡＰＩ）（３２６）も公開して、ソフトウェアコンポーネント（３０４）が、ソフトウェアコンポーネント（３０４）のパブリック設定に対するアクセスをリクエスト可能にする。パブリック設定に関するソフトウェアの値を書き込み、パブリック設定の実効値を読み出し、パブリック設定スキーマを列挙し、ソフトウェアコンポーネント（３０４）に関する設定の有効値をデフォルト値へ元に戻すために、既に書き込まれたパブリック設定に関するソフトウェアの値を除去するなど、異なる様々なアクセスが許可される。
【００４５】
[0049]パブリック設定に関するソフトウェアの値が書き込まれることをリクエストするために、ソフトウェアコンポーネント（３０４）は設定名称及び所望される値を提供する。パブリック設定に関するソフトウェアの値を書き込むことによって、ソフトウェアコンポーネント（３０４）は、設定の事前宣言の一部として開発者によって設定されたデフォルト値を上書きし得る。
【００４６】
[0050]パブリック設定に関するソフトウェアの値が書き込まれるリクエストに応答して、制御モジュール（３１２）は、リクエストが設定に関する事前宣言フォーマットに従っていることを検証する。この検証は、リクエストに含まれている設定名称が事前に宣言されていることを検証することと、所望される値のタイプが設定に関して事前に宣言されたものと同一であることを検証することと、を含む。設定に関するリクエストが、事前に宣言されているフォーマットに従っている場合、パブリック設定部（３１０）に提供されている名前に対する値を格納することによってリクエストが実行される。しかしながら、設定に関するリクエストが事前宣言されたフォーマットに従っていない場合、リクエストは拒否される。
【００４７】
[0051]例えば、特定の値が特定の設定に対する値として書き込まれる、ソフトウェアコンポーネント（３０４）のリクエストを仮定されたい。特定の設定名称が、ソフトウェアコンポーネント（３０４）に関する事前宣言された設定名称でない場合、制御モジュール（３１２）はリクエストを拒否する。特定の設定名称が、ソフトウェアコンポーネント（３０４）に関する事前宣言された設定名称と一致している（同一である）がしかし、設定タイプが異なっている（例えば、命名された設定に対する設定タイプが、ブール値として事前宣言されているが、書き込みを試みる値が文字列値である）場合、制御モジュール（３１２）はリクエストを拒否する。しかしながら、特定の設定名称が、ソフトウェアコンポーネント（３０４）に関する事前宣言された設定名称と一致していて（同一であって）、かつ、設定タイプが、事前宣言された設定名称に関する事前宣言された設定タイプと一致している（同一である）場合、制御モジュール（３１２）はリクエストを実行する。
【００４８】
[0052]設定に関する値が読み出されるリクエストに応答して、制御モジュール（３１２）は、リクエストが、設定に関して事前に宣言されたフォーマットに従っていることを検証する。この検証は、リクエストに含まれている設定名称が、事前に宣言されていることを検証することを含む。リクエストが、設定に関して事前に宣言されたフォーマットに従っている場合、リクエストは、パブリック設定部（３１０）からリクエストに指定された設定に関する値をリトリーブすることによって実行される。リクエストに指定された設定に関する複数の値が、格納されたとき、より詳細に後述されるように、リトリーブされる複数の値の特定の１つが、様々なアルゴリズム又はルールに従って決定され得る。しかしながら、リクエストが事前に設定宣言フォーマットに従っていない場合、リクエストは拒否される。
【００４９】
[0053]制御モジュール（３１２）がパブリック設定部（３１０）に対するアクセスを管理しているので、ソフトウェアコンポーネント（３０４）が設定に関する不正な値のタイプの書き込みすることと、別の設定に関する値を気付かずに上書きすることとを、制御モジュール（３１２）が防止し得ることを十分に理解されよう。ソフトウェアコンポーネント（３０４）は、パブリック設定部（３１０）に直接アクセスしない。むしろ、制御モジュール（３１２）は、ソフトウェアコンポーネント（３０４）からのリクエストに応答してパブリック設定部（３１０）にアクセスし、パブリック設定部（３１０）の適切な場所に値を書き込む。ソフトウェアコンポーネント（３０４）が別のソフトウェアコンポーネントの設定に関する値を気付かずに上書きすることをこのモジュール（３１２）による制御が、防止することにも留意されたい。例えば、異なるソフトウェアコンポーネントに関するパブリック設定は、（その実施形態例が図４を参照して前述された）定義によって異なるストアに保持される。ストアが別々に保持されるので、異なるソフトウェアコンポーネントの設定宣言に関するソフトウェアの値の修正が、別の任意のコンポーネントに関連付けられたソフトウェアの値を修正する懸念の必要がない。加えると、前述したように、制御モジュール（３１２）は、異なるユーザーに関するパブリック設定をパブリック設定部（３１０）の異なる部分に格納し得る。別のコンポーネント又はモジュールと通信し、計算装置（３００）に現在ログインされている特定のユーザーを識別し、計算装置（３００）のプロセッサーを使用するために現在割り当てられている特定のユーザーを識別するような異なる様々な方法で計算装置（３００）の現在のユーザーが決定され得る。したがって、異なるユーザーが同一のソフトウェアコンポーネントを使用していても異なるユーザーに関する異なるパブリック設定が格納される。
【００５０】
[0054]加えると、ソフトウェアコンポーネント（３０４）の実行が、典型的に生成されるソフトウェアコンポーネント（３０４）の実体として参照されるものをもたらす。１つ以上の実施形態において、ソフトウェアコンポーネント（３０４）の複数の異なる実体が、同一の現在ユーザーに対し同時に実行され得る。例えば、リクエストが、ユーザー及び／又は別のコンポーネント若しくはモジュールから受信され得、同一のソフトウェアコンポーネント（３０４）を同時に複数回、実行し得る。上記状況において、異なる複数のこれらの実体が、パブリック設定部（３１０）の同一部分を共有する。したがってソフトウェアコンポーネント（３０４）の一実体によって（制御モジュール（３１２）を介し）パブリック設定部（３１０）に書き込まれた設定値は、ソフトウェアコンポーネント（３０４）の別の実体によって（制御モジュール（３１２）を介し）後で読み出され得る。同様に、異なる複数のこれらの実体も同一のプライベート状態部（３０６）の一部を共有する。
【００５１】
[0055]例えば、ソフトウェアコンポーネント（３０４）はスクラッチパッド機能性を提供し、ユーザーがテキストノートを生成し、セーブ可能なことを仮定されたい。異なるソフトウェアコンポーネント（３０４）の実体が同一のパブリック設定を共有し、所望の言語、フォントサイズ、字体の変化など、設定変更がソフトウェアコンポーネント（３０４）の複数の実体に対し同一であるように設定可能にする。
【００５２】
[0056]本明細書に論述したように、制御モジュール（３１２）は、ソフトウェアコンポーネントベース上でパブリック設定に対するアクセスを管理することに留意されたい。ソフトウェア製品がパブリック設定に対するアクセスをリクエストするというよりもむしろ、ソフトウェア製品を構成する個々のソフトウェアコンポーネントが、パブリック設定に対するアクセスをリクエストする。したがって、あるソフトウェア製品の一部として実行しているとき、ソフトウェアコンポーネントによってパブリック設定に実行される変更は、別のソフトウェア製品の一部として実行したとき、後で、そのソフトウェアコンポーネントによってリトリーブされ得ることを十分に理解されよう。
【００５３】
[0057]１つ以上の実施形態において、ソフトウェアコンポーネント設定格納制御モジュール（３１２）は、同一設定に関する複数の異なる値を保持する。異なるこれらの値は、（デフォルト値を提供する）開発者、ソフトウェアコンポーネント（３０４）、計算装置（３００）の管理者、計算装置（３００）が接続されたネットワークの管理者など、異なるエンティティによって提供され得る。異なるこれらの値は、開発者が提供するデフォルト値を上書きするための管理者オーバーライド値、ソフトウェアコンポーネント（３０４）によって設定された値を上書きするための管理者オーバーライド値など、別の特定の値を上書きするために提供される。管理者のオーバーライド値は、値のオーバーライドポリシーとしても参照され得る。異なるこれらの値は、パブリック設定部（３１０）などの別の部分に異なる方法で保持され得る。例えば、（例えば、図４のレベル（４０８）の）パブリックフォルダーは、異なるエンティティに対応する複数のサブフォルダー、サブフォルダーそれぞれを有し得る。別の例として、ソフトウェアコンポーネント（３０４）からの値は（例えば、図４のレベル（４０８）の）パブリックフォルダーに保持され得るが、別のエンティティからの値は、別のフォルダー、テーブル、リストなどに保持される。制御モジュール（３１２）又は別のコンポーネント若しくはモジュールは、上記フォルダー、テーブル、リストなどに対するアクセス権を課すことができ、制御モジュール（３１２）は上記フォルダー、テーブル、リストなどにアクセス可能になるが、しかし、ソフトウェアコンポーネント（３０４）が上記フォルダー、テーブル、リストなどにアクセスすることを防止する。
【００５４】
[0058]異なるこれらのエンティティは、異なる様々な方法でそれらの設定に関する値それぞれを提供し得る。開発者からのデフォルト値は、前述したようにパブリック設定宣言（３２０）において提供され得る。ソフトウェアコンポーネント（３０４）からの値は、ＡＰＩ（３２６）を介し書き込みリクエストに含まれ得る。管理者からの値は、ＡＰＩ（３２６）を介し書き込みリクエストに含まれ得、別のインターフェースを介し制御モジュール（３１２）に提供され得、管理者又は別のコンポーネント若しくはモジュールなどによって知られている（管理者及び制御モジュール（３１２）双方に知られている）ストア（３０６）（又は別のストア）場所に格納され得る。
【００５５】
[0059]１つ以上の実施形態において、値を書き込むか又は代替として値を格納するエンティティは、本質的に、書き込み又はストアが生じる方法に基づいて与えられる。例えば、パブリック設定宣言（３２０）における値は、開発者からのデフォルト値であって、ＡＰＩ（３２６）を介し受信された値は、ソフトウェアコンポーネント（３０４）からの値などである。代替として、値を書き込むエンティティ又は代替として格納するエンティティは別の方法で識別され得る。例えば、エンティティは、書き込みリクエストを実行する前にそれ自体の識別子を提供し得、エンティティは、書き込みリクエストの一部としてそれ自体の識別子などを提供し得る。
【００５６】
[0060]ソフトウェアコンポーネント（３０４）が設定に関する値を読み出すためのリクエストをしたとき、ソフトウェアコンポーネント（３０４）は、それがリクエストしている設定に関する複数の値のどれかを識別し得る。例えば、ソフトウェアコンポーネント（３０４）は、それがデフォルト値、ソフトウェアコンポーネント（３０４）によって設定された値をリクエストしているかなど、識別し得る。１つ以上の実施形態において、ソフトウェアコンポーネント（３０４）は、それがリクエストしている複数の値に関する識別子をリクエストに含めることによって、それがリクエストしている設定に関する複数の値のどれかを識別する。代替として、ソフトウェアコンポーネント（３０４）は、異なる値に関するＡＰＩ（３２６）の異なる方法を呼び出すなど別の方法（例えば、デフォルト値、以前にソフトウェアコンポーネント（３０４）によって設定された値を読み出す別の方法を読み出すための一方法など）でそれが設定に関する複数の値のどれをリクエストしているか識別し得る。
【００５７】
[0061]１つ以上の実施形態において、ソフトウェアコンポーネント（３０４）は、それが設定に関する「実効値」を読み出すことをリクエストしていることを識別し得る。上記リクエストに応答して、制御モジュール（３１２）は、（読み出しリクエストが、設定事前宣言フォーマットに従っていることが検証されていることと仮定し）設定に関する実効値を決定し、実行値をソフトウェアコンポーネント（３０４）へ返却する。実効値は、設定に関し格納された値の１つであって、特定のアルゴリズム又は一連のルールに従って決定された特定の値を有している。このアルゴリズム又は一連のルールは、複数の値のどれが、複数の値の別の上位の優先度を有していて、ひいては設定値に関するリクエストに応答して返却される値を記述している。
【００５８】
[0062]１つ以上の実施形態において、制御モジュール（３１２）は、以下のルールに従って実効値を決定する。管理者によって設定された設定に関する値が存在する場合、その値が実効値である。さもなければ、ソフトウェアコンポーネント（３０４）によって設定された設定に関する値が存在する場合、その値が実効値である。さもなければ、デフォルト値が実効値である。
【００５９】
[0063]１つ以上の別の実施形態において、制御モジュール（３１２）は、以下のルールに従って実効値を決定する。ソフトウェアコンポーネント（３０４）によって設定された値を上書きする管理者オーバーライド値が存在する場合、その値が実効値である。さもなければ、ソフトウェアコンポーネント（３０４）によって設定された設定に関する値が存在する場合、その値が実効値である。さもなければ、設定されたデフォルト値を上書きする管理者オーバーライド値が存在する場合、その値が実効値である。さもなければ、デフォルト値が実効値である。
【００６０】
[0064]加えると、１つ以上の実施形態において、パブリック設定は、原始的ユニットを形成するために一緒に分類され得る。複数のパブリック設定が一緒に分類されるとき、制御モジュール（３１２）は、分類された設定をグループとしてパブリック設定部（３１０）に一緒に書き込む。ソフトウェアコンポーネント（３０４）（その又は異なるインスタンス）が所望された場合、パブリック設定に一緒に分類されたこれらのうち個々の１つの読み出し及び／又は書き込みのアクセスをし得るが、モジュール（３１２）は、それらがグループとして設定部（３１０）に書き込まれることを保証する。
【００６１】
[0065]例えば、表示される矩形の場所を識別するための４つの値（例えば左上の「ｘ」次元の値、左上の「ｙ」次元の値、右下の「ｘ」次元の値、及び右下の「ｙ」次元の値）が使用され得る。これらの４つの値それぞれは、異なるパブリック設定であり得、これらの４つのパブリック設定が一緒に分類されるものとして宣言され得る。したがって、制御モジュール（３１２）が、ソフトウェアコンポーネント（３０４）からこれらの４つの値のうち１つ以上を書き込むためのリクエストを受信した場合、制御モジュール（３１２）が４つの値すべてを設定部（３１０）に書き込む。制御モジュール（３１２）は、その結果、ソフトウェアコンポーネントの１つの実体がパブリック設定部（３１０）に格納されている４つの値のうち１つを書き込む状況−この例においては格納される座標が無意味であることをもたらし得る状況−が発生する状況を防止する。
【００６２】
[0066]加えると、１つ以上の実施形態において、ＡＰＩ（３２６）は、ソフトウェアコンポーネント（３０４）がそれ自身のパブリック設定にアクセス可能にするための１つ以上の方法を公開する。異なるタイプのアクセス（例えば、読み出しアクセス、書き込みアクセス、アクセスの列挙など）を可能にする異なる方法が公開され得る。以下の表Ｉは、ソフトウェアコンポーネント（３０４）によって呼び出され得る上記方法例を説明している。
【００６３】
【表１】
2012530297.tif 000003
【００６４】
[0067]図５は、１つ以上の実施形態による値を設定するソフトウェアコンポーネントに対するアクセスを制御する装置に関するプロセスの例（５００）を示す流れ図である。プロセス（５００）は、ソフトウェア、ファームウェア、ハードウェア、又はその組み合わせで実装され得る図１の計算装置（１００）又は図３の計算装置（３００）のような装置によって実行される。プロセス（５００）は、ソフトウェアコンポーネント設定に対するアクセスを制御するためのプロセスの例であって、異なる図面を参照したソフトウェアコンポーネント設定に対するアクセスを制御する更なる論述が本明細書に含まれている。
【００６５】
[0068]プロセス（５００）において、ソフトウェアコンポーネントに関する１つ以上の設定宣言が受信される（動作５０２）。設定宣言それぞれは、宣言された設定に対するアクセスに適切なフォーマットを示している。設定宣言は、前述したように方異なる様々な法で受信され得る。
【００６６】
[0069]設定宣言の不変レコードが保持される（動作５０４）。このレコードを保持することによって、例えば、その後、宣言される設定に対するアクセスが適切なフォーマットに従っているか検証可能になる。この保持は、例えば、動作（５０２）で受信された宣言部を格納することと、動作（５０２）で受信された宣言部から取得されるデフォルト値を含む設定を格納することと、であり得る。ソフトウェアコンポーネント実装の実行が、設定スキーマを修正し得ないのは、この情報が、発行されたソフトウェアコンポーネントの宣言規約部の不変部分だからである。
【００６７】
[0070]宣言された１つ以上の設定それぞれに関する複数の値が受信される（動作５０６）。複数のこれらの値は、前述したような異なる様々なエンティティなどが提供する値を含み得る。
【００６８】
[0071]受信された複数の値それぞれが、同時に保持される（動作５０８）。複数の値それぞれが格納されるとき、前述したような複数の値の異なる１つが、異なるリクエストに応答して返却され得る。
【００６９】
[0072]図６は、１つ以上の実施形態によるソフトウェアコンポーネント設定値に対するアクセスコントロール装置に関するプロセスの例（６００）を示す流れ図である。プロセス（６００）は、ソフトウェア、ファームウェア、ハードウェア、又はその組み合わせで実装され得る図１の計算装置（１００）又は図３の計算装置（３００）のような装置によって実行される。プロセス（６００）は、ソフトウェアコンポーネント設定に対するアクセスを制御するためのプロセスの例であって、異なる図面を参照したソフトウェアコンポーネント設定に対するアクセスを制御する更なる論述が本明細書に含まれている。
【００７０】
[0073]プロセス（６００）において、設定値にアクセスするためのリクエストが、ソフトウェアコンポーネントから受信される（動作６０２）。このリクエストは、例えば、前述したようなソフトウェアコンポーネント設定格納制御モジュールによって公開されるＡＰＩを介し受信され得る。
【００７１】
[0074]リクエストが宣言された設定に関するフォーマットと比較され（動作６０４）、リクエストが設定に適切なフォーマットに従っているか否かチェックが実行される（動作６０６）。このチェックは、前述したように、設定名称、設定タイプなどのチェック、原子性が保持されるか否かなど、様々な動作を含み得る。
【００７２】
[0075]リクエストが設定に適切なフォーマットに従っている場合、リクエストされたアクセスが実行される（動作６０８）。しかしながら、リクエストが設定に適切なフォーマットに従っていない場合、リクエストされたアクセスは拒否され（６１０動作）、その結果、実行されない。
【００７３】
[0076]本明細書に論述されたソフトウェアコンポーネント状態に対するアクセスコントロール技法は、ソフトウェアコンポーネントに関するパブリック設定全体の制御を提供し、設定値の不注意な上書きを防止することを支援し、開発者が活用するための、より一貫性ある設定モデルを提供する。加えると、本明細書に論述されたソフトウェアコンポーネント状態に対するアクセスコントロール技法は、様々な用法シナリオを提供する。
【００７４】
[0077]１つ以上の実施形態において、ソフトウェアコンポーネント状態に対するアクセスコントロールは、ソフトウェアコンポーネントに関する複数のリセットレベルを可能にする。異なるリセットレベルが使用され得、それぞれがソフトウェアコンポーネントに関するプライベート状態及び／又はパブリック設定を変更する。例えば、１つのリセットレベルは、プライベート状態部の使い捨て状態部内の状態すべてを削除し得るが、プライベート状態部及びパブリック設定部の残りの部分は不変のままにし得る。上記リセット後、（使い捨て状態部以外の）プライベート状態部及びパブリック設定部に保持されているソフトウェアコンポーネントの値は、依然としてソフトウェアコンポーネントにアクセス可能である。別の例として、別のリセットレベルは（情報が使い捨て状態部にあるにもかかわらず）プライベート状態部内の状態すべてを削除し得るが、パブリック設定部は不変のままにし得る。上記リセット後、パブリック設定部に保持されているソフトウェアコンポーネントの設定は、依然としてソフトウェアコンポーネントにアクセス可能である。更に別の例として、更に別のリセットレベルは、ソフトウェアコンポーネントによって設定された値すべてを削除し得、効果的に、ソフトウェアコンポーネントの設定をそれらのデフォルトレベル（パブリック設定宣言に提供されているデフォルト値）に戻す。上記リセット後、ソフトウェアコンポーネントのデフォルト値は、依然としてソフトウェアコンポーネントにアクセス可能である。
【００７５】
[0078]加えると、ソフトウェアコンポーネント状態に対するアクセスコントロールは、ソフトウェアコンポーネントを新しいバージョンにアップグレードすることを可能にするが、一方、前のプライベート状態及びパブリック設定を保持している。前述したようにバージョン番号は、契約バージョン番号及びサービスバージョン番号を含み得る。１つ以上の実施形態において、ソフトウェアコンポーネント設定格納制御モジュールは、たとえサービスバージョン番号が異なっていても、同一の契約バージョン番号を有するソフトウェアコンポーネントを同一のソフトウェアコンポーネントであることを識別する。しかしながら、ソフトウェアコンポーネント設定格納制御モジュールは、異なる契約バージョン番号を有するソフトウェアコンポーネントを異なるソフトウェアコンポーネントとして識別する。したがって、開発者は、同一の契約バージョン番号であるが、しかし新しいサービスバージョン番号を有する新しいバージョンのソフトウェアコンポーネントをリリースでき、ソフトウェアコンポーネントが、依然として以前のバージョンのソフトウェアコンポーネントによって格納されたプライベート状態及びパブリック設定にアクセスできるようにし得る。
【００７６】
[0079]更に、１つ以上の実施形態において、ソフトウェアコンポーネント状態に対するアクセスコントロールは、ソフトウェアコンポーネントのマイグレーションを容易にする。このマイグレーションは、ある計算装置から別のものへのソフトウェアコンポーネントの移動、又はソフトウェアコンポーネントがインストールされた計算装置によって使用されるオペレーティングシステムの変更、を参照し得る。マイグレーションタイプにかかわらず、ソフトウェアコンポーネントに関するパブリック設定及びプライベート状態値が、特定のソフトウェアコンポーネント設定格納部に保持される。特定のこれらの格納部は既知であって、この知識がマイグレーションの間、活用され得、パブリック設定及びプライベート状態値が（異なる計算装置及び／又は異なるオペレーティングシステムへ）ソフトウェアコンポーネントとともにマイグレーションされることが可能になる。
【００７７】
[0080]図７は、１つ以上の実施形態によるソフトウェアコンポーネント状態へのアクセスコントロールを実装するように構成され得る計算装置の例（７００）を示している。計算装置（７００）は、例えば、図１の計算装置（１００）又は図３の計算装置（３００）であり得る。
【００７８】
[0081]計算装置（７００）は、１つ以上のプロセッサー又は演算処理装置（７０２）、１つ以上のメモリー及び／又はストレージコンポーネント（７０６）を含み得る１つ以上の計算機可読媒体（７０４）、１つ以上の入力／出力（Ｉ／Ｏ）装置（７０８）、及び様々なコンポーネント及び機器が相互に通信可能なバス（７１０）を含む。計算機可読媒体（７０４）及び／又は１つ以上のＩ／Ｏ装置（７０８）は、計算装置（７００）の一部として含まれ得るか又は代わりに機器と接続され得る。バス（７１０）は、メモリーバス又はメモリーコントローラーバス、周辺機器用バス、アクセラレイティッドグラフィックスポート、プロセッサーパス又はローカルバスなど、を含む異なる様々なバスアーキテクチャを利用するいくつかのタイプのバス構造の１つ以上を示している。バス（７１０）は、有線バス及び／又は無線バスを含み得る。
【００７９】
[0082]メモリー／ストレージコンポーネント（７０６）は、１つ以上の計算機記憶媒体を表す。コンポーネント（７０６）は、（ランダムアクセスメモリー（ＲＡＭ）などの）揮発性媒体、及び／又は（読み出し専用メモリー（ＲＯＭ）、フラッシュメモリー、光ディスク、磁気ディスクなどの）不揮発性媒体を含み得る。コンポーネント（７０６）は、（例えばＲＡＭ、ＲＯＭ、固定のハードドライブなどの）固定の媒体及び（例えばフラッシュメモリードライブ、取り外し可能ハードドライブ、光学式ディスクなどの）取り外し可能媒体を含み得る。
【００８０】
[0083]本明細書に論述した技法は、１つ以上の演算処理装置（７０２）によって実行される命令を有するソフトウェアに実装され得る。異なる命令が、演算処理装置（７０２）、演算処理装置（７０２）内の様々なキャッシュメモリー、計算装置（７００）の（示されていない）別のキャッシュメモリー、又はその他の計算機可読媒体など、計算装置（７００）の異なるコンポーネントにストアされ得ることを十分に理解されよう。加えると、命令が計算装置（７００）にストアされる場所は、時間が経つにつれて変化し得ることを十分に理解されよう。
【００８１】
[0084]１つ以上の入力／出力装置（７０８）によって、ユーザーは計算装置（７００）にコマンド及び情報を入力可能になり、情報がユーザー、及び／又はその他のコンポーネント又は機器に提示されることも可能になる。入力装置の例は、キーボード、カーソル制御装置（例えばマウス）、マイクロフォン、スキャナーなどを含む。出力装置の例は、表示装置（例えば、モニター又はプロジェクター）、スピーカー、プリンター、ネットワークカードなどを含む。
【００８２】
[0085]様々な技法が、一般的なソフトウェア又はプログラムモジュールの文脈で本明細書に記載され得る。通常、ソフトウェアは、特定のタスクを実行するか又は特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。これらのモジュール及び技法の実装は、いくつかの計算機可読媒体形式を介しストア又は送信され得る。計算機可読媒体は、計算装置によってアクセスされ得る利用可能な単一媒体又は複数媒体のいずれかであり得る。非限定の例として、計算機可読媒体は、「計算機記憶媒体」及び「通信媒体」を含み得る。
【００８３】
[0086]「計算機記憶媒体は」、計算機読込可能命令、データ構造、プログラムモジュール、又はその他のデータのような情報の記憶に関する任意の方法若しくは技術で実装された揮発性媒体及び不揮発性媒体、並びに取り外し可能媒体及び媒体取り外し不可能媒体を含む。計算機記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリー、若しくはその他のメモリー技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）、若しくはその他の光学式記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、若しくはその他の磁気記憶装置、又は所望した情報を格納するために利用され得、計算機によってアクセスされ得る別の任意の媒体、を含むがこれらに限定しない。
【００８４】
[0087]「通信媒体」は典型的に、計算機可読命令、データ構造、プログラムモジュール、又はその他のデータを、搬送波又はその他の移送機構のような変調されたデータ信号で具体化する。通信媒体は、任意の情報伝達媒体も含む。用語「変調データ信号」は、信号内の情報を符号化する方法によって設定又は変更されたその１つ以上の特性を有する信号を意味している。非限定の例として、通信媒体は、有線ネットワーク又は直接有線接続のような有線媒体、及び音響、ＲＦ、赤外線、及びその他のワイヤレス媒体のような無線媒体などを含む。上記のうち、任意の組み合わせも計算機可読媒体の範囲内に含まれる。
【００８５】
[0088]通常、本明細書に記載した機能又は技法のどれもソフトウェア、ファームウェア、ハードウェア（例えば固定論理回路）、手動処理、又はこれらの実装の組み合わせを利用し、実装され得る。本明細書に使用されている用語「モジュール」及び「コンポーネント」は通常、ソフトウェアを表しているが、代替として、ファームウェア及び／又はハードウェアの組込みも表している。ソフトウェア実行の場合、モジュール又はコンポーネントは、プロセッサー（例えば、ＣＰＵ又は複数のＣＰＵ）上で実行されるとき、指定されたタスクを実行するプログラムコードを表している。プログラムコードは１つ以上の計算機可読記憶媒体にストアされ得、更に、それに関する図７を参照した説明が見出され得る。本明細書に記載されたソフトウェアコンポーネント状態に対するアクセスコントロールはプラットフォームに独立であって、本技法が、様々なプロセッサーを有する様々な商用計算プラットフォームにおいて実装され得ることを意味している。
【００８６】
[0089]対象項目は、構造的機能及び／又は方法論的動作に対し特定の言語で記述されているが、添付の請求項に定義されている対象項目が、必ずしも前述した特定の機能又は動作に限定されるわけではないことを理解されよう。もっと具体的に言うと、前述した特定の機能及び動作は、本請求項の実装形式の例として開示されている。
【符号の説明】
【００８７】
１００  計算装置の例
１０２  ソフトウェアコンポーネント設定格納制御モジュール
１０４  ソフトウェアコンポーネント状態ストア
１０６  ソフトウェア製品
１０８  ソフトウェア製品
１１２  ソフトウェアコンポーネント
１１４  ソフトウェアコンポーネント
１１６  ソフトウェアコンポーネント
１１８  ソフトウェアコンポーネント
２００  ソフトウェアコンポーネントの例
２０２  リソースファイル
２０４  宣言部
３００  計算装置の例
３０２  ソフトウェア製品
３０４  ソフトウェアコンポーネント
３０６  ソフトウェアコンポーネント状態ストア
３０８  プライベート状態部
３１０  パブリック設定部
３１２  ソフトウェアコンポーネント設定格納制御モジュール
３１４  使い捨て状態部
３２０  パブリック設定宣言
３２６  インターフェース（ＡＰＩ）
４００  ソフトウェアコンポーネント状態ストア
４０４  第１のレベル
４０６  第２のレベル
４０８  第３のレベル
４１０  第４のレベル
７００  計算装置の例
７０２  プロセッサー
７０４  計算機可読媒体
７０６  メモリー／ストレージ
７０８  Ｉ／Ｏ装置
７１０  バス
【図１】
2012530297.tif 000004
【図２】
2012530297.tif 000005
【図３】
2012530297.tif 000006
【図４】
2012530297.tif 000007
【図５】
2012530297.tif 000008
【図６】
2012530297.tif 000009
【図７】
2012530297.tif 000010
【国際調査報告】
2012530297.tif 000011
2012530297.tif 000012