特許第6182160号(P6182160)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ マイクロソフト コーポレーションの特許一覧

<>
  • 特許6182160-実行中のプロセスへのコードの動的挿入 図000002
  • 特許6182160-実行中のプロセスへのコードの動的挿入 図000003
  • 特許6182160-実行中のプロセスへのコードの動的挿入 図000004
  • 特許6182160-実行中のプロセスへのコードの動的挿入 図000005
  • 特許6182160-実行中のプロセスへのコードの動的挿入 図000006
  • 特許6182160-実行中のプロセスへのコードの動的挿入 図000007
  • 特許6182160-実行中のプロセスへのコードの動的挿入 図000008
  • 特許6182160-実行中のプロセスへのコードの動的挿入 図000009
  • 特許6182160-実行中のプロセスへのコードの動的挿入 図000010
  • 特許6182160-実行中のプロセスへのコードの動的挿入 図000011
  • 特許6182160-実行中のプロセスへのコードの動的挿入 図000012
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6182160
(24)【登録日】2017年7月28日
(45)【発行日】2017年8月16日
(54)【発明の名称】実行中のプロセスへのコードの動的挿入
(51)【国際特許分類】
   G06F 9/48 20060101AFI20170807BHJP
   G06F 9/54 20060101ALI20170807BHJP
【FI】
   G06F9/46 457
   G06F9/06 640C
【請求項の数】19
【全頁数】27
(21)【出願番号】特願2014-556586(P2014-556586)
(86)(22)【出願日】2013年2月4日
(65)【公表番号】特表2015-507298(P2015-507298A)
(43)【公表日】2015年3月5日
(86)【国際出願番号】US2013024558
(87)【国際公開番号】WO2013119481
(87)【国際公開日】20130815
【審査請求日】2016年2月2日
(31)【優先権主張番号】13/370,126
(32)【優先日】2012年2月9日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】500046438
【氏名又は名称】マイクロソフト コーポレーション
【氏名又は名称原語表記】MICROSOFT CORPORATION
(74)【代理人】
【識別番号】100140109
【弁理士】
【氏名又は名称】小野 新次郎
(74)【代理人】
【識別番号】100075270
【弁理士】
【氏名又は名称】小林 泰
(74)【代理人】
【識別番号】100101373
【弁理士】
【氏名又は名称】竹内 茂雄
(74)【代理人】
【識別番号】100118902
【弁理士】
【氏名又は名称】山本 修
(74)【代理人】
【識別番号】100162846
【弁理士】
【氏名又は名称】大牧 綾子
(72)【発明者】
【氏名】ファニング,マイケル・シー
(72)【発明者】
【氏名】フォーコン,クリストファー・エム・エイチ
(72)【発明者】
【氏名】スターランド,アンドリュー・アール
(72)【発明者】
【氏名】ライス,ティモシー・エス
【審査官】 大桃 由紀雄
(56)【参考文献】
【文献】 米国特許出願公開第2007/0113218(US,A1)
【文献】 特開2010−191658(JP,A)
【文献】 米国特許第05802367(US,A)
【文献】 米国特許出願公開第2008/0163270(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/48
G06F 9/54
(57)【特許請求の範囲】
【請求項1】
ターゲットプロセスにおいて、前記ターゲットプロセスが実行されている間に、前記ターゲットプロセス外である要求プロセスからメッセージを受け取るステップであって、前記メッセージが、前記ターゲットプロセスにおける任意のコードの動的実行を要求し、前記メッセージが、前記任意のコードを識別するコード識別子を含み、前記コード識別子が、前記任意のコードを検索しアクティブ化するために使用可能である、ステップと、
アクティブ化されたコードを提供するために前記コード識別子に基づいて前記ターゲットプロセスが実行されている間に、少なくとも1つのプロセッサを用いて前記ターゲットプロセスにおいて前記任意のコードを検索させ、アクティブ化させるステップ

前記任意のコードを検索させ、アクティブ化させるステップは、
オペレーティングシステムのアプリケーションプログラミングインターフェイスに、前記コード識別子に基づいてレジストリから前記任意のコードを含んだコードコンテナの位置を調べさせるステップを含む、方法。
【請求項2】
前記オペレーティングシステムのアプリケーションプログラミングインターフェイスに前記コードコンテナを調べさせるステップが、
前記コード識別子を前記オペレーティングシステムのアプリケーションプログラミングインターフェイスに提供するステップを含む、請求項1に記載の方法。
【請求項3】
前記メッセージを受け取るステップが、
パス情報および場所識別子を受け取るステップであって、前記パス情報がコードコンテナへのパスを示し、前記場所識別子が共有ライブラリの場所を示す、ステップを含み、
前記任意のコードを検索させ、アクティブ化させるステップが、
前記場所識別子によって示される前記場所に基づいて、さらに前記パス情報によって示される前記パスに基づいて、前記任意のコードを前記コードコンテナから前記共有ライブラリにロードするステップと、
前記共有ライブラリを呼び出して、前記任意のコードを実行するステップと
を含む、請求項1に記載の方法。
【請求項4】
前記任意のコードを検索させ、アクティブ化させるステップが、
前記任意のコードを、前記コード識別子によって示されるコードコンテナから取得するステップと、
前記ターゲットプロセスのエントリポイントで前記任意のコードをアクティブ化させるステップであって、前記エントリポイントは前記コード識別子によって指定される、ステップと、
を含む、請求項1に記載の方法。
【請求項5】
前記メッセージを受け取るステップは、
前記メッセージに含まれる任意のデータを受け取るステップを含み、
前記任意のコードを検索させ、アクティブ化させるステップが、
前記任意のコードを初期化するために前記任意のデータを前記任意のコードに提供するステップを含む、請求項1に記載の方法。
【請求項6】
前記ターゲットプロセスに含まれるコードのアクセシビリティを前記アクティブ化されたコードへ提供するステップをさらに含む、請求項1に記載の方法。
【請求項7】
ターゲットプロセスに関してインスタンス化されたインスタンス化されたコードを示すステップであって、前記インスタンス化されたコードは前記アクティブ化されたコードを含む、ステップと、
無効化メッセージを受け取るステップと、
前記無効化メッセージの受け取りに応答して前記インスタンス化されたコードを無効化するステップと
をさらに含む、請求項1に記載の方法。
【請求項8】
前記コード識別子が、前記ターゲットプロセスにおいてコンパイルされて、次いで実行されるソースコードを含む、請求項1に記載の方法。
【請求項9】
前記アクティブ化されたコードを参照する値を提供するステップであって、前記値が、前記ターゲットプロセスが実行し続ける間に前記ターゲットプロセスと対話するために前記要求プロセスによって呼出し可能である、ステップをさらに含む、請求項1に記載の方法。
【請求項10】
前記ターゲットプロセスが実行し続ける間に前記ターゲットプロセスにおいて前記任意のコードを検索させ、アクティブ化させるステップは、
前記アクティブ化されたコードに関連するスレッドを除く、前記ターゲットプロセスのすべてのスレッドを停止させるステップを含む、請求項1に記載の方法。
【請求項11】
ターゲットプロセスにおいて、前記ターゲットプロセスが実行されている間に、前記ターゲットプロセス外である要求プロセスからメッセージを受け取るように構成されたインターフェイスモジュールであって、前記メッセージが、前記ターゲットプロセスにおける任意のコードの動的実行を要求し、前記メッセージが、前記任意のコードを識別するコード識別子を含み、前記コード識別子が、前記任意のコードを検索しアクティブ化するために使用可能である、インターフェイスモジュールと、
前記コード識別子に基づいて前記ターゲットプロセスが実行されている間に、前記任意のコードを前記ターゲットプロセスにおいて検索させ、アクティブ化させて、アクティブ化されたコードを提供するように構成された、因果関係モジュールと
を含み
前記因果関係モジュールは、前記コード識別子に基づいて、オペレーティングシステムアプリケーションプログラミングインターフェィスにレジストリからの任意のコードを含むコードコンテナの場所を調べさせるよう構成されている、システム。
【請求項12】
前記メッセージはパス情報及び場所識別子を含み、前記パス情報はコードコンテナへのパスを示し、前記場所識別子は共有ライブラリの位置を示し、
前記因果関係モジュールは、前記場所識別子により示される前記位置に基づいて、及び前記パス情報により示される前記パスにさらに基づいて、前記任意のコードを前記コードコンテナから前記共有ライブラリにロードするよう構成されたアクティベーション論理と、
前記任意のコードを実行するために前記共有ライブラリを呼び出しするよう構成された呼び出し論理と
を含む、請求項11に記載のシステム。
【請求項13】
前記因果関係モジュールが、
前記コード識別子によって示されたコードコンテナから前記任意のコードを取得するように構成された取得論理と、
前記ターゲットプロセスのエントリポイントで前記任意のコードをアクティブ化するように構成されたアクティベーション論理であって、前記エントリポイントが前記コード識別子によって指定される、アクティベーション論理と
を含む、請求項11に記載のシステム。
【請求項14】
前記メッセージは任意のデータを含み、
前記因果関係モジュールは前記任意のコードを初期化するために前記任意のコードへ前記任意のデータを供給するよう構成されている、請求項11に記載のシステム。
【請求項15】
前記ターゲットプロセスに対してインスタンス化された、インスタンス化されたコードを識別するように構成された識別モジュールであって、前記インスタンス化されたコードが前記アクティブ化されたコードを含む、識別モジュールと、
無効化メッセージの受取りに応じて前記インスタンス化されたコードを無効化するように構成された無効化モジュールとをさらに含む、請求項11に記載のシステム。
【請求項16】
前記因果関係モジュールは前記アクティブ化されたコードを参照する値を提供するよう構成され、前記値は前記ターゲットプロセスが実行し続けている間に前記ターゲットプロセスと対話するために前記要求プロセスによって呼出し可能である、請求項11に記載のシステム。
【請求項17】
前記因果関係モジュールが、前記ターゲットプロセスにおいて前記任意のコードのロード中に、前記アクティブ化されたコードに関連するスレッドを除く、ターゲットプロセスのすべてのスレッドを停止させるように構成された、請求項11に記載のシステム。
【請求項18】
プロセッサベースのシステムが実行中のプロセスにコードを動的に挿入できるようにするためのコンピュータープログラム論理を記録したコンピューター可読媒体を含むコンピュータープログラムであって、
ターゲットプロセスが実行されている間に前記ターゲットプロセスにおいて前記ターゲットプロセス外である要求プロセスからメッセージを受け取ることに基づいて、前記プロセッサベースのシステムが、前記ターゲットプロセスにおいて、前記ターゲットプロセスが実行されている間に任意のコードを検索させ、アクティブ化させて、アクティブ化されたコードを提供することを可能にするための第1のプログラム論理モジュールであって、前記メッセージが、前記ターゲットプロセスにおいて前記任意のコードの動的実行を要求し、前記メッセージが、前記任意のコードを識別するコード識別子を含み、前記コード識別子が、前記任意のコードを検索しアクティブ化するために使用可能であり、オペレーティングシステムのアプリケーションプログラミングインターフェイスに、前記コード識別子に基づいてレジストリから前記任意のコードを含んだコードコンテナの位置を調べさせる、第1のプログラム論理モジュールと、
前記プロセッサベースのシステムが、前記アクティブ化されたコードを参照する値を提供することを可能にするための第2のプログラム論理モジュールであって、前記値が、前記ターゲットプロセスが実行し続ける間に前記ターゲットプロセスと対話するために要求プロセスによって呼出し可能である、第2のプログラム論理モジュールとを含む、コンピュータープログラム。
【請求項19】
前記メッセージはパス情報及び場所識別子を含み、前記パス情報はコードコンテナへのパスを示し、前記場所識別子は共有ライブラリの場所を示し、
前記第1のプログラム論理モジュールは、
前記プロセッサベースのシステムが前記場所識別子によって示される場所に基づいて、更に前記パス情報により示される前記パスに基づいて、前記コードコンテナから前記共有ライブラリへ前記任意のコードをロードすることを可能にするアクティベーション論理と
前記プロセッサベースのシステムが、前記任意のコードを実行するために前記共有ライブラリを呼び出しすることを可能にする呼び出し論理と
を含む、請求項1に記載のコンピュータープログラム。
【発明の詳細な説明】
【背景技術】
【0001】
[0001]コンピュータープログラム(例えば、ソフトウェアアプリケーション)またはその一部のようなプロセスが、別のプロセスに対して操作を実行することがある。操作を実行するプロセスは、要求プロセス(requesting process)と呼ばれ、操作が実行されるプロセスは、ターゲットプロセス(targeted process)と呼ばれる。従来、要求プロセスがターゲットプロセスにアタッチするために、ターゲットプロセスが実行されているランタイム環境へのコントリビューター(contributor)が、要求プロセスのためのターゲットの一連のサービスを、またはターゲットプロセス内のコードをインスタンス化するためのアクティベーションメカニズムを提供する。例えば、コントリビューターは、オペレーティングシステム、階層型ランタイム(layered runtime)(例えば、Microsoft Corporationによって配布される共通言語ランタイム(CLR)、Oracle Corporationによって配布されるJava(登録商標)仮想マシン(JVM)など)、ホスト実行ファイル(例えば、ブラウザ)、統合フレームワーク(例えば、Windows(登録商標) Presentation Foundation(WPF))などであり得る。アクティベーションメカニズムが、ターゲットプロセス内でコード(例えば、オブジェクト)をインスタンス化するとき、コードは一般的に、通知を受け取る、あるいは、データおよび/またはサービスへのアクセスを提供するホストオブジェクトへの参照を用いて呼び出される、コールバックコードである。このようなアクティベーションメカニズムは、従来、ターゲットプロセスのスタートアップ時に変更可能なレジストリまたは環境など、マシン構成情報を調べることによって提供される。次いで関連コードは、この情報に基づいてインスタンス化され、関連ホスト提供データで初期化される。
【0002】
[0002]しかしながら、ターゲットプロセスのスタートアップ時にターゲットプロセスでコードをアクティブ化するための技法には制限がある。例えば、ターゲットプロセスが、コードを参照する構成で開始されない場合、一般的にターゲットプロセスは、コードを参照する構成が設定された後に再起動される。ターゲットプロセスの再起動は、コードをアクティブ化するユーザー体験に、追加コストおよび/またはステップをもたらす可能性がある。また、ターゲットプロセスが実行されている間に存在する環境は、ターゲットプロセスが再起動されると、再現が困難であることがある。例えば、スレッド競合状態、数日かけてエラーに至らせるスローメモリリーク(slow memory leak)などのような問題は、比較的深刻であるが、再生が困難である可能性がある。別の例では、ターゲットプロセスを再構成することによって暗示される実行環境の変更が、問題の再現を全く妨げる可能性がある。
【0003】
[0003]要求プロセスのコードにアプリケーションプログラミングインターフェイス(API)機能を提供すると、比較的コストのかかるものとなる可能性がある。例えば、ドキュメントの作成および管理、上位互換性などが、プラットフォーム提供APIのコストの一因となることがある。ツーリング機能のような、プラットフォームまたはフレームワークの補助機能は、プラットフォームまたはフレームワークの中心機能よりも比較的低い優先度であるとみなされることが多い。したがって、補助機能を提供するために行われる作業は、延期される可能性がある。比較的複雑なプラットフォームまたはフレームワークでは、コアプラットフォームサービスを提供するための技術は、補助サービスを提供するための技術に対して重複し得ない。このような問題は、補助サービスに関する開発および/または革新を制限する可能性がある。厳密にはプラットフォームを目的としていない、および/または任意のコード(任意のツールコード)の実行を伴う可能性があるコードは、パブリック拡張ポイントの場合のように、実質的なセキュリティの危険を伴うが、注意深い検討および/または実施により緩和される可能性がある。最終的に、アプリケーションまたはフレームワークによって提供されるAPIは、サービス提供問題および/またはバージョン管理問題を伴う可能性がある。例えば、要求プロセスの提供者は、多くの場合、プラットフォームへの変更との同期を維持しようとして、そのコードに調整を行い、潜在的にコードを再コンパイルして、および/または書き換えて、このような変更を説明する。
【発明の概要】
【課題を解決するための手段】
【0004】
[0004]特に実行中のプロセスにコードを動的に挿入するための様々な手法について、本明細書で説明する。例えば、この手法は、プロセスが実行している間にプロセスの外部から任意のコードの動的実行を求める要求を受け取ることに応じて、プロセスが実行している間にプロセスにおいて任意のコードをアクティブ化させることができる。この手法は、オペレーティングシステム(OS)のアプリケーションプログラミングインターフェイス(API)にレジストリから任意のコードを含むコードコンテナの場所を調べさせること、コードコンテナから任意のコードをメッセージによって示されるパスを介してメッセージによって示される場所にある共有ライブラリの中にロードし、共有ライブラリを呼び出して任意のコード値を実行すること、メッセージによって示されるコードコンテナから任意のコードを取得し、メッセージによって指定されるプロセスのエントリポイントで任意のコードをアクティブ化することなどを含むが、これらに限定されない、様々な方法のいずれかでプロセスにおいて任意のコードをアクティブ化させることができる。
【0005】
[0005]実行中のプロセスにコードを動的に挿入する方法について説明する。この方法によれば、ターゲットプロセスにおいて、ターゲットプロセスが実行している間にターゲットプロセス外である要求プロセスからメッセージが受け取られる。メッセージは、ターゲットプロセスで任意のコードを動的に実行することを要求する。メッセージは、任意のコードを識別するコード識別子を含む。任意のコードは、コード識別子に基づいてターゲットプロセスが実行している間に、ターゲットプロセスで検索され(located)、アクティブ化されて、アクティブ化されたコードを提供する。
【0006】
[0006]インターフェイスモジュールと、因果関係モジュール(causation module)とを含むシステムについて説明する。インターフェイスモジュールは、ターゲットプロセスにおいて、ターゲットプロセスが実行している間にターゲットプロセス外である要求プロセスからメッセージを受け取るように構成される。メッセージは、ターゲットプロセスにおける任意のコードの動的実行を要求する。メッセージは、任意のコードを識別するコード識別子を含む。因果関係モジュールは、コード識別子に基づいてターゲットプロセスが実行している間にターゲットプロセスで任意のコードを検索させ、アクティブ化させて、アクティブ化されたコードを提供するように構成される。
【0007】
[0007]プロセッサベースのシステムが実行中のプロセスにコードを動的に挿入できるようにするためのコンピュータープログラム論理を記録されたコンピューター可読媒体を含むコンピュータープログラム製品について、説明する。このコンピュータープログラム製品は、プログラム論理モジュールを含む。このプログラム論理モジュールは、ターゲットプロセスが実行している間にターゲットプロセス外である要求プロセスから、ターゲットプロセスでメッセージを受け取ることに基づいて、プロセッサベースのシステムが、ターゲットプロセスが実行している間にターゲットプロセスで任意のコードを検索させ、アクティブ化させて、アクティブ化されたコードを提供することを可能にするためのものである。メッセージは、ターゲットプロセスにおける任意のコードの動的実行を要求する。メッセージは、任意のコードを識別するコード識別子を含む。コード識別子は、任意のコードを検索しアクティブ化するために使用可能である。
【0008】
[0008]この節により、以下の「発明を実施するための形態」でさらに説明する概念の抜粋を簡略化して紹介する。この節は、特許請求の範囲に記載する主題の主要な特徴または本質的特徴を特定することを目的とせず、さらに特許請求の範囲に記載する主題の範囲を限定するように使用されることを目的としない。さらに、本発明は、「発明を実施するための形態」および/または本文書の他の節に記載する特定の実施形態に限定されないことに注意されたい。このような実施形態は、単に例示のために本明細書で提示される。さらなる実施形態は、本明細書に含まれる教示に基づき、当業者には明らかであろう。
【0009】
[0009]本明細書に組み込まれ、本明細書の一部を形成する添付の図面は、本発明の実施形態を示し、記述と併せて、含まれる原理を説明し、当業者が開示され得る技術を作成および使用できるようにするためにさらに役立つ。
【図面の簡単な説明】
【0010】
図1】[0010]一実施形態に従った例示的コンピューターシステムのブロック図である。
図2】[0011]一実施形態によりターゲットプロセスのコードを動的にアクティブ化するための例示的方法のフローチャートである。
図3】[0012]一実施形態に従った図1に示す要求モジュールの例示的実行のブロック図である。
図4】[0013]一実施形態により実行中のプロセスにコードを動的に挿入するための例示的方法のフローチャートである。
図5】[0014]一実施形態に従った図1に示すプロセス間(in−process、処理中)挿入モジュールの例示的実行のブロック図である。
図6】一実施形態により実行中のプロセスにコードを動的に挿入するための例示的方法のフローチャートである。
図7】一実施形態に従った図1に示すプロセス間挿入モジュールの例示的実行のブロック図である。
図8】[0015]一実施形態により任意のコードを検索させ、アクティブ化させるための例示的方法のフローチャートである。
図9】一実施形態により任意のコードを検索させ、アクティブ化させるための例示的方法のフローチャートである。
図10】[0016]一実施形態に従った図7に示す因果関係モジュールの例示的実行のブロック図である。
図11】[0017]実施形態を実行することができる例示的コンピューターを示す図である。
【発明を実施するための形態】
【0011】
[0018]開示する技術の特徴および利点は、同様の参照符号が全体を通して対応する要素を特定する図面と合わせられるとき、以下に示す詳細な説明からより明らかになるであろう。図面では、同様の参照符号は、一般的に、同一の要素、機能的に同様の要素、および/または構造的に同様の要素を示す。要素が最初に表示される図面は、対応する参照符号中の最も左の桁で示される。
【0012】
I.導入
[0019]次の詳細な説明は、本発明の例示的実施形態を示す添付の図面を参照する。しかしながら、本発明の範囲は、これらの実施形態に限定されず、代わりに添付の特許請求の範囲によって定義される。したがって、例示の実施形態の修正版のような、添付の図面に示す以外の実施形態が、やはり本発明によって含まれる可能性がある。
【0013】
[0020]「1つの実施形態(one embodiment)」、「一実施形態(an embodiment)」、「一例示的実施形態(an example embodiment)」、または同種のものに特定した参照は、記載した実施形態が、特定の特徴、構造、または特性を含む可能性があるが、すべての実施形態が、特定の特徴、構造、または特性を必ずしも含むとは限らないことを示す。また、このような語句は、必ずしも同じ実施形態を指すとは限らない。さらに、特定の特徴、構造、または特性が、一実施形態に関連して説明されるとき、明示的に説明されるかどうかに関わらず、このような特徴、構造、または特性を他の実施形態と関連して実行することは、当業者には理解されると思われる。
【0014】
II.例示的実施形態
[0021]本明細書で説明する例示的実施形態は、実行中のプロセスにコードを動的に挿入することができる。例えば、例示的実施形態は、プロセスが実行している間にプロセスの外部から任意のコードの動的実行を求める要求を受け取ることに応じて、プロセスが実行している間にプロセスにおいて任意のコードをアクティブ化させることができる。例示的実施形態は、オペレーティングシステム(OS)のアプリケーションプログラミングインターフェイス(API)がレジストリから任意のコードを含むコードコンテナの場所を調べ、場所を特定すると、コードコンテナから任意のコードをアクティブ化し、要求を行った呼出し元に任意のコードへの参照を提供するようにさせること、メッセージによって指示されるパスを介してコードコンテナから任意のコードを、メッセージによって指示される場所の共有ライブラリにロードし、共有ライブラリを呼び出して任意のコード値をアクティブ化すること、メッセージによって指示されるコードコンテナから任意のコードを取得し、メッセージによって指定されるプロセスのエントリポイントで任意のコードをアクティブ化することなどを含むが、これらに限定されない、様々な方法のいずれかでプロセスにおいて任意のコードをアクティブ化させることができる。
【0015】
[0022]本明細書に記載する例示的技法は、プロセスにおいてコードを実行するための従来の技法と比べて様々な利点を有する。例えば、例示的技法は、要求プロセスのコードをターゲットプロセスに対して載せる(bear)ようにするために、その場限りで実行中のターゲットプロセスに「アタッチする」ことができる。例示的技法は、任意のコードのインスタンス化を制限する(qualify)データを渡して、任意のコードのパラメータ化されたアクティベーションを可能にすることができる。インスタンス化は、様々な任意の方法のいずれかで(例えば、要求プロセスから受け取ったデータにアクセスすることによって)限定されることが可能である。任意のコードが実行中のターゲットプロセスに挿入されると、任意のコードは、ターゲットプロセスおよび/またはターゲットプロセスが実行されている環境(例えば、プログラミングランタイム環境)に対して帯域外(すなわち、ターゲットプロセスおよび/または前述の環境の外部)でサービスされる(例えば更新される)ことが可能である。
【0016】
[0023]例示的技法は、プロセスにおいてコードを実行するための従来の技法に比べて、コードをアクティブ化するというユーザー体験および/または開発者体験に対するコストおよび/またはステップの数を低減することができる。例えば、例示的技法は、要求プロセスのコードにAPI機能を必ずしも設ける必要がない。この例に従って、このようなAPI機能に関するドキュメンテーションの作成および管理、上位互換性などは、必要ではないことがある。さらにこの例に従って、このようなAPI機能に関連するサービス提供問題および/またはバージョン管理問題は、回避することができる。実行中のプロセスに挿入される任意のコードは、任意のコードの動的実行を求める要求を行った呼出し元がそれを用いて通信することができるAPIを提供することができる。これは、任意のコードを挿入されるプロセスに対して、より優れた柔軟性および/または制御を提供することができる。別の例では、ターゲットプロセスの起動時に、特定の構成は必要とされない。例えば、ターゲットプロセスが、コードを参照する構成で起動されない場合、ターゲットプロセスは、コードを参照する構成で再起動される必要がない。したがって、ターゲットプロセスが実行している間に存在する環境(例えば、問題)が、再生される必要がない。さらに別の例では、要求プロセスの提供者は、ターゲットプロセスへの変更との同期を維持するために要求プロセスのコードに対して調整を必ずしも行う必要がない。
【0017】
[0024]図1は、一実施形態に従った例示的コンピューターシステム100のブロック図である。一般的に言えば、コンピューターシステム100は、ユーザー(例えば、アプリケーション開発者)から受け取られた要求(例えば、ハイパーテキスト転送プロトコル(HTTP)要求)に応じてユーザーに情報を提供するように動作する。情報は、ドキュメント(例えば、Webページ、画像、ビデオファイルなど)、実行ファイルの出力、および/または他の好適なタイプの情報を含むことができる。本明細書に記載する例示的実施形態に従って、コンピューターシステム100が、(1つまたは複数の)実行中のプロセスにコードを動的に挿入する。例えば、アプリケーション開発者が、コンピューターシステム100を使用してアプリケーションを開発する場合、コンピューターシステム100は、アプリケーションに関するトラブルシューティングを容易にするために、アプリケーションが実行している間にアプリケーションにコードを動的に挿入することができる。(1つまたは複数の)実行中のプロセスにコードを動的に挿入するための技法に関する詳細は、次の説明で提供する。
【0018】
[0025]図1に示すように、コンピューターシステム100は、複数のユーザーシステム102A〜102M、ネットワーク104、および複数のサーバー106A〜106Nを含む。ユーザーシステム102A〜102Mとサーバー106A〜106Nとの間の通信は、よく知られているネットワーク通信プロトコルを使用してネットワーク104を通じて行われる。ネットワーク104は、ワイドエリアネットワーク(例えば、インターネット)、ローカルエリアネットワーク(LAN)、別のタイプのネットワーク、またはその組合せとすることができる。
【0019】
[0026]ユーザーシステム102A〜102Mは、サーバー106A〜106Nと通信することができる処理システムである。一連の命令に従ってデータを操作することができる少なくとも1つのプロセッサを備えたシステムが、処理システムの例である。例えば、処理システムは、コンピューター、携帯情報端末などとすることができる。ユーザーシステム102A〜102Mは、サーバー106A〜106N上に格納された(そうでなければサーバーを介してアクセス可能な)情報を要求するためにサーバー106A〜106Nに要求を提供するように構成される。例えば、ユーザーが、ユーザーによって所有される、そうでなければユーザーにアクセス可能なユーザーシステム102上に展開されるクライアント(例えば、Webブラウザ、Webクローラ、または他のタイプのクライアント)を使用して、コンピュータープログラムを実行するための要求を開始することができる。いくつかの例示的実施形態に従って、ユーザーシステム102A〜102Mは、サーバー104A〜104Nによってホストされるドメイン(例えば、Webサイト)にアクセスすることができ、したがってユーザーシステム102A〜102Mは、ドメインを介して利用可能な情報にアクセスすることができる。このようなドメインは、Webページを含むことができ、例えば、そこにリンクされたハイパーテキストマークアップ言語(HTML)のドキュメントおよびオブジェクト(例えば、ファイル)として提供されることが可能である。
【0020】
[0027]任意の1つまたは複数のユーザーシステム102A〜102Mは、任意の1つまたは複数のサーバー106A〜106Nと通信することができることは認識されよう。図1ではユーザーシステム102A〜102Mは、デスクトップコンピューターとして描かれているが、ユーザーシステム102A〜102Mは、それには限られないが、ラップトップコンピューター、タブレットコンピューター、携帯情報端末、携帯電話等を含むいかなるクライアント使用可能(client−enabled)システムまたはデバイスも含む可能性があることは、当業者には理解されよう。
【0021】
[0028]サーバー106A〜106Nは、ユーザーシステム102A〜102Mと通信することができる処理システムである。サーバー106A〜106Nは、ユーザーからの要求を受け取ることに応じて、ユーザーに情報を提供するコンピュータープログラムを実行するように構成される。例えば情報は、ドキュメント(例えば、Webページ、画像、ビデオファイルなど)、実行ファイルの出力、または他の好適なタイプの情報を含むことができる。いくつかの例示的実施形態に従って、サーバー106A〜106Nは、それぞれのWebサイトをホストするように構成され、したがってWebサイトは、コンピューターシステム100のユーザーにアクセスすることができる。
【0022】
[0029]第1のサーバー106Aが、例示のために、要求モジュール112と、ターゲットモジュール114とを含むように示される。要求モジュール112は、ターゲットモジュール114によって実行されるターゲットプロセス外である要求プロセス(例えば、要求ソフトウェアプログラム)を実行するように構成される。要求プロセスは、ターゲットモジュール114によって実行されるターゲットプロセスにおける任意のコードの動的実行を要求する(1つまたは複数の)メッセージを生成することができる。1つの例示的タイプの要求プロセスは、ツールプロセスと呼ばれる。ツールプロセスは、ターゲットプロセスに対して診断動作(例えば、問題の元を特定する、デバッギング、プロファイリング、制御など)を行うために使用することができる要求プロセスである。ツールプロセスの例には、ウェブ開発プログラム(例えば、Windows Azure Platform(登録商標)、Amazon Web Services(登録商標)、Google App Engine(登録商標)、VMWare(登録商標)、Force.com(登録商標)など)、および統合開発環境(例えば、Microsoft Visual Studio(登録商標)、JDeveloper(登録商標)、NetBeans(登録商標)、Eclipse Platform(商標)など)が含まれるが、これらに限定されない。
【0023】
[0030]ターゲットモジュール114は、ターゲットプロセス(例えば、ターゲットソフトウェアアプリケーション)を実行するように構成される。ターゲットプロセスの例には、ウェブブラウザ(例えば、Internet Explorer(登録商標)、Firefox(登録商標)、Google Chrome(登録商標)、Safari(登録商標)など)、ゲーム(例えば、オンラインゲームまたはゲーム機用ゲーム)などが含まれるが、これらに限定されない。1つの例示的実施形態では、ターゲットプロセスは、プログラミングランタイム環境で実行される。例えば、プログラミングランタイム環境は、ターゲットモジュール114を含んだランタイムモジュールによって実行されることがある。プログラミングランタイム環境は、中間言語(IL)の命令を機械命令に翻訳することにより、(1つまたは複数の)指定されたコンピュータープログラミング言語で書かれたコンピュータープログラムの実行を支援するソフトウェアコンポーネントである。例えば、Sun Microsystems,Inc.(現在はOracle America,Inc.)によって開発され、配布されるJava Runtime Environment(登録商標)は、Java(登録商標)プログラミング言語で書かれたコンピュータープログラムの実行を支援するプログラミングランタイム環境の一例である。Microsoft Corporationによって開発され、配布されるCommon Language Runtime(登録商標)(CLR)は、様々な言語で書かれたコンピュータープログラムの実行を支援するプログラミングランタイム環境の一例である。しかしながら、ターゲットプロセスは、必ずしもプログラミングランタイム環境で実行する必要がないことは認識されよう。
【0024】
[0031]ターゲットモジュール114は、プロセス間挿入モジュール110を含む。プロセス間挿入モジュール110は、ターゲットモジュール114によって実行されるターゲットプロセスに任意のコードを動的に挿入して、要求モジュール112からの(1つまたは複数の)要求を満たすように構成される。例えば、プロセス間挿入モジュール110は、ターゲットプロセスが実行されている間に、ターゲットプロセスで任意のコードを検索させ、アクティブ化させることができ、結果としてアクティブ化されたコードとなる。この例に従って、ターゲットプロセスが実行されている間に、ターゲットプロセスで要求プロセスから(1つまたは複数の)メッセージを受け取ることに基づいて、ターゲットプロセスで任意のコードを検索させ、アクティブ化させる。要求プロセスからの(1つまたは複数の)メッセージは、ターゲットプロセスにおける任意のコードの動的実行を要求する。この例にさらに従って、(1つまたは複数の)メッセージは、それぞれの任意のコードを識別する、および任意のコードを検索しアクティブ化するために使用可能である(1つまたは複数の)コード識別子を含むことができる。要求プロセスからの(1つまたは複数の)メッセージは、要求プロセスから直接的に、または要求プロセスから間接的に、ターゲットプロセスによって受け取られることがある。例えば、(1つまたは複数の)メッセージの1つまたは複数は、1つまたは複数の中間プロセスおよび/またはモジュールを介して受け取られることがある。このような中間プロセスおよび/またはモジュールは、要求プロセスから、または別の中間プロセス、モジュール、および/または機械から、(1つまたは複数の)メッセージを受け取ると、これをターゲットプロセスへ転送することができる。実行中のプロセスにコードを動的に挿入するためのいくつかの例示的技法について、図2〜10を参照して以下にさらに詳細に説明する。
【0025】
[0032]プロセス間挿入モジュール110、要求モジュール112、およびターゲットモジュール114が、例示のために(1つまたは複数の)第1のサーバー106Aに組み込まれるように示しているが、限定することを意図していない。プロセス間挿入モジュール110、要求モジュール112、および/またはターゲットモジュール114(またはその(1つもしくは複数の)部分)は、ユーザーシステム102A〜102Mのいずれか1つまたは複数に組み込まれる可能性があることを認識されよう。例えば、プロセス間挿入モジュール110、要求モジュール112、および/またはターゲットモジュール114のクライアント側の態様は、ユーザーシステム102A〜102Mの1つまたは複数に組み込まれることがあり、プロセス間挿入モジュール110、要求モジュール112、および/またはターゲットモジュール114のサーバー側の態様は、(1つまたは複数の)第1のサーバー106Aに組み込まれることがある。別の例では、プロセス間挿入モジュール110、要求モジュール112、および/またはターゲットモジュール114は、ユーザーシステム102A〜102Mの間で分配されることがある。さらに別の例では、プロセス間挿入モジュール110、要求モジュール112、および/またはターゲットモジュール114は、ユーザーシステム102A〜102Mのただ1つに組み込まれることがある。さらに別の例では、プロセス間挿入モジュール110、要求モジュール112、および/またはターゲットモジュール114(またはその(1つまたは複数の)いずれかの部分)は、有線または無線接続によりユーザーシステムにローカルに接続された装置に組み込まれることがある。例えば、ターゲットモジュール114(プロセス間挿入モジュール110を含む)は、通信リンクによりユーザーシステム102Aに結合されるモバイルデバイスに組み込まれることがあり、要求モジュール112は、ユーザーシステム102Aに組み込まれることがある。
【0026】
[0033]プロセス間挿入モジュール110は、ハードウェア、ソフトウェア、ファームウェア、またはその任意の組合せで実行されることを含む、実行中のプロセスにコードを動的に挿入する様々な方法で実装されることが可能である。例えば、プロセス間挿入モジュール110は、1つまたは複数のプロセッサで実行されるように構成されたコンピュータープログラムコードとして実装されることが可能である。別の例では、プロセス間挿入モジュール110は、ハードウェア論理/電気回路として実装されることが可能である。一実施形態では、プロセス間挿入モジュール110は、システムオンチップ(SoC)で実装されることが可能である。各SoCは、プロセッサ(例えば、マイクロコントローラ、マイクロプロセッサ、デジタルシグナルプロセッサ(DSP)など)、メモリ、1つもしくは複数の通信インターフェイス、および/または追加回路、および/またはその機能を行うための埋め込まれたファームウェアの1つもしくは複数を含む集積回路チップを含むことができる。
【0027】
[0034]続いて、コンピューターシステム100を使用することができる2つの例示的シナリオについて説明する。第1のシナリオでは、顧客が、要求モジュール112によって実行される要求プロセスを使用しているものとすることができる。顧客は、要求プロセスとの関連で提供される「デバッグ」メニュー中の「ネットワークに接続されたマシンで実行中のプロセスにアタッチする」エントリを選択することができる。要求モジュール112は、ネットワークに接続されたマシンで実行しているプロセスのリストを検索することができる。ユーザーは、プロセスのリストからターゲットプロセスを選択し、例えば、「アタッチする」ボタンを押すことができる。要求モジュール112は、実行中のターゲットプロセスへのメッセージをパッケージ化して送信して、実行中のターゲットプロセスでデバッギングコンポーネントをアクティブ化する。プロセス間挿入モジュール110は、要求モジュール112からのメッセージの受取りに応じて、デバッギングコンポーネントに対してグローバル登録動作を行って、要求モジュール112がデバッギングコンポーネントにアクセスする(例えば、アタッチする)ことを可能にすることができる。
【0028】
[0035]第2のシナリオでは、要求モジュール112は、ユニバーサルシリアルバス(USB)ケーブルを介してローカルコンピューターにアタッチされるタブレットで実行中のすべてのプロセスを列挙する。このシナリオでは、タブレット自体にツールコードはダウンロードされていない。要求モジュール112は、タブレットで実行中のターゲットプロセスを選択し、タブレットに送信するアクティベーションメッセージをパッケージ化する。アクティベーションメッセージは、コードコンテナの場所を指定するコード場所識別子を含む。例えば、コード場所識別子は、タブレットから見ることができる情報に対応する統一資源位置指定子(URL)を指定することができる。アクティベーションメッセージを受け取ると、プロセス間挿入モジュール110は、コード場所識別子によって指定される場所からコードコンテナを検索し、コードコンテナに含まれている任意のコードをアクティブ化して、インスタンス化されたコードを提供する。プロセス間挿入モジュール110は、インスタンス化されたコードへのポインタを要求モジュール112に提供する。要求モジュール112は、インスタンス化されたコードが、マーシャリングを支援するコンポーネントオブジェクトモデル(COM)のオブジェクトとして表される場合、インスタンス化されたコードに直接呼出しすることができることに注意する。プロセス間挿入モジュール110は、その実行環境に役立つ可能性のあるインスタンス化されたコードに関する情報を用いて、インスタンス化されたコードを初期化することができる。
【0029】
[0036]上述の例示的シナリオは、例示のために提供しており、限定することを意図していない。本明細書で説明する例示的技法は、様々なシナリオのいずれにも適用可能であることを認識されよう。
【0030】
[0037]図2は、一実施形態によりターゲットプロセスのコードを動的にアクティブ化するための例示的方法のフローチャート200を示す。フローチャート200は、例えば図1に示すシステム100の要求モジュール112によって行われることがある。例示のために、フローチャート200は、本発明による要求モジュール112の一例である、図3に示す要求モジュール300に関して述べている。図3に示すように、要求モジュール300は、識別モジュール302と、生成モジュール304と、提供モジュール(provision module)306と、受取りモジュール(receipt module)308とを含む。フローチャート200に関する説明に基づいて、当業者にはさらなる構造的および機能的実施形態が明らかであろう。
【0031】
[0038]図2に示すように、フローチャート200の方法は、ステップ202から始まる。ステップ202において、ターゲットプロセスが識別される。一例示的実行では、識別モジュール302が、ターゲットプロセスを識別する。
【0032】
[0039]ステップ204において、コードに関するアクティベーションデータを含んだメッセージが生成される。例示的実行では、生成モジュール304が、メッセージを生成する。
【0033】
[0040]ステップ206において、メッセージは、ターゲットプロセスに送信される。一例示的実行では、提供モジュール306が、メッセージをターゲットプロセスに送信する。
【0034】
[0041]ステップ208において、アクティベーションが成功したかどうかを示す応答が受け取られる。例えば、アクティベーションが成功していない場合、エラーメッセージが受け取られることがある。この例に従えば、エラーメッセージは、コードのアクティベーションに関して発生したエラーを明記することができる。別の例では、アクティベーションが成功した場合、成功メッセージが受け取られることがある。この例に従えば、成功メッセージは、コードが要求モジュール300にアクセス可能であることを示すことができる。例えば、成功メッセージは、コードを呼び出す(call into)のに使用可能なコードへの参照を含むことができる。一例示的実行では、受取りモジュール308が、応答を受け取る。
【0035】
[0042]いくつかの例示的実施形態では、フローチャート200の1つまたは複数のステップ202、204、206、および/または208が行われないことがある。さらに、ステップ202、204、206、および/または208に追加した、またはこれらに代わるステップが行われることがある。
【0036】
[0043]要求モジュール300が、識別モジュール302、生成モジュール304、提供モジュール306、および/または受取りモジュール308のうちの1つまたは複数を含まないことがあることは認識されよう。さらに、要求モジュール300は、識別モジュール302、生成モジュール304、提供モジュール306、および/または受取りモジュール308に追加した、またはこれらに代わるモジュールを含むことがある。
【0037】
[0044]図4は、一実施形態により実行中のプロセスにコードを動的に挿入するための一例示的方法のフローチャート400を示す。フローチャート400は、例えば図1に示すシステム100のプロセス間挿入モジュール110によって行われることがある。例示のために、フローチャート400は、一実施形態によるプロセス間挿入モジュール110の一例である、図5に示すプロセス間挿入モジュール500に関して述べている。図5に示すように、プロセス間挿入モジュール500は、インターフェイスモジュール502と、アクティベーション判定モジュール504と、提供モジュール506と、状態判定モジュール508と、状態プッシュモジュール510と、パック解除モジュール512と、利用可能性判定モジュール514と、パス判定モジュール516と、アクティベーションモジュール518と、初期化モジュール520と、登録モジュール522と、パッケージ化モジュール524と、ポップ判定モジュール526と、状態ポップモジュール528とを含む。フローチャート400に関する説明に基づいて、当業者にはさらなる構造的および機能的実施形態が明らかであろう。
【0038】
[0045]図4に示すように、フローチャート400の方法は、ステップ402から始まる。ステップ402において、コードに関するアクティベーションデータを含んだメッセージが受け取られる。一例示的実行では、インターフェイスモジュール502が、メッセージを受け取る。
【0039】
[0046]ステップ404において、アクティベーションが無効であるかどうかの判定が行われる。アクティベーションが無効である場合、コードはアクティブ化することができない。アクティベーションが無効ではない場合、本明細書に記載する(1つまたは複数の)技法に従って適切なアクティベーション動作が行われる場合、コードをアクティブ化することができる。アクティベーションが無効である場合、フローはステップ406へ続く。そうでない場合、フローはステップ408へ続く。一例示的実行では、アクティベーション判定モジュール504が、アクティベーションが無効であるかどうかを判断する。いくつかの実施形態では、システム管理者のようなエンティティによって、アクティベーションが、「有効」と「無効」との間で切り換えられることがあることに注意する。これらの実施形態に従って、アクティベーションを「無効」から「有効」に切り換えると、本明細書に記載する(1つまたは複数の)技法に従って適切なアクティベーション動作が行われる場合、コードをアクティブ化できるようにすることができる。
【0040】
[0047]ステップ406において、失敗メッセージが提供される。失敗メッセージは、アクティベーションが無効であることを示す。一例示的実行では、提供モジュール506が、失敗メッセージを提供する。ステップ406が完了すると、フローチャート400が終了する。
【0041】
[0048]ステップ408において、構成状態が存在するかどうかの判断が行われる。例えば、構成状態は、コードと関連する(1つまたは複数の)環境変数によって指定することができる。この例に従って、このような(1つまたは複数の)環境変数が、構成状態を指定する場合、構成状態は存在すると言われる。このような(1つもしくは複数の)環境変数が存在しない、またはこのような(1つもしくは複数の)環境変数が、環境状態を指定しない場合、構成状態は存在しないと言われる。構成状態が存在する場合、フローはステップ410へ続く。そうでない場合、フローはステップ412へ続く。一例示的実行では、状態判定モジュール508が、構成状態が存在するかどうかを判断する。
【0042】
[0049]ステップ410において、構成状態がプッシュされる。構成状態を「プッシュすること」は、未来に復元されるように構成状態を「持続させること(persisting)」を意味する。例えば、構成状態をプッシュすると、コードのスタートアップ時に提供される同じコードの場所および/またはアクティベーションメカニズムの再利用を可能にするなど、コーディングの利便性がもたらされる。例示的実施形態では、状態プッシュモジュール510が、構成状態をプッシュする。ステップ410が完了すると、フローはステップ412へ続く。
【0043】
[0050]ステップ412において、アクティベーションデータは、メッセージからパック解除される。例示的実施形態では、パック解除モジュール512が、メッセージからアクティベーションデータをパック解除する。
【0044】
[0051]ステップ414において、コードを識別する識別子が利用可能であるかどうかの判定が行われる。コードを識別する識別子が利用可能である場合、フローはステップ416へ続く。そうでない場合、フローはステップ406へ続く。一例示的実行では、利用可能性判定モジュール514は、コードを識別する識別子が利用可能であるかどうかを判定する。
【0045】
[0052]ステップ416において、コードへのパスを示すインジケーターが利用可能であるかどうかの判定が行われる。例えば、パスは、ネットワークの場所、ローカルマシンに関する情報、ネットワーク(例えば、インターネット)を介してダウンロードすることができるファイルへの統一資源識別子(URI)などとすることができる。この例に従えば、URIは、統一資源位置指定子(URL)または統一資源名(URN)とすることができる。コードへのパスを示すインジケーターが利用可能である場合、フローはステップ418へ続く。そうでない場合、フローはステップ420へ続く。一例示的実行では、パス判定モジュール516は、コードへのパスを示すインジケーターが利用可能であるかどうかを判定する。
【0046】
[0053]ステップ418において、コードは、パスによって指定される場所からアクティブ化される(例えば、ロードされるおよび/または少なくとも部分的に実行される)。一例示的実行では、アクティベーションモジュール518が、パスによって指定される場所からコードをアクティブ化する。ステップ418が完了すると、フローはステップ422へ続く。
【0047】
[0054]ステップ420において、コードは、コードを識別する識別子に基づいてアクティブ化される。例示的実行では、アクティベーションモジュール518が、コードを識別する識別子に基づいてコードをアクティブ化する。ステップ420が完了すると、フローはステップ422へ続く。
【0048】
[0055]ステップ418、420、および/または422を行う試みが成功しないと、エラー状態を招く可能性あり、この場合フローはステップ406へ続くことは認識されよう。例えば、ステップ418または420において、コードのアクティベーションが失敗する可能性がある。別の例では、ステップ422において、アクティブ化されたコードの初期化が失敗する可能性がある。この例に従って、初期化が失敗する場合、アクティブ化されたコードは、「クリーンアップ」されることが可能である。
【0049】
[0056]ステップ422において、アクティブ化されたコードは初期化される。例えば、初期化は、コードのアクティブ化を制限するために情報の環境変数を検討すること、アクティブ化されたコードに指定のインターフェイスを実行するよう求めること、アクティブ化されたコードと関連するコードコンテナに、呼び出すことができる名前のエントリポイントを公開するよう求めること、メッセージから任意の初期化データをパック解除することなどを含むことができる。一例示的実行では、初期化モジュール520が、アクティブ化されたコードを初期化する。
【0050】
[0057]ステップ424において、アクティブ化されたコードは登録される。一例示的実行では、登録モジュール522が、アクティブ化されたコードを登録する。
[0058]ステップ426において、アクティベーションの結果がパッケージ化される。一例示的実行では、パッケージ化モジュール524が、アクティベーションの結果をパッケージ化する。
【0051】
[0059]ステップ428において、構成状態がポップされるべきかどうかの判定が行われる。構成状態がポップされるべきである場合、フローはステップ430へ続く。そうでない場合、フローはステップ432へ続く。例示的実施形態では、ポップ判定モジュール526が、構成状態がポップされるべきかどうかを判定する。
【0052】
[0060]ステップ430において、構成状態がポップされる。構成状態を「ポップすること」は、ステップ410においてプッシュされた構成状態を「リストアすること」を意味する。一例示的実施形態では、状態ポップモジュール528が、構成状態をポップする。ステップ430が完了すると、フローはステップ432へ続く。
【0053】
[0061]ステップ432において、アクティベーションの結果が返される。一例示的実行では、提供モジュール506が、アクティベーションの結果を返す。ステップ432が完了すると、フローチャート400が終了する。
【0054】
[0062]いくつかの例示的実施形態では、フローチャート400の1つまたは複数のステップ402、404、406、408、410、412、414、416、418、420、422、424、426、428、430、および/または432が行われないことがある。さらに、ステップ402、404、406、408、410、412、414、416、418、420、422、424、426、428、430、および/または432に追加した、またはこれらに代わるステップが行われることがある。
【0055】
[0063]プロセス間挿入モジュール500は、インターフェイスモジュール502、アクティベーション判定モジュール504、提供モジュール506、状態判定モジュール508、状態プッシュモジュール510、パック解除モジュール512、利用可能性判定モジュール514、パス判定モジュール516、アクティベーションモジュール518、初期化モジュール520、登録モジュール522、パッケージ化モジュール524、ポップ判定モジュール526、および/または状態ポップモジュール528のうちの1つまたは複数を含まない可能性があることは認識されよう。さらに、プロセス間挿入モジュール500は、インターフェイスモジュール502、アクティベーション判定モジュール504、提供モジュール506、状態判定モジュール508、状態プッシュモジュール510、パック解除モジュール512、利用可能性判定モジュール514、パス判定モジュール516、アクティベーションモジュール518、初期化モジュール520、登録モジュール522、パッケージ化モジュール524、ポップ判定モジュール526、および/または状態ポップモジュール528に追加した、またはこれらに代わるモジュールを含む可能性がある。
【0056】
[0064]図6は、一実施形態により実行中のプロセスにコードを動的に挿入するための別の例示的方法のフローチャート600を示す。フローチャート600は、例えば図1に示すシステム100のプロセス間挿入モジュール110によって行われることがある。例示のために、フローチャート600は、一実施形態によるプロセス間挿入モジュール110の別の例である、図7に示すプロセス間挿入モジュール700に関して述べている。図7に示すように、プロセス間挿入モジュール700は、インターフェイスモジュール702と、因果関係モジュール704と、識別モジュール706と、無効化モジュール708と、スタートアップモジュール710とを含む。フローチャート600に関する説明に基づいて、当業者にはさらなる構造的および機能的実施形態が明らかであろう。
【0057】
[0065]図6に示すように、フローチャート600の方法は、ステップ602から始まる。ステップ602において、ターゲットプロセスの実行中に、ターゲットプロセス外である要求プロセスから、メッセージが受け取られる。メッセージは、要求プロセスから直接的に、または間接的に、ターゲットプロセスで受け取られる可能性があることは認識されよう。メッセージは、コード識別子を含み、ターゲットプロセスで任意のコードを動的に実行することを要求する。コード識別子は、任意のコードを識別する。コード識別子は、任意のコードを検索しアクティブ化するために使用することができる。要求プロセスは、ウェブ開発プログラム、または統合開発環境のような、ツールプロセスとすることができるが、例示的実施形態の範囲はこの点で限定されない。一例示的実施形態では、インターフェイスモジュール702は、ターゲットプロセスが実行されている間に、ターゲットプロセスで要求プロセスからメッセージを受け取る。
【0058】
[0066]一例示的実施形態では、コード識別子は、ターゲットプロセスにおいてコンパイルされて、次いで実行されるソースコードを含む。別の例示的実施形態では、コード識別子は、URIおよび/またはコンパイルのためにソースコードを返すウェブサービスの呼出しである。さらに別の例示的実施形態では、コード識別子は、ターゲットプロセスにおいて実行するための、コンパイルされないスクリプトコードを含む。
【0059】
[0067]ステップ604において、任意のコードは、コード識別子に基づいてターゲットプロセスの実行中にターゲットプロセスにおいて検索させ、アクティブ化させ(例えば、ロードされる、および/または少なくとも部分的にアクティブ化される)て、アクティブ化されたコードを提供する。一例示的実施形態では、因果関係モジュール704は、ターゲットプロセスの実行中にターゲットプロセスで任意のコードを検索させ、アクティブ化させる。
【0060】
[0068]例示的実施形態では、ステップ604は、オペレーティングシステム(OS)のアプリケーションプログラミングインターフェイス(API)に、コード識別子に基づいてレジストリから任意のコードを含むコードコンテナの場所を調べさせることを含む。例えば、オペレーティングシステムのアプリケーションプログラミングインターフェイスに、コード識別子をキーとして使用して、コードコンテナの場所を調べさせることが可能である。コード識別子は、例えば、グローバル一意識別子(GUID)を使用して表されることが可能である。オペレーティングシステムのアプリケーションプログラミングインターフェイスは、例えば、CoCreatelnstanceコンポーネントオブジェクトモデル(COM)関数とすることができる。コードコンテナは、バイナリコンテナ、またはキャブ、またはコードが引き出されることになる他の圧縮コンテナとすることができることは認識されよう。この実施形態に従って、コード識別子は、オペレーティングシステムのアプリケーションプログラミングインターフェイスに提供される。
【0061】
[0069]別の例示的実施形態では、ステップ604は、任意のデータを任意のコードに提供して任意のコードを初期化することを含む。この実施形態に従って、任意のデータは、ステップ602においてターゲットプロセスで受け取られるメッセージに含まれる。
【0062】
[0070]さらに別の例示的実施形態では、ステップ604は、アクティブ化されたコードと関連するスレッドを除く、ターゲットプロセスのすべてのスレッドを停止させることを含む。
【0063】
[0071]さらに別の例示的実施形態では、メッセージ中のコード識別子および/または他のデータは、任意のコードのシングルトンインスタンスを指定する。例えば、コード識別子および/または他のデータは、このようなインスタンスがまだ存在しない場合、任意のコードのインスタンスが作成されることを、および/または、そうでない場合、以前に構成されたインスタンスが返されることを、要求することができる。オブジェクト登録メカニズムは、このために再利用されることが可能である。
【0064】
[0072]ステップ606において、ターゲットプロセスに対してインスタンス化された、インスタンス化されたコードが識別される。インスタンス化されたコードは、アクティブ化されたコードを含む。例示的実施形態では、識別モジュール706は、ターゲットプロセスに対してインスタンス化された、インスタンス化されたコードを識別する。
【0065】
[0073]ステップ608において、無効化メッセージが受け取られる。例えば、無効化メッセージは、ターゲットプロセスによって、または要求プロセスによって、生成されることが可能である。一態様では、無効化メッセージは、ターゲットプロセスにおいて、または要求プロセスにおいて、エラーが発生したことを示すことができる。別の態様では、無効化メッセージは、ターゲットプロセスまたは要求プロセスが中断されなければならないことを示すことができる。例えば、無効化メッセージは、ユーザーがターゲットプロセスを終了させることに応じて受け取ることができる。この例に従えば、無効化メッセージは、ターゲットプロセスのシャットダウンシーケンス中に受け取ることができる。例えば、ターゲットプロセスは、ユーザーがターゲットプロセスを終了させたことを検出し、それに基づいて無効化メッセージを生成することができる。一例示的実行では、インターフェイスモジュール702が、無効化メッセージを受け取る。
【0066】
[0074]ステップ610において、インスタンス化されたコードは無効化される。例えば、インスタンス化されたコードは、インスタンス化されたコードがそれ自体の初期化解除(un−initialization)および/またはシャットダウン作業を行うことができるように、廃棄される、メモリから削除される、呼び出される、その他が行われることがある。この例に従って、インスタンス化されたコードへの(1つまたは複数の)参照は、削除される、非アクティブ化される、その他が行われることがある。一例示的実行では、無効化モジュール708が、インスタンス化されたコードを無効化する。
【0067】
[0075]例示的実施形態では、メッセージは、任意のコードのキャッシングと関連する(1つまたは複数の)修飾子を含むことができる。例えば、メッセージは、任意のコードがすでに検索されて、ローカルにキャッシュされていても、任意のコードが検索されなければならないことを示すことができる。この例に従って、コード識別子は、URLまたはURNのような、URIを参照することができる。1つの態様では、因果関係モジュール704は、任意のコードがすでに検索されて、ローカルにキャッシュされたかどうかを示すテーブルを調べることができる。因果関係モジュール704は、任意のコードがまだ検索されず、ローカルにキャッシュされていない場合、テーブルから任意のコードを検索することができる。別の態様では、因果関係モジュール704は、因果関係モジュール704が、前のメッセージでソースコードとして送られたコードコンテナをすでにコンパイルしたかどうかを知ることができる。メッセージは、任意のコードがGUIDによって識別されるように、ソースコードと併せて、任意のコードと関連付けられるGUIDを含むことができることに注意されたい。
【0068】
[0076]各メッセージと共にソースコードを送信するコストを抑えるために、要求プロセスは、指定されたGUIDのアクティブ化を要求することがある。アクティブ化は、コードコンテナを検索できないために失敗することがある。要求プロセスは、同じGUIDのアクティブ化を要求するメッセージでフォローアップすることができ、今度はメッセージと共にソースコードをバンドルする。因果関係モジュール704は、任意のコードをコンパイルし、キャッシュし、アクティブ化することができる。要求プロセスは、ソースコードなしでGUIDを提供する、任意のコードを要求する別のメッセージを続けることができる。今度は、因果関係モジュール704は、任意のコードのキャッシュされたコンパイル済みバージョンを検索しアクティブ化することができる。前述の方式を実行する1つの潜在的理由は、複数の要求プロセスが、ターゲットプロセスにおいて同じ任意のコードの動的実行を要求するメッセージを提供している可能性があることである。
【0069】
[0077]ターゲットプロセスによって受け取られるメッセージは、単一コードコンテナに含まれる、または複数のコードコンテナにまたがることがある、単一コードオブジェクトよりも多くをインスタンス化する(例えば、初期化する)要求を含むことができることは認識されよう。リターンリファレンスが提供される場合には、結果を保持するデータ構造は、様々なインスタンス化されたオブジェクトへの参照の順序付けられたコレクションを含むことができる。
【0070】
[0078]いくつかの例示的実施形態では、フローチャート600の1つまたは複数のステップ602、604、606、608、および/または610が行われないことがある。さらに、ステップ602、604、606、608、および/または610に追加した、またはこれらに代わるステップが行われることがある。例えば、一例示的実施形態では、フローチャート600が、アクティブ化されたコードに、ターゲットプロセスに含まれるコードのアクセシビリティ(accessibility)を与えることを含む。ターゲットプロセスに含まれるコードのアクセシビリティは、例えば、ターゲットプロセスに含まれているコードの一部がターゲットプロセス以外のエンティティにはアクセスできないように構成されているにもかかわらず、アクティブ化されたコードに与えられる可能性がある。この実施形態に従って、因果関係モジュール704は、ターゲットプロセスに含まれるコードのアクセシビリティを、アクティブ化されたコードに与えることができる。
【0071】
[0079]別の例示的実施形態では、フローチャート600は、任意のコードと関連する環境変数を決定することを含む。環境変数は、任意のコードのロードをパラメータ化するように構成される。例えば、スタートアップモジュール710は、任意のコードと関連する環境変数を決定することができる。この実施形態に従えば、任意のコードは、環境変数に従ってターゲットプロセスのスタートアップ中にアクティブ化される。例えば、スタートアップモジュール710は、ターゲットプロセスのスタートアップ中に任意のコードをアクティブ化することができる。さらにこの実施形態に従って、ターゲットプロセスのスタートアップ中に任意のコードをアクティブ化することの完了に応じて、ステップ604が行われる。例えば、因果関係モジュール704が、ターゲットプロセスのスタートアップ中に任意のコードをアクティブ化することの完了に応じて、ステップ604を行うことができる。
【0072】
[0080]さらに別の例示的実施形態では、フローチャート600は、アクティブ化されたコードを参照する値を提供することを含む。値は、ターゲットプロセスが実行し続けている間にターゲットプロセスと対話するために要求プロセスによって呼出し可能である。要求プロセスによって提供されるデータ構造に、値を入れることができるが、例示の実施形態の範囲は、この点において限定されない。1つの例では、因果関係モジュール704は、アクティブ化されたコードを参照する値を提供することができる。この例に従って、因果関係モジュール704は、値を生成することができる。
【0073】
[0081]前述の実施形態の1つの態様では、要求プロセスは、リターンで要求プロセスに、アクティブ化されたコードへの呼出し可能な参照として機能する値へのアクセス(比較的即時のアクセス)を与える同時コードアクティブ化エクスペリエンスを有することができる。別の態様では、アクティブ化されたコードは、アクティブ化されたコードが要求プロセスにアクセス可能になるようにする方法で、登録されることが可能である。例えば、アクティブ化されたコードは、ターゲットプロセスと要求プロセスとの間で共有されるメモリセクションを使用して登録されることが可能である。
【0074】
[0082]プロセス間挿入モジュール700は、インターフェイスモジュール702、因果関係モジュール704、識別モジュール706、無効化モジュール708、および/またはスタートアップモジュール710のうちの1つまたは複数を含まないことがあることは認識されよう。さらに、プロセス間挿入モジュール700は、インターフェイスモジュール702、因果関係モジュール704、識別モジュール706、無効化モジュール708、および/またはスタートアップモジュール710に追加した、またはこれらに代わるモジュールを含むことがある。
【0075】
[0083]図8および9は、諸実施形態により任意のコードを検索させ、アクティブ化させるための例示的方法のフローチャート800および900を示す。したがって、フローチャート800および900は、フローチャート600のステップ604が行われることがある例示的方法を示す。フローチャート800および900は、例えば、図7に示すプロセス間挿入モジュール700の因果関係モジュール704によって行われることがある。例示のために、フローチャート800および900は、一実施形態による因果関係モジュール704の一例である、図10に示す因果関係モジュール1000に関して述べている。図10に示すように、因果関係モジュール1000は、アクティベーション論理1002と、呼出し論理1004と、取得論理1006とを含む。フローチャート800および900に関する説明に基づいて、当業者にはさらなる構造的および機能的実施形態が明らかであろう。
【0076】
[0084]図8に示すように、フローチャート800の方法は、ステップ802から始まる。ステップ802では、任意のコードは、メッセージ中の場所識別子によって示される場所、およびメッセージ中のパス情報によって示されるパスに基づいて、コードコンテナから共有ライブラリにロードされる。例えば、共有ライブラリは、ダイナミックリンクライブラリ(DLL)とすることができる。別の例では、場所識別子は、統一資源位置指定子(URL)または統一資源名(URN)のような、統一資源識別子(URI)とすることができる。一例示的実施形態では、アクティベーション論理1002は、コードコンテナから共有ライブラリに任意のコードをロードする。例えば、アクティベーション論理1002は、因果関係モジュール1000を含む装置外のソースから共有ライブラリをダウンロードすることができる。
【0077】
[0085]ステップ804では、共有ライブラリへの呼出しが行われて、任意のコードを実行する。一例示的実施形態では、呼出し論理1004が、共有ライブラリを呼び出して、任意のコードを実行する。
【0078】
[0086]いくつかの例示的実施形態では、フローチャート800の1つまたは複数のステップ802および/または804が行われないことがある。さらに、ステップ802および/または804に追加の、またはこれらに代わるステップが行われることがある。
【0079】
[0087]図9に示すように、フローチャート900の方法は、ステップ902から始まる。ステップ902では、任意のコードは、コード識別子によって示されるコードコンテナから取得される。コード識別子は、例えば、MyDll.dll#MyCodeActivatingEntryPointとして指定されることが可能である。一例示的実施形態では、取得論理1006は、コードコンテナから任意のコードを取得する。
【0080】
[0088]ステップ904において、任意のコードは、ターゲットプロセスのエントリポイントでアクティブ化される。エントリポイントは、コード識別子によって指定される。例えば、コード識別子は、メモリにロードされることになるDLL、任意のコードにアクセスするために呼出しが行われることになるエントリポイント、および任意のコードへの呼出しに使用されることになるインターフェイスを識別するコントラクト名を含むことができる。この例に従って、DLLは、エントリポイントを明瞭化する。エントリポイントは、例えば、MyDll.dll#MyCodeActivatingEntryPointのような識別子で指定されることが可能である。この例では、識別子の最初の部分、「MyDll」は、例示のためのファイル名を表しており、これに限定することを意図していない。識別子の最初の部分は、ディスク上のバイナリへの完全修飾パス、または任意のコードの場所に対応する別のURIとすることができることは認識されよう。一例示的実行では、アクティベーション論理1002が、コード識別子によって指定されるターゲットプロセスのエントリポイントで任意のコードをアクティブ化する。
【0081】
[0089]いくつかの例示的実施形態では、フローチャート900の1つまたは複数のステップ902および/または904が行われないことがある。さらに、ステップ902および/または904に追加の、またはこれらに代わるステップが行われることがある。
【0082】
[0090]因果関係モジュール1000が、アクティベーション論理1002、呼出し論理1004、および/または取得論理1006のうちの1つまたは複数を含まない可能性があることは認識されよう。さらに、因果関係モジュール1000は、アクティベーションモジュール1002、呼出しモジュール1004、および/または取得モジュール1006に追加の、またはこれらに代わるモジュールを含むことがある。
【0083】
[0091]プロセス間挿入モジュール110、要求モジュール112、ターゲットモジュール114、識別モジュール302、生成モジュール304、提供モジュール306、受取りモジュール308、インターフェイスモジュール502、アクティベーション判定モジュール504、提供モジュール506、状態判定モジュール508、状態プッシュモジュール510、パック解除モジュール512、利用可能性判定モジュール514、パス判定モジュール516、アクティベーションモジュール518、初期化モジュール520、登録モジュール522、パッケージ化モジュール524、ポップ判定モジュール526、状態ポップモジュール528、インターフェイスモジュール702、因果関係モジュール704、識別モジュール706、無効化モジュール708、スタートアップモジュール710、アクティベーション論理1002、呼出し論理1004、取得論理1006、フローチャート200、フローチャート400、フローチャート600、フローチャート800、およびフローチャート900は、ハードウェア、ソフトウェア、ファームウェア、またはそのいかなる組合せでも実行されることが可能である。
【0084】
[0092]例えば、プロセス間挿入モジュール110、要求モジュール112、ターゲットモジュール114、識別モジュール302、生成モジュール304、提供モジュール306、受取りモジュール308、インターフェイスモジュール502、アクティベーション判定モジュール504、提供モジュール506、状態判定モジュール508、状態プッシュモジュール510、パック解除モジュール512、利用可能性判定モジュール514、パス判定モジュール516、アクティベーションモジュール518、初期化モジュール520、登録モジュール522、パッケージ化モジュール524、ポップ判定モジュール526、状態ポップモジュール528、インターフェイスモジュール702、因果関係モジュール704、識別モジュール706、無効化モジュール708、スタートアップモジュール710、アクティベーション論理1002、呼出し論理1004、取得論理1006、フローチャート200、フローチャート400、フローチャート600、フローチャート800、および/またはフローチャート900は、1つまたは複数のプロセッサで実行されるように構成されたコンピュータープログラムコードとして実行されることが可能である。
【0085】
[0093]別の例では、プロセス間挿入モジュール110、要求モジュール112、ターゲットモジュール114、識別モジュール302、生成モジュール304、提供モジュール306、受取りモジュール308、インターフェイスモジュール502、アクティベーション判定モジュール504、提供モジュール506、状態判定モジュール508、状態プッシュモジュール510、パック解除モジュール512、利用可能性判定モジュール514、パス判定モジュール516、アクティベーションモジュール518、初期化モジュール520、登録モジュール522、パッケージ化モジュール524、ポップ判定モジュール526、状態ポップモジュール528、インターフェイスモジュール702、因果関係モジュール704、識別モジュール706、無効化モジュール708、スタートアップモジュール710、アクティベーション論理1002、呼出し論理1004、取得論理1006、フローチャート200、フローチャート400、フローチャート600、フローチャート800、および/またはフローチャート900は、ハードウェア論理/電気回路として実行されることが可能である。
【0086】
[0094]例えば、一実施形態では、プロセス間挿入モジュール110、要求モジュール112、ターゲットモジュール114、識別モジュール302、生成モジュール304、提供モジュール306、受取りモジュール308、インターフェイスモジュール502、アクティベーション判定モジュール504、提供モジュール506、状態判定モジュール508、状態プッシュモジュール510、パック解除モジュール512、利用可能性判定モジュール514、パス判定モジュール516、アクティベーションモジュール518、初期化モジュール520、登録モジュール522、パッケージ化モジュール524、ポップ判定モジュール526、状態ポップモジュール528、インターフェイスモジュール702、因果関係モジュール704、識別モジュール706、無効化モジュール708、スタートアップモジュール710、アクティベーション論理1002、呼出し論理1004、取得論理1006、フローチャート200、フローチャート400、フローチャート600、フローチャート800、および/またはフローチャート900のうちの1つまたは複数は、システムオンチップ(SoC)で実行されることが可能である。SoCは、プロセッサ(例えば、マイクロコントローラ、マイクロプロセッサ、デジタル信号プロセッサ(DSP)など)、メモリ、1つまたは複数の通信インターフェイス、および/またはさらなる回路、および/またはその機能を行うための埋め込まれたファームウェアのうちの1つまたは複数を含む集積回路チップを含むことができる。
【0087】
[0095]図11は、諸実施形態を実行することができる例示的コンピューター1100を示す。図1に示されるクライアント102A〜102Mのいずれか1つまたは複数、またはサーバー106A〜106Nのいずれか1つまたは複数(または図1、3、5、7、および10に示されるそのいずれか1つまたは複数のサブコンポーネント)は、コンピューター1100を使用して、コンピューター1100の1つまたは複数の機能および/または代替機能を含んで、実装されることが可能である。コンピューター1100は、例えば、従来のパーソナルコンピューター、モバイルコンピューター、もしくはワークステーションの形の汎用コンピューティングデバイスとすることができ、またはコンピューター1100は、特定用途のコンピューティングデバイスとすることができる。本明細書で提供するコンピューター1100の説明は、例示のために行われるものであって、限定することを意図されていない。諸実施形態は、当業者には理解されるように、さらなるタイプのコンピューターシステムで実行されることが可能である。
【0088】
[0096]図11に示すように、コンピューター1100は、処理装置1102と、システムメモリ1104と、システムメモリ1104を備える様々なシステムコンポーネントを処理装置1102に結合するバス1106とを含む。バス1106は、メモリバスもしくはメモリコントローラー、周辺機器用バス、アクセラレーテッドグラフィックスポート(accelerated graphics port)、および様々なバスアーキテクチャのいずれかを使用するプロセッサもしくはローカルバスを含む、いくつかのタイプのバス構造のいずれかの1つまたは複数を表わす。システムメモリ1104は、読取り専用メモリ(ROM)1108およびランダムアクセスメモリ(RAM)1110を含む。基本入出力システム1112(BIOS)は、ROM1108に格納される。
【0089】
[0097]コンピューター1100は、以下のドライブの1つまたは複数を有することもある:ハードディスクからの読取りおよびハードディスクへの書込みを行うためのハードディスクドライブ1114、リムーバブル磁気ディスク1118からの読取りまたはリムーバブル磁気ディスク1118への書込みを行うための磁気ディスクドライブ1116、CD ROM、DVD ROM、もしくは他の光媒体のようなリムーバブル光ディスク1122からの読取りまたはリムーバブル光ディスク1122への書込みを行うための光ディスクドライブ1120。ハードディスクドライブ1114、磁気ディスクドライブ1116、および光ディスクドライブ1120は、それぞれ、ハードディスクドライブのインターフェイス1124、磁気ディスクドライブのインターフェイス1126、および光ディスクドライブのインターフェイス1128によってバス1106に接続される。ドライブおよびそれに関連するコンピューター可読記憶媒体は、コンピューター可読命令、データ構造、プログラムモジュール、および他のデータの不揮発性記憶装置をコンピューターに提供する。ハードディスク、リムーバブル磁気ディスク、およびリムーバブル光ディスクについて述べているが、フラッシュメモリカード、デジタルビデオディスク、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)などのような、他のタイプのコンピューター可読記憶媒体を使用して、データを格納することができる。
【0090】
[0098]いくつかのプログラムモジュールを、ハードディスク、磁気ディスク、光ディスク、ROM、またはRAMに格納することができる。これらのプログラムは、オペレーティングシステム1130、1つもしくは複数のアプリケーションプログラム1132、他のプログラムモジュール1134、およびプログラムデータ1136を含む。アプリケーションプログラム1132またはプログラムモジュール1134は、例えば、本明細書に記載するように、プロセス間挿入モジュール110、要求モジュール112、ターゲットモジュール114、識別モジュール302、生成モジュール304、提供モジュール306、受取りモジュール308、インターフェイスモジュール502、アクティベーション判定モジュール504、提供モジュール506、状態判定モジュール508、状態プッシュモジュール510、パック解除モジュール512、利用可能性判定モジュール514、パス判定モジュール516、アクティベーションモジュール518、初期化モジュール520、登録モジュール522、パッケージ化モジュール524、ポップ判定モジュール526、状態ポップモジュール528、インターフェイスモジュール702、因果関係モジュール704、識別モジュール706、無効化モジュール708、スタートアップモジュール710、アクティベーション論理1002、呼出し論理1004、取得論理1006、フローチャート200(フローチャート200の任意のステップを含む)、フローチャート400(フローチャート400の任意のステップを含む)、フローチャート600(フローチャート600の任意のステップを含む)、フローチャート800(フローチャート800の任意のステップを含む)、および/またはフローチャート900(フローチャート900の任意のステップを含む)を実行するためのコンピュータープログラム論理を含むことができる。
【0091】
[0099]ユーザーは、キーボード1138およびポインティングデバイス1140のような入力デバイスを介してコンピューター1100にコマンドおよび情報を入力することができる。他の入力デバイス(図示せず)には、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナー、タッチスクリーン、カメラ、加速度計、ジャイロスコープなどが含まれる。これらのおよび他の入力装置は、多くの場合、バス1106に結合されたシリアルポートインターフェイス1142を介して処理装置1102に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス(USB)など、他のインターフェイスによって接続されることもある。
【0092】
[0100]表示装置1144(例えば、モニター)もまた、ビデオアダプタ1146などのインターフェイスを介してバス1106に接続される。表示装置1144に加えて、コンピューター1100は、スピーカーおよびプリンターなど、他の周辺出力装置(図示せず)を含むことがある。
【0093】
[0101]コンピューター1100は、ネットワークインターフェイスもしくはアダプター1150、モデム1152、またはネットワークを通じた通信を確立するための他の手段を介してネットワーク1148(例えば、インターネット)に接続される。内蔵または外付けであることがあるモデム1152は、シリアルポートインターフェイス1142によりバス1106に接続される。
【0094】
[0102]本明細書で使用される、「コンピュータープログラム媒体」および「コンピューター可読媒体」という用語は、一般的には、ハードディスクドライブ1114と関連付けられたハードディスク、リムーバブル磁気ディスク1118、リムーバブル光ディスク1122などの非一時的媒体、ならびに、フラッシュメモリカード、デジタルビデオディスク、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)など、他の非一時的媒体を指すように使用される。このようなコンピューター可読記憶媒体は、通信媒体とは区別され、通信媒体と重複しない。通信媒体は通常、搬送波などの変調されたデータ信号に、コンピューター可読命令、データ構造、プログラムモジュール、または他のデータを包含する。「変調されたデータ信号」という用語は、信号の中の情報を符号化するような方法で特性の1つまたは複数が設定されたまたは変更された信号を意味する。例として、限定ではなく、通信媒体は、音響、RF、赤外線、および他の無線媒体などの無線媒体を含む。例示的実施形態は、このような通信媒体も対象とする。
【0095】
[0103]上記のように、コンピュータープログラムおよびモジュール(アプリケーションプログラム1132および他のプログラムモジュール1134を含む)は、ハードディスク、磁気ディスク、光ディスク、ROM、またはRAMに格納することができる。このようなコンピュータープログラムは、ネットワークインターフェイス1150またはシリアルポートインターフェイス1142を介して受け取られることもある。このようなコンピュータープログラムは、アプリケーションによって実行されるまたはロードされるとき、コンピューター1100が本明細書に記載する実施形態の機能を実行できるようにする。したがって、このようなコンピュータープログラムは、コンピューター1100のコントローラーを表す。
【0096】
[0104]例示的実施形態は、任意のコンピューター使用可能媒体に格納されたソフトウェア(例えば、コンピューター可読命令)を含むコンピュータープログラム製品も対象とする。このようなソフトウェアは、1つまたは複数のデータ処理装置で実行されるとき、(1つまたは複数の)データ処理装置を本明細書に説明するように動作させる。諸実施形態は、現在知られているまたは将来の、任意のコンピューター使用可能またはコンピューター可読媒体を使用することができる。コンピューター可読媒体の例には、RAM、ハードドライブ、フロッピー(登録商標)ディスク、CD ROM、DVD ROM、ZIPディスク、テープ、磁気記憶装置、光記憶装置、MEMSベースの記憶装置、ナノテクノロジーに基づいた記憶装置などの記憶装置が含まれるが、これらに限定されない。
【0097】
III.結論
[0105]様々な実施形態を上述したが、これらは単に例として、限定ではなく提示されたことを理解すべきである。本発明の趣旨および範囲を逸脱することなく、本発明における形式および詳細における様々な変更を行うことができることは、当業者には明らかであろう。したがって、本発明の範囲(breadth and scope)およびは、上述の例示的実施形態のいずれによっても限定されるべきではなく、単に、添付の特許請求の範囲およびその均等物に従って定義されるべきである。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11