(57)【要約】  実行中のプロセスにコードを動的に挿入することができる技法について、本明細書に説明する。例えば、この技法は、プロセスが実行中にプロセスの外部から任意のコードの動的実行を求める要求を受け取ることに応答して、プロセスが実行中にプロセスにおいて任意のコードをアクティブ化させることができる。
2015507298.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]一例示的実施形態では、コード識別子は、ターゲットプロセスにおいてコンパイルされて、次いで実行されるソースコードを含む。別の例示的実施形態では、コード識別子は、ＵＲＩおよび／またはコンパイルのためにソースコードを返すウェブサービスの呼出しである。さらに別の例示的実施形態では、コード識別子は、ターゲットプロセスにおいて実行するための、コンパイルされないスクリプトコードを含む。
【００５９】
[0067]ステップ６０４において、任意のコードは、コード識別子に基づいてターゲットプロセスの実行中にターゲットプロセスにおいて検索させ、アクティブ化させ（例えば、ロードされる、および／または少なくとも部分的にアクティブ化される）て、アクティブ化されたコードを提供する。一例示的実施形態では、因果関係モジュール７０４は、ターゲットプロセスの実行中にターゲットプロセスで任意のコードを検索させ、アクティブ化させる。
【００６０】
[0068]例示的実施形態では、ステップ６０４は、オペレーティングシステム（ＯＳ）のアプリケーションプログラミングインターフェイス（ＡＰＩ）に、コード識別子に基づいてレジストリから任意のコードを含むコードコンテナの場所を調べさせることを含む。例えば、オペレーティングシステムのアプリケーションプログラミングインターフェイスに、コード識別子をキーとして使用して、コードコンテナの場所を調べさせることが可能である。コード識別子は、例えば、グローバル一意識別子（ＧＵＩＤ）を使用して表されることが可能である。オペレーティングシステムのアプリケーションプログラミングインターフェイスは、例えば、ＣｏＣｒｅａｔｅｌｎｓｔａｎｃｅコンポーネントオブジェクトモデル（ＣＯＭ）関数とすることができる。コードコンテナは、バイナリコンテナ、またはキャブ、またはコードが引き出されることになる他の圧縮コンテナとすることができることは認識されよう。この実施形態に従って、コード識別子は、オペレーティングシステムのアプリケーションプログラミングインターフェイスに提供される。
【００６１】
[0069]別の例示的実施形態では、ステップ６０４は、任意のデータを任意のコードに提供して任意のコードを初期化することを含む。この実施形態に従って、任意のデータは、ステップ６０２においてターゲットプロセスで受け取られるメッセージに含まれる。
【００６２】
[0070]さらに別の例示的実施形態では、ステップ６０４は、アクティブ化されたコードと関連するスレッドを除く、ターゲットプロセスのすべてのスレッドを停止させることを含む。
【００６３】
[0071]さらに別の例示的実施形態では、メッセージ中のコード識別子および／または他のデータは、任意のコードのシングルトンインスタンスを指定する。例えば、コード識別子および／または他のデータは、このようなインスタンスがまだ存在しない場合、任意のコードのインスタンスが作成されることを、および／または、そうでない場合、以前に構成されたインスタンスが返されることを、要求することができる。オブジェクト登録メカニズムは、このために再利用されることが可能である。
【００６４】
[0072]ステップ６０６において、ターゲットプロセスに対してインスタンス化された、インスタンス化されたコードが識別される。インスタンス化されたコードは、アクティブ化されたコードを含む。例示的実施形態では、識別モジュール７０６は、ターゲットプロセスに対してインスタンス化された、インスタンス化されたコードを識別する。
【００６５】
[0073]ステップ６０８において、無効化メッセージが受け取られる。例えば、無効化メッセージは、ターゲットプロセスによって、または要求プロセスによって、生成されることが可能である。一態様では、無効化メッセージは、ターゲットプロセスにおいて、または要求プロセスにおいて、エラーが発生したことを示すことができる。別の態様では、無効化メッセージは、ターゲットプロセスまたは要求プロセスが中断されなければならないことを示すことができる。例えば、無効化メッセージは、ユーザーがターゲットプロセスを終了させることに応じて受け取ることができる。この例に従えば、無効化メッセージは、ターゲットプロセスのシャットダウンシーケンス中に受け取ることができる。例えば、ターゲットプロセスは、ユーザーがターゲットプロセスを終了させたことを検出し、それに基づいて無効化メッセージを生成することができる。一例示的実行では、インターフェイスモジュール７０２が、無効化メッセージを受け取る。
【００６６】
[0074]ステップ６１０において、インスタンス化されたコードは無効化される。例えば、インスタンス化されたコードは、インスタンス化されたコードがそれ自体の初期化解除（ｕｎ−ｉｎｉｔｉａｌｉｚａｔｉｏｎ）および／またはシャットダウン作業を行うことができるように、廃棄される、メモリから削除される、呼び出される、その他が行われることがある。この例に従って、インスタンス化されたコードへの（１つまたは複数の）参照は、削除される、非アクティブ化される、その他が行われることがある。一例示的実行では、無効化モジュール７０８が、インスタンス化されたコードを無効化する。
【００６７】
[0075]例示的実施形態では、メッセージは、任意のコードのキャッシングと関連する（１つまたは複数の）修飾子を含むことができる。例えば、メッセージは、任意のコードがすでに検索されて、ローカルにキャッシュされていても、任意のコードが検索されなければならないことを示すことができる。この例に従って、コード識別子は、ＵＲＬまたはＵＲＮのような、ＵＲＩを参照することができる。１つの態様では、因果関係モジュール７０４は、任意のコードがすでに検索されて、ローカルにキャッシュされたかどうかを示すテーブルを調べることができる。因果関係モジュール７０４は、任意のコードがまだ検索されず、ローカルにキャッシュされていない場合、テーブルから任意のコードを検索することができる。別の態様では、因果関係モジュール７０４は、因果関係モジュール７０４が、前のメッセージでソースコードとして送られたコードコンテナをすでにコンパイルしたかどうかを知ることができる。メッセージは、任意のコードがＧＵＩＤによって識別されるように、ソースコードと併せて、任意のコードと関連付けられるＧＵＩＤを含むことができることに注意されたい。
【００６８】
[0076]各メッセージと共にソースコードを送信するコストを抑えるために、要求プロセスは、指定されたＧＵＩＤのアクティブ化を要求することがある。アクティブ化は、コードコンテナを検索できないために失敗することがある。要求プロセスは、同じＧＵＩＤのアクティブ化を要求するメッセージでフォローアップすることができ、今度はメッセージと共にソースコードをバンドルする。因果関係モジュール７０４は、任意のコードをコンパイルし、キャッシュし、アクティブ化することができる。要求プロセスは、ソースコードなしでＧＵＩＤを提供する、任意のコードを要求する別のメッセージを続けることができる。今度は、因果関係モジュール７０４は、任意のコードのキャッシュされたコンパイル済みバージョンを検索しアクティブ化することができる。前述の方式を実行する１つの潜在的理由は、複数の要求プロセスが、ターゲットプロセスにおいて同じ任意のコードの動的実行を要求するメッセージを提供している可能性があることである。
【００６９】
[0077]ターゲットプロセスによって受け取られるメッセージは、単一コードコンテナに含まれる、または複数のコードコンテナにまたがることがある、単一コードオブジェクトよりも多くをインスタンス化する（例えば、初期化する）要求を含むことができることは認識されよう。リターンリファレンスが提供される場合には、結果を保持するデータ構造は、様々なインスタンス化されたオブジェクトへの参照の順序付けられたコレクションを含むことができる。
【００７０】
[0078]いくつかの例示的実施形態では、フローチャート６００の１つまたは複数のステップ６０２、６０４、６０６、６０８、および／または６１０が行われないことがある。さらに、ステップ６０２、６０４、６０６、６０８、および／または６１０に追加した、またはこれらに代わるステップが行われることがある。例えば、一例示的実施形態では、フローチャート６００が、アクティブ化されたコードに、ターゲットプロセスに含まれるコードのアクセシビリティ（ａｃｃｅｓｓｉｂｉｌｉｔｙ）を与えることを含む。ターゲットプロセスに含まれるコードのアクセシビリティは、例えば、ターゲットプロセスに含まれているコードの一部がターゲットプロセス以外のエンティティにはアクセスできないように構成されているにもかかわらず、アクティブ化されたコードに与えられる可能性がある。この実施形態に従って、因果関係モジュール７０４は、ターゲットプロセスに含まれるコードのアクセシビリティを、アクティブ化されたコードに与えることができる。
【００７１】
[0079]別の例示的実施形態では、フローチャート６００は、任意のコードと関連する環境変数を決定することを含む。環境変数は、任意のコードのロードをパラメータ化するように構成される。例えば、スタートアップモジュール７１０は、任意のコードと関連する環境変数を決定することができる。この実施形態に従えば、任意のコードは、環境変数に従ってターゲットプロセスのスタートアップ中にアクティブ化される。例えば、スタートアップモジュール７１０は、ターゲットプロセスのスタートアップ中に任意のコードをアクティブ化することができる。さらにこの実施形態に従って、ターゲットプロセスのスタートアップ中に任意のコードをアクティブ化することの完了に応じて、ステップ６０４が行われる。例えば、因果関係モジュール７０４が、ターゲットプロセスのスタートアップ中に任意のコードをアクティブ化することの完了に応じて、ステップ６０４を行うことができる。
【００７２】
[0080]さらに別の例示的実施形態では、フローチャート６００は、アクティブ化されたコードを参照する値を提供することを含む。値は、ターゲットプロセスが実行し続けている間にターゲットプロセスと対話するために要求プロセスによって呼出し可能である。要求プロセスによって提供されるデータ構造に、値を入れることができるが、例示の実施形態の範囲は、この点において限定されない。１つの例では、因果関係モジュール７０４は、アクティブ化されたコードを参照する値を提供することができる。この例に従って、因果関係モジュール７０４は、値を生成することができる。
【００７３】
[0081]前述の実施形態の１つの態様では、要求プロセスは、リターンで要求プロセスに、アクティブ化されたコードへの呼出し可能な参照として機能する値へのアクセス（比較的即時のアクセス）を与える同時コードアクティブ化エクスペリエンスを有することができる。別の態様では、アクティブ化されたコードは、アクティブ化されたコードが要求プロセスにアクセス可能になるようにする方法で、登録されることが可能である。例えば、アクティブ化されたコードは、ターゲットプロセスと要求プロセスとの間で共有されるメモリセクションを使用して登録されることが可能である。
【００７４】
[0082]プロセス間挿入モジュール７００は、インターフェイスモジュール７０２、因果関係モジュール７０４、識別モジュール７０６、無効化モジュール７０８、および／またはスタートアップモジュール７１０のうちの１つまたは複数を含まないことがあることは認識されよう。さらに、プロセス間挿入モジュール７００は、インターフェイスモジュール７０２、因果関係モジュール７０４、識別モジュール７０６、無効化モジュール７０８、および／またはスタートアップモジュール７１０に追加した、またはこれらに代わるモジュールを含むことがある。
【００７５】
[0083]図８および９は、諸実施形態により任意のコードを検索させ、アクティブ化させるための例示的方法のフローチャート８００および９００を示す。したがって、フローチャート８００および９００は、フローチャート６００のステップ６０４が行われることがある例示的方法を示す。フローチャート８００および９００は、例えば、図７に示すプロセス間挿入モジュール７００の因果関係モジュール７０４によって行われることがある。例示のために、フローチャート８００および９００は、一実施形態による因果関係モジュール７０４の一例である、図１０に示す因果関係モジュール１０００に関して述べている。図１０に示すように、因果関係モジュール１０００は、アクティベーション論理１００２と、呼出し論理１００４と、取得論理１００６とを含む。フローチャート８００および９００に関する説明に基づいて、当業者にはさらなる構造的および機能的実施形態が明らかであろう。
【００７６】
[0084]図８に示すように、フローチャート８００の方法は、ステップ８０２から始まる。ステップ８０２では、任意のコードは、メッセージ中の場所識別子によって示される場所、およびメッセージ中のパス情報によって示されるパスに基づいて、コードコンテナから共有ライブラリにロードされる。例えば、共有ライブラリは、ダイナミックリンクライブラリ（ＤＬＬ）とすることができる。別の例では、場所識別子は、統一資源位置指定子（ＵＲＬ）または統一資源名（ＵＲＮ）のような、統一資源識別子（ＵＲＩ）とすることができる。一例示的実施形態では、アクティベーション論理１００２は、コードコンテナから共有ライブラリに任意のコードをロードする。例えば、アクティベーション論理１００２は、因果関係モジュール１０００を含む装置外のソースから共有ライブラリをダウンロードすることができる。
【００７７】
[0085]ステップ８０４では、共有ライブラリへの呼出しが行われて、任意のコードを実行する。一例示的実施形態では、呼出し論理１００４が、共有ライブラリを呼び出して、任意のコードを実行する。
【００７８】
[0086]いくつかの例示的実施形態では、フローチャート８００の１つまたは複数のステップ８０２および／または８０４が行われないことがある。さらに、ステップ８０２および／または８０４に追加の、またはこれらに代わるステップが行われることがある。
【００７９】
[0087]図９に示すように、フローチャート９００の方法は、ステップ９０２から始まる。ステップ９０２では、任意のコードは、コード識別子によって示されるコードコンテナから取得される。コード識別子は、例えば、ＭｙＤｌｌ．ｄｌｌ＃ＭｙＣｏｄｅＡｃｔｉｖａｔｉｎｇＥｎｔｒｙＰｏｉｎｔとして指定されることが可能である。一例示的実施形態では、取得論理１００６は、コードコンテナから任意のコードを取得する。
【００８０】
[0088]ステップ９０４において、任意のコードは、ターゲットプロセスのエントリポイントでアクティブ化される。エントリポイントは、コード識別子によって指定される。例えば、コード識別子は、メモリにロードされることになるＤＬＬ、任意のコードにアクセスするために呼出しが行われることになるエントリポイント、および任意のコードへの呼出しに使用されることになるインターフェイスを識別するコントラクト名を含むことができる。この例に従って、ＤＬＬは、エントリポイントを明瞭化する。エントリポイントは、例えば、ＭｙＤｌｌ．ｄｌｌ＃ＭｙＣｏｄｅＡｃｔｉｖａｔｉｎｇＥｎｔｒｙＰｏｉｎｔのような識別子で指定されることが可能である。この例では、識別子の最初の部分、「ＭｙＤｌｌ」は、例示のためのファイル名を表しており、これに限定することを意図していない。識別子の最初の部分は、ディスク上のバイナリへの完全修飾パス、または任意のコードの場所に対応する別のＵＲＩとすることができることは認識されよう。一例示的実行では、アクティベーション論理１００２が、コード識別子によって指定されるターゲットプロセスのエントリポイントで任意のコードをアクティブ化する。
【００８１】
[0089]いくつかの例示的実施形態では、フローチャート９００の１つまたは複数のステップ９０２および／または９０４が行われないことがある。さらに、ステップ９０２および／または９０４に追加の、またはこれらに代わるステップが行われることがある。
【００８２】
[0090]因果関係モジュール１０００が、アクティベーション論理１００２、呼出し論理１００４、および／または取得論理１００６のうちの１つまたは複数を含まない可能性があることは認識されよう。さらに、因果関係モジュール１０００は、アクティベーションモジュール１００２、呼出しモジュール１００４、および／または取得モジュール１００６に追加の、またはこれらに代わるモジュールを含むことがある。
【００８３】
[0091]プロセス間挿入モジュール１１０、要求モジュール１１２、ターゲットモジュール１１４、識別モジュール３０２、生成モジュール３０４、提供モジュール３０６、受取りモジュール３０８、インターフェイスモジュール５０２、アクティベーション判定モジュール５０４、提供モジュール５０６、状態判定モジュール５０８、状態プッシュモジュール５１０、パック解除モジュール５１２、利用可能性判定モジュール５１４、パス判定モジュール５１６、アクティベーションモジュール５１８、初期化モジュール５２０、登録モジュール５２２、パッケージ化モジュール５２４、ポップ判定モジュール５２６、状態ポップモジュール５２８、インターフェイスモジュール７０２、因果関係モジュール７０４、識別モジュール７０６、無効化モジュール７０８、スタートアップモジュール７１０、アクティベーション論理１００２、呼出し論理１００４、取得論理１００６、フローチャート２００、フローチャート４００、フローチャート６００、フローチャート８００、およびフローチャート９００は、ハードウェア、ソフトウェア、ファームウェア、またはそのいかなる組合せでも実行されることが可能である。
【００８４】
[0092]例えば、プロセス間挿入モジュール１１０、要求モジュール１１２、ターゲットモジュール１１４、識別モジュール３０２、生成モジュール３０４、提供モジュール３０６、受取りモジュール３０８、インターフェイスモジュール５０２、アクティベーション判定モジュール５０４、提供モジュール５０６、状態判定モジュール５０８、状態プッシュモジュール５１０、パック解除モジュール５１２、利用可能性判定モジュール５１４、パス判定モジュール５１６、アクティベーションモジュール５１８、初期化モジュール５２０、登録モジュール５２２、パッケージ化モジュール５２４、ポップ判定モジュール５２６、状態ポップモジュール５２８、インターフェイスモジュール７０２、因果関係モジュール７０４、識別モジュール７０６、無効化モジュール７０８、スタートアップモジュール７１０、アクティベーション論理１００２、呼出し論理１００４、取得論理１００６、フローチャート２００、フローチャート４００、フローチャート６００、フローチャート８００、および／またはフローチャート９００は、１つまたは複数のプロセッサで実行されるように構成されたコンピュータープログラムコードとして実行されることが可能である。
【００８５】
[0093]別の例では、プロセス間挿入モジュール１１０、要求モジュール１１２、ターゲットモジュール１１４、識別モジュール３０２、生成モジュール３０４、提供モジュール３０６、受取りモジュール３０８、インターフェイスモジュール５０２、アクティベーション判定モジュール５０４、提供モジュール５０６、状態判定モジュール５０８、状態プッシュモジュール５１０、パック解除モジュール５１２、利用可能性判定モジュール５１４、パス判定モジュール５１６、アクティベーションモジュール５１８、初期化モジュール５２０、登録モジュール５２２、パッケージ化モジュール５２４、ポップ判定モジュール５２６、状態ポップモジュール５２８、インターフェイスモジュール７０２、因果関係モジュール７０４、識別モジュール７０６、無効化モジュール７０８、スタートアップモジュール７１０、アクティベーション論理１００２、呼出し論理１００４、取得論理１００６、フローチャート２００、フローチャート４００、フローチャート６００、フローチャート８００、および／またはフローチャート９００は、ハードウェア論理／電気回路として実行されることが可能である。
【００８６】
[0094]例えば、一実施形態では、プロセス間挿入モジュール１１０、要求モジュール１１２、ターゲットモジュール１１４、識別モジュール３０２、生成モジュール３０４、提供モジュール３０６、受取りモジュール３０８、インターフェイスモジュール５０２、アクティベーション判定モジュール５０４、提供モジュール５０６、状態判定モジュール５０８、状態プッシュモジュール５１０、パック解除モジュール５１２、利用可能性判定モジュール５１４、パス判定モジュール５１６、アクティベーションモジュール５１８、初期化モジュール５２０、登録モジュール５２２、パッケージ化モジュール５２４、ポップ判定モジュール５２６、状態ポップモジュール５２８、インターフェイスモジュール７０２、因果関係モジュール７０４、識別モジュール７０６、無効化モジュール７０８、スタートアップモジュール７１０、アクティベーション論理１００２、呼出し論理１００４、取得論理１００６、フローチャート２００、フローチャート４００、フローチャート６００、フローチャート８００、および／またはフローチャート９００のうちの１つまたは複数は、システムオンチップ（ＳｏＣ）で実行されることが可能である。ＳｏＣは、プロセッサ（例えば、マイクロコントローラ、マイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）など）、メモリ、１つまたは複数の通信インターフェイス、および／またはさらなる回路、および／またはその機能を行うための埋め込まれたファームウェアのうちの１つまたは複数を含む集積回路チップを含むことができる。
【００８７】
[0095]図１１は、諸実施形態を実行することができる例示的コンピューター１１００を示す。図１に示されるクライアント１０２Ａ〜１０２Ｍのいずれか１つまたは複数、またはサーバー１０６Ａ〜１０６Ｎのいずれか１つまたは複数（または図１、３、５、７、および１０に示されるそのいずれか１つまたは複数のサブコンポーネント）は、コンピューター１１００を使用して、コンピューター１１００の１つまたは複数の機能および／または代替機能を含んで、実装されることが可能である。コンピューター１１００は、例えば、従来のパーソナルコンピューター、モバイルコンピューター、もしくはワークステーションの形の汎用コンピューティングデバイスとすることができ、またはコンピューター１１００は、特定用途のコンピューティングデバイスとすることができる。本明細書で提供するコンピューター１１００の説明は、例示のために行われるものであって、限定することを意図されていない。諸実施形態は、当業者には理解されるように、さらなるタイプのコンピューターシステムで実行されることが可能である。
【００８８】
[0096]図１１に示すように、コンピューター１１００は、処理装置１１０２と、システムメモリ１１０４と、システムメモリ１１０４を備える様々なシステムコンポーネントを処理装置１１０２に結合するバス１１０６とを含む。バス１１０６は、メモリバスもしくはメモリコントローラー、周辺機器用バス、アクセラレーテッドグラフィックスポート（ａｃｃｅｌｅｒａｔｅｄ  ｇｒａｐｈｉｃｓ  ｐｏｒｔ）、および様々なバスアーキテクチャのいずれかを使用するプロセッサもしくはローカルバスを含む、いくつかのタイプのバス構造のいずれかの１つまたは複数を表わす。システムメモリ１１０４は、読取り専用メモリ（ＲＯＭ）１１０８およびランダムアクセスメモリ（ＲＡＭ）１１１０を含む。基本入出力システム１１１２（ＢＩＯＳ）は、ＲＯＭ１１０８に格納される。
【００８９】
[0097]コンピューター１１００は、以下のドライブの１つまたは複数を有することもある：ハードディスクからの読取りおよびハードディスクへの書込みを行うためのハードディスクドライブ１１１４、リムーバブル磁気ディスク１１１８からの読取りまたはリムーバブル磁気ディスク１１１８への書込みを行うための磁気ディスクドライブ１１１６、ＣＤ  ＲＯＭ、ＤＶＤ  ＲＯＭ、もしくは他の光媒体のようなリムーバブル光ディスク１１２２からの読取りまたはリムーバブル光ディスク１１２２への書込みを行うための光ディスクドライブ１１２０。ハードディスクドライブ１１１４、磁気ディスクドライブ１１１６、および光ディスクドライブ１１２０は、それぞれ、ハードディスクドライブのインターフェイス１１２４、磁気ディスクドライブのインターフェイス１１２６、および光ディスクドライブのインターフェイス１１２８によってバス１１０６に接続される。ドライブおよびそれに関連するコンピューター可読記憶媒体は、コンピューター可読命令、データ構造、プログラムモジュール、および他のデータの不揮発性記憶装置をコンピューターに提供する。ハードディスク、リムーバブル磁気ディスク、およびリムーバブル光ディスクについて述べているが、フラッシュメモリカード、デジタルビデオディスク、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）などのような、他のタイプのコンピューター可読記憶媒体を使用して、データを格納することができる。
【００９０】
[0098]いくつかのプログラムモジュールを、ハードディスク、磁気ディスク、光ディスク、ＲＯＭ、またはＲＡＭに格納することができる。これらのプログラムは、オペレーティングシステム１１３０、１つもしくは複数のアプリケーションプログラム１１３２、他のプログラムモジュール１１３４、およびプログラムデータ１１３６を含む。アプリケーションプログラム１１３２またはプログラムモジュール１１３４は、例えば、本明細書に記載するように、プロセス間挿入モジュール１１０、要求モジュール１１２、ターゲットモジュール１１４、識別モジュール３０２、生成モジュール３０４、提供モジュール３０６、受取りモジュール３０８、インターフェイスモジュール５０２、アクティベーション判定モジュール５０４、提供モジュール５０６、状態判定モジュール５０８、状態プッシュモジュール５１０、パック解除モジュール５１２、利用可能性判定モジュール５１４、パス判定モジュール５１６、アクティベーションモジュール５１８、初期化モジュール５２０、登録モジュール５２２、パッケージ化モジュール５２４、ポップ判定モジュール５２６、状態ポップモジュール５２８、インターフェイスモジュール７０２、因果関係モジュール７０４、識別モジュール７０６、無効化モジュール７０８、スタートアップモジュール７１０、アクティベーション論理１００２、呼出し論理１００４、取得論理１００６、フローチャート２００（フローチャート２００の任意のステップを含む）、フローチャート４００（フローチャート４００の任意のステップを含む）、フローチャート６００（フローチャート６００の任意のステップを含む）、フローチャート８００（フローチャート８００の任意のステップを含む）、および／またはフローチャート９００（フローチャート９００の任意のステップを含む）を実行するためのコンピュータープログラム論理を含むことができる。
【００９１】
[0099]ユーザーは、キーボード１１３８およびポインティングデバイス１１４０のような入力デバイスを介してコンピューター１１００にコマンドおよび情報を入力することができる。他の入力デバイス（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナー、タッチスクリーン、カメラ、加速度計、ジャイロスコープなどが含まれる。これらのおよび他の入力装置は、多くの場合、バス１１０６に結合されたシリアルポートインターフェイス１１４２を介して処理装置１１０２に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）など、他のインターフェイスによって接続されることもある。
【００９２】
[0100]表示装置１１４４（例えば、モニター）もまた、ビデオアダプタ１１４６などのインターフェイスを介してバス１１０６に接続される。表示装置１１４４に加えて、コンピューター１１００は、スピーカーおよびプリンターなど、他の周辺出力装置（図示せず）を含むことがある。
【００９３】
[0101]コンピューター１１００は、ネットワークインターフェイスもしくはアダプター１１５０、モデム１１５２、またはネットワークを通じた通信を確立するための他の手段を介してネットワーク１１４８（例えば、インターネット）に接続される。内蔵または外付けであることがあるモデム１１５２は、シリアルポートインターフェイス１１４２によりバス１１０６に接続される。
【００９４】
[0102]本明細書で使用される、「コンピュータープログラム媒体」および「コンピューター可読媒体」という用語は、一般的には、ハードディスクドライブ１１１４と関連付けられたハードディスク、リムーバブル磁気ディスク１１１８、リムーバブル光ディスク１１２２などの非一時的媒体、ならびに、フラッシュメモリカード、デジタルビデオディスク、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）など、他の非一時的媒体を指すように使用される。このようなコンピューター可読記憶媒体は、通信媒体とは区別され、通信媒体と重複しない。通信媒体は通常、搬送波などの変調されたデータ信号に、コンピューター可読命令、データ構造、プログラムモジュール、または他のデータを包含する。「変調されたデータ信号」という用語は、信号の中の情報を符号化するような方法で特性の１つまたは複数が設定されたまたは変更された信号を意味する。例として、限定ではなく、通信媒体は、音響、ＲＦ、赤外線、および他の無線媒体などの無線媒体を含む。例示的実施形態は、このような通信媒体も対象とする。
【００９５】
[0103]上記のように、コンピュータープログラムおよびモジュール（アプリケーションプログラム１１３２および他のプログラムモジュール１１３４を含む）は、ハードディスク、磁気ディスク、光ディスク、ＲＯＭ、またはＲＡＭに格納することができる。このようなコンピュータープログラムは、ネットワークインターフェイス１１５０またはシリアルポートインターフェイス１１４２を介して受け取られることもある。このようなコンピュータープログラムは、アプリケーションによって実行されるまたはロードされるとき、コンピューター１１００が本明細書に記載する実施形態の機能を実行できるようにする。したがって、このようなコンピュータープログラムは、コンピューター１１００のコントローラーを表す。
【００９６】
[0104]例示的実施形態は、任意のコンピューター使用可能媒体に格納されたソフトウェア（例えば、コンピューター可読命令）を含むコンピュータープログラム製品も対象とする。このようなソフトウェアは、１つまたは複数のデータ処理装置で実行されるとき、（１つまたは複数の）データ処理装置を本明細書に説明するように動作させる。諸実施形態は、現在知られているまたは将来の、任意のコンピューター使用可能またはコンピューター可読媒体を使用することができる。コンピューター可読媒体の例には、ＲＡＭ、ハードドライブ、フロッピー（登録商標）ディスク、ＣＤ  ＲＯＭ、ＤＶＤ  ＲＯＭ、ＺＩＰディスク、テープ、磁気記憶装置、光記憶装置、ＭＥＭＳベースの記憶装置、ナノテクノロジーに基づいた記憶装置などの記憶装置が含まれるが、これらに限定されない。
【００９７】
ＩＩＩ．結論
[0105]様々な実施形態を上述したが、これらは単に例として、限定ではなく提示されたことを理解すべきである。本発明の趣旨および範囲を逸脱することなく、本発明における形式および詳細における様々な変更を行うことができることは、当業者には明らかであろう。したがって、本発明の範囲（ｂｒｅａｄｔｈ  ａｎｄ  ｓｃｏｐｅ）およびは、上述の例示的実施形態のいずれによっても限定されるべきではなく、単に、添付の特許請求の範囲およびその均等物に従って定義されるべきである。
【図１】
2015507298.tif 000003
【図２】
2015507298.tif 000004
【図３】
2015507298.tif 000005
【図４】
2015507298.tif 000006
【図５】
2015507298.tif 000007
【図６】
2015507298.tif 000008
【図７】
2015507298.tif 000009
【図８】
2015507298.tif 000010
【図９】
2015507298.tif 000011
【図１０】
2015507298.tif 000012
【図１１】
2015507298.tif 000013
【国際調査報告】
2015507298.tif 000014
2015507298.tif 000015