(57)【要約】  コードをアプリケーションに注入するコンピュータ実装方法が記載される。一実施形態では、メタデータポインタが識別される。メタデータポインタは、アプリケーション起動ファイル内の第１のメタデータセクションを指す。第１のメタデータセクションはアプリケーションメタデータを含む。第２のメタデータセクションはアプリケーション起動ファイル内に作成される。アプリケーションメタデータは第２のメタデータセクションに複製される。第２のメタデータセクションは複製アプリケーションメタデータを含む。第２のメタデータセクション内の複製アプリケーションメタデータは修正される。メタデータポインタは第２のメタデータセクションを指すように更新される。
2017500652.tif 000002
【特許請求の範囲】
【請求項１】
コードをアプリケーションに注入するコンピュータ実装方法であって、
アプリケーション起動ファイル内の第１のメタデータセクションを指すメタデータポインタを識別するステップであって、前記第１のメタデータセクションがアプリケーションメタデータを含む、ステップと、
前記アプリケーション起動ファイル内に第２のメタデータセクションを作成するステップと、
前記アプリケーションメタデータを、複製アプリケーションメタデータを含む前記第２のメタデータセクションに複製するステップと、
前記第２のメタデータセクション内の前記複製アプリケーションメタデータを修正するステップと、
前記第２のメタデータセクションを指すように前記メタデータポインタを更新するステップと、
を含む、方法。
【請求項２】
前記第２のメタデータセクションが前記アプリケーション起動ファイルの最後に作成される、請求項１に記載の方法。
【請求項３】
前記複製アプリケーションメタデータを修正するステップが、
注入オブジェクトをロードするように前記複製アプリケーションメタデータを修正するステップを含む、請求項１に記載の方法。
【請求項４】
エントリーポイント命令又は異種ファイル内の参照のうちの少なくとも１つに基づいて決定される、アプリケーション起動オブジェクトを決定するステップを更に含む、請求項３に記載の方法。
【請求項５】
前記決定されたアプリケーション起動オブジェクトに基づいて、前記複製アプリケーションメタデータ内の前記アプリケーション起動オブジェクトに対するコンストラクタコードを識別するステップを更に含む、請求項４に記載の方法。
【請求項６】
前記注入オブジェクトをロードするように前記複製アプリケーションメタデータを修正するステップが、
前記アプリケーション起動オブジェクトを作成する際の第１のステップとして、前記注入オブジェクトをロードするように前記アプリケーション起動オブジェクトに対する前記コンストラクタコードを修正するステップを含む、請求項５に記載の方法。
【請求項７】
前記注入オブジェクトをロードするように前記複製アプリケーションメタデータを修正するステップが、
前記複製アプリケーションメタデータ内の少なくとも１つのストリームを修正するステップを含む、請求項３に記載の方法。
【請求項８】
前記注入オブジェクトをロードするように前記複製アプリケーションメタデータを修正するステップが、
前記注入オブジェクトをロードするためのコンストラクタを定義するように、前記複製アプリケーションメタデータを修正するステップと、
前記注入オブジェクトを実装するためのコードに対する参照を追加するように、前記複製アプリケーションメタデータを修正するステップと、
前記コード内のオブジェクト名を指定するように、前記複製アプリケーションメタデータを修正するステップと、を含む、請求項３に記載の方法。
【請求項９】
実行可能ファイル又は異種ファイルの少なくとも１つに基づいて決定される、前記アプリケーション起動ファイルを決定するステップを更に含む、請求項１に記載の方法。
【請求項１０】
前記アプリケーション起動ファイルが移植可能な実行可能ファイルを含む、請求項１に記載の方法。
【請求項１１】
前記第１のメタデータセクションが．ＮＥＴメタデータセクションを含み、前記第２のメタデータセクションが．ＮＥＴメタデータセクションを含む、請求項１に記載の方法。
【請求項１２】
コードをアプリケーションに注入するように構成されたコンピューティングデバイスであって、
プロセッサと、
前記プロセッサと電子的に通信しているメモリと、
前記メモリに格納された命令であって、前記命令が、
アプリケーション起動ファイル内にある、アプリケーションメタデータを含む第１のメタデータセクションを指すメタデータポインタを識別することと、
前記アプリケーション起動ファイル内に第２のメタデータセクションを作成することと、
前記アプリケーションメタデータを、複製アプリケーションメタデータを含む前記第２のメタデータセクションに複製することと、
前記第２のメタデータセクション内の前記複製アプリケーションメタデータを修正することと、
前記第２のメタデータセクションを指すように前記メタデータポインタを更新することと、を行うように前記プロセッサによって実行可能な命令と、
を備える、コンピューティングデバイス。
【請求項１３】
前記第２のメタデータセクションが前記アプリケーション起動ファイルの最後に作成される、請求項１２に記載のコンピューティングデバイス。
【請求項１４】
前記複製アプリケーションメタデータを修正するように実行可能な前記命令が、
注入オブジェクトをロードするように前記複製アプリケーションメタデータを修正すること、を行うように前記プロセッサによって実行可能である命令を含む、請求項１２に記載のコンピューティングデバイス。
【請求項１５】
前記命令が、
エントリーポイント命令又は異種ファイル内の参照の少なくとも１つに基づいて決定される、アプリケーション起動オブジェクトを決定すること、を行うように前記プロセッサによって実行可能である、請求項１４に記載のコンピューティングデバイス。
【請求項１６】
前記命令が、
前記決定されたアプリケーション起動オブジェクトに基づいて、前記複製アプリケーションメタデータ内の前記アプリケーション起動オブジェクトに対するコンストラクタコードを識別すること、を行うように前記プロセッサによって実行可能である、請求項１５に記載のコンピューティングデバイス。
【請求項１７】
前記注入オブジェクトをロードするように前記複製アプリケーションメタデータを修正する前記命令が、
前記アプリケーション起動オブジェクトを作成する際の第１のステップとして、前記注入オブジェクトをロードするように前記アプリケーション起動オブジェクトに対する前記コンストラクタコードを修正すること、を行うように前記プロセッサによって実行可能な命令を含む、請求項１６に記載のコンピューティングデバイス。
【請求項１８】
前記注入オブジェクトをロードするように前記複製アプリケーションメタデータを修正するように実行可能な前記命令が、
前記複製アプリケーションメタデータ内の少なくとも１つのストリームを修正すること、を行うように前記プロセッサによって実行可能な命令を含む、請求項１４に記載のコンピューティングデバイス。
【請求項１９】
前記注入オブジェクトをロードするように前記複製アプリケーションメタデータを修正する前記命令が、
前記注入オブジェクトをロードするためのコンストラクタを定義するように、前記複製アプリケーションメタデータを修正することと、
前記注入オブジェクトを実装するためのコードに対する参照を追加するように、前記複製アプリケーションメタデータを修正することと、
前記コード内のオブジェクト名を指定するように、前記複製アプリケーションメタデータを修正することと、
を行うように前記プロセッサによって実行可能な命令を含む、請求項１４に記載のコンピューティングデバイス。
【請求項２０】
コードをアプリケーションに注入するためのコンピュータプログラム製品であって、命令を格納する持続性コンピュータ可読媒体を含み、前記命令が、
アプリケーション起動ファイル内にある、アプリケーションメタデータを含む第１のメタデータセクションを指すメタデータポインタを識別することと、
前記アプリケーション起動ファイル内に第２のメタデータセクションを作成することと、
前記アプリケーションメタデータを、複製アプリケーションメタデータを含む前記第２のメタデータセクションに複製することと、
前記第２のメタデータセクション内の前記複製アプリケーションメタデータを修正することと、
前記第２のメタデータセクションを指すように前記メタデータポインタを更新することと、を行うように実行可能な命令と、
を備える、コンピューティングデバイス。
【発明の詳細な説明】
【背景技術】
【０００１】
コンピュータシステム及びコンピュータ関連技術の用途は急速に増大し続けている。コンピュータシステムの用途におけるこの増大は、コンピュータ関連技術に対する進歩に影響を与えてきた。実際に、コンピュータシステムは益々、実業界及び個人消費者の活動の重要な部分になってきている。コンピュータシステムは、種々の事業、産業、及び学術的努力を実施するのに使用されることがある。コンピュータの広範囲にわたる使用は、インターネットを含むコンピュータネットワークの用途が増大することによって加速してきた。
【０００２】
コンピュータシステムは、エンドユーザが使用するアプリケーションをホストすることがある。ユーザは、これらのアプリケーションを使用して様々な機能性を実行することがある。多くの場合、アプリケーションは、できるだけ多くのユーザに対して広い機能性を提供するように書かれている。しかしながら、多くの場合、特定の仕様を満たすようにアプリケーションを修正するのが望ましいことがある。例えば、企業は、安全上のリスクを低減するため、及び／又はアプリケーションのデータ若しくは機能性を管理する能力を向上させるため、アプリケーションの修正を望むことがある。
【発明の概要】
【課題を解決するための手段】
【０００３】
少なくとも１つの実施形態にしたがって、コードをアプリケーションに注入するコンピュータ実装方法について記載する。一実施形態では、メタデータポインタが識別されてもよい。メタデータポインタは、アプリケーション起動ファイル内の第１のメタデータセクションを指してもよい。第１のメタデータセクションはアプリケーションメタデータを含んでもよい。第２のメタデータセクションはアプリケーション起動ファイル内に作成されてもよい。アプリケーションメタデータは第２のメタデータセクションに複製されてもよい。第２のメタデータセクションは複製アプリケーションメタデータを含んでもよい。第２のメタデータセクション内の複製アプリケーションメタデータは修正されてもよい。メタデータポインタは第２のメタデータセクションを指すように更新されてもよい。
【０００４】
いくつかの実施形態では、第２のメタデータセクションは、アプリケーション起動ファイルの最後に作成されてもよい。例えば、第２のメタデータセクションは、アプリケーション起動ファイル内の最後の項目であってもよい。
【０００５】
いくつかの実施形態では、複製アプリケーションメタデータを修正することは、注入オブジェクトをロードするように複製アプリケーションメタデータを修正することを含んでもよい。場合によっては、複製アプリケーションメタデータを修正することは、アプリケーション起動オブジェクトを決定することを含んでもよい。一例では、アプリケーション起動オブジェクトは、エントリーポイント命令又は異種ファイル内の参照に基づいて決定されてもよい。場合によっては、複製アプリケーションメタデータを修正することは、決定されたアプリケーション起動オブジェクトに基づいて、複製アプリケーションメタデータ内のアプリケーション起動オブジェクトに対するコンストラクタコードを識別することを含んでもよい。場合によっては、注入オブジェクトをロードするように複製アプリケーションメタデータを修正することは、アプリケーション起動オブジェクトを作成する際の第１のステップとして、注入オブジェクトをロードするようにアプリケーション起動オブジェクトに対するコンストラクタコードを修正することを含む。一例では、注入オブジェクトをロードするように複製アプリケーションメタデータを修正することは、起動オブジェクトを作成するためのコンストラクタコードを指すコンストラクタコードポインタを、修正コンストラクタコードを指すように修正することを含む。一例では、修正コンストラクタコードは、アプリケーション起動ファイルに（例えば、最後に）付加されてもよい。
【０００６】
いくつかの実施形態では、注入オブジェクトをロードするように複製アプリケーションメタデータを修正することは、複製アプリケーションメタデータ内の少なくとも１つのストリームを修正することを含む。いくつかの実施形態では、注入オブジェクトをロードするように複製アプリケーションメタデータを修正することは、注入オブジェクトをロードするためのコンストラクタを定義するように複製アプリケーションメタデータを修正することを含む。いくつかの実施形態では、注入オブジェクトをロードするように複製アプリケーションメタデータを修正することは、注入オブジェクトを実装するためのコードに対する参照を追加するように複製アプリケーションメタデータを修正することを含む。いくつかの実施形態では、注入オブジェクトをロードするように複製アプリケーションメタデータを修正することは、コード内のオブジェクト名を指定するように複製アプリケーションメタデータを修正することを含む。
【０００７】
いくつかの実施形態では、アプリケーション起動ファイルが決定されてもよい。一例では、アプリケーション起動ファイルは、実行可能ファイル又は異種ファイルに基づいて決定されてもよい。
【０００８】
いくつかの実施形態では、アプリケーション起動ファイルは移植可能な実行可能ファイルを含む。例えば、アプリケーション起動ファイルは移植可能な実行可能ファイルの形式であってもよい。
【０００９】
いくつかの実施形態では、第１のメタデータセクションは．ＮＥＴメタデータセクションであってもよい。いくつかの実施形態では、第２のメタデータセクションは．ＮＥＴメタデータセクションであってもよい。
【００１０】
コードをアプリケーションに注入するように構成されたコンピューティングデバイスも記載される。コンピューティングデバイスは、プロセッサと、プロセッサと電子的に通信しているメモリとを含んでもよい。メモリは命令を格納してもよく、命令がプロセッサによって実行されると、プロセッサは、アプリケーション起動ファイル内にある、アプリケーションメタデータを含む第１のメタデータセクションを指すメタデータポインタを識別する、命令を格納し、アプリケーション起動ファイル内に第２のメタデータセクションを作成し、アプリケーションメタデータを、複製アプリケーションメタデータを含む第２のメタデータセクションに複製し、第２のメタデータセクション内の複製アプリケーションメタデータを修正し、第２のメタデータセクションを指すようにメタデータポインタを更新する。
【００１１】
コードをアプリケーションに注入するためのコンピュータプログラム製品も記載される。コンピュータプログラム製品は、命令を格納する持続性コンピュータ可読媒体を含んでもよい。命令はプロセッサによって実行可能であってもよく、プロセッサは、アプリケーション起動ファイル内にある、アプリケーションメタデータを含む第１のメタデータセクションを指すメタデータポインタを識別し、アプリケーション起動ファイル内に第２のメタデータセクションを作成し、アプリケーションメタデータを、複製アプリケーションメタデータを含む第２のメタデータセクションに複製し、第２のメタデータセクション内の複製アプリケーションメタデータを修正し、第２のメタデータセクションを指すようにメタデータポインタを更新する。
【図面の簡単な説明】
【００１２】
添付の図面は、多数の例示的な実施形態を示すものであり、本明細書の一部である。以下の説明と併せて、これらの図面は、本開示の様々な原理を実証し説明する。
【図１】本発明のシステム及び方法が実装されてもよい環境の一実施形態を示すブロック図である。
【図２】注入モジュールの一例を示すブロック図である。
【図３】修正モジュールの一例を示すブロック図である。
【図４】アプリケーション起動ファイル内の新しいセクション１６５の一例を示すブロック図である。
【図５】本明細書に記載するシステム及び方法の一実施形態を示すブロック図である。
【図６】本明細書に記載するシステム及び方法の一実施形態を示すブロック図である。
【図７】コードをアプリケーションに注入する方法の一実施形態を示すフローチャートである。
【図８】コードを．ＮＥＴアプリケーションに注入する方法の一実施形態を示すフローチャートである。
【図９】様々な実施形態による、コードをアプリケーションに注入するデバイスの一例を示すブロック図である。
【図１０】本発明のシステム及び方法を実装するのに好適なコンピュータシステムを示すブロック図である。
【００１３】
本明細書に記載する実施形態は、様々な修正及び代替的な形態が可能であり、特定の実施形態を例として図面に示しており、本明細書において詳細に記載する。しかしながら、本明細書に記載する例示的な実施形態は、開示される特定の形態に限定されないものとする。むしろ、本開示は、添付の特許請求の範囲内に含まれる全ての修正、等価物、及び代替物を包含するものである。
【発明を実施するための形態】
【００１４】
本明細書に記載するシステム及び方法は、コードをアプリケーションに注入することに関する。一例では、本明細書に記載するシステム及び方法は、コードを．ＮＥＴアプリケーション（例えば、．ＮＥＴフレームワークを使用して少なくとも部分的に実装されるアプリケーション）に注入することに関することがある。例えば、本明細書に記載するシステム及び方法は、コードをマイクロソフトシルバーライトアプリケーション（例えば、ウィンドウズ（登録商標、以下同じ）フォンアプリケーション）に注入するのに使用されてもよい。
【００１５】
様々な状況において、アプリケーションの動作を変更するのが望ましいことがある。例えば、企業環境では、様々なマネジメント及び／又はセキュリティポリシーを既存のアプリケーションに追加するのが望ましいことがある。マネジメント及び／又はセキュリティポリシーは、マネジメント及び／又はセキュリティポリシーを含むように既存のアプリケーションを書き換えることによって、あるいは所望のマネジメント及び／又はセキュリティポリシーを実装する追加層に既存のアプリケーションをラッピングすることによって、既存のアプリケーションに追加されてもよい。アプリケーションラッピングが使用される場合、既存のアプリケーションを変えることなく、所望のマネジメント及び／又はセキュリティポリシーが実装されてもよい。
【００１６】
アプリケーションラッピングは、一般的に、アプリケーション起動プロセスの早い段階で、ラッピングコードをアプリケーションプロセスにロードすることを伴う。一例では、ラッピングコードは、移植可能な実行可能ファイル（ＰＥ）のインポートアドレステーブル（ＩＡＴ）を修正することによって、アプリケーション起動プロセスの早い段階でロードされてもよい。ＩＡＴは、起動時に１つ以上の動的リンクライブラリ（ＤＬＬ）をロードしてもよい。ＩＡＴを修正することによって、（例えば、アプリケーションラッピングを実装するための）追加のＤＬＬがロードされてもよい。しかしながら、場合によっては（例えば、ウィンドウズフォン、．ＮＥＴアプリケーション）、ＩＡＴは単にシステムディレクトリ内のＤＬＬを参照することがあり、システムディレクトリへの更なるアクセスが禁止されることがある（例えば、ＤＬＬをシステムディレクトリに追加することを禁止する）。結果として、ＩＡＴを修正することによって、ラッピングコードをロードすることができない。本明細書に記載するシステム及び方法は、上述の課題を克服することができる。例えば、本明細書に記載するシステム及び方法は、（例えば、ラッピングコードをロードするために）コードを．ＮＥＴアプリケーションに注入するのに使用されてもよい。場合によっては、本明細書に記載するシステム及び方法は、ＩＡＴの修正によるコードの注入の代替として使用されてもよい。例えば、本明細書に記載するシステム及び方法は、注入コード自体が．ＮＥＴベースであるときに、コードを注入するのに使用されてもよい。
【００１７】
図１は、本発明のシステム及び方法が実装されてもよい環境１００の一実施形態を示すブロック図である。環境１００は、デバイス１０５及び記憶装置１２５を含んでもよい。デバイスの例としては、コンピュータ、サーバ、パーソナルコンピューティングデバイス、モバイルデバイス、スマートフォンなどが挙げられる。デバイス１０５は、接続１２０を介して記憶装置１２５に連結されてもよい。接続１２０の例としては、ローカルバス、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、インターネットなどが挙げられる。一例では、記憶装置１２５はデバイス１０５と一体であってもよい。別の例では、記憶装置１２５はデバイスの外付け（例えば、ネットワーク接続ストレージ）であってもよい。記憶装置１２５は１つ以上のファイルを格納してもよい。ファイルの例としては、移植可能な実行ファイル、アプリケーション起動ファイル１３０、及び／又は他のファイル（例えば、ファイル１３５、注入ファイル１４０）が挙げられる。一例では、移植可能な実行ファイル、アプリケーション起動ファイル１３０、及び／又は他のファイルは、アプリケーションファイルセット１８０に含まれてもよい。場合によっては、アプリケーションファイルセット１８０は、インストールファイル形式（例えば、ウィンドウズフォン用のＸＡＰ、．ｚｉｐ、パッケージなど）であってもよい。
【００１８】
デバイス１０５は注入モジュール１１０を含んでもよい。一例では、注入モジュール１１０はコードをファイルに注入してもよい。例えば、注入モジュール１１０は、コードをアプリケーションファイルセット１８０及び／又はアプリケーション起動ファイル１３０に注入してもよい。一例では、アプリケーション起動ファイル１３０及び／又は他のファイルは、移植可能な実行可能ファイル（例えば、．ｅｘｅファイル、．ｄｌｌファイルなど）の形態であってもよい。一例では、アプリケーションファイルセット１８０は、第三者アプリケーションを実行するためのアプリケーションファイルセットであってもよい。一例では、アプリケーション起動ファイル１３０は、アプリケーションの実行を開始するファイル（例えば、アセンブリファイル、ＤＬＬ）であってもよい。一実施形態では、ファイル１３５及び／又は注入ファイル１４０は、動的リンクライブラリ（ＤＬＬ）ファイルであってもよい。場合によっては、アプリケーション起動ファイル１３０及び／又はアプリケーションファイルセット１８０は、．ＮＥＴフレームワークに基づいてもよい。
【００１９】
１つの構成では、アプリケーション起動ファイル１３０は複数のセクションを含んでもよい。例えば、アプリケーション起動ファイル１３０は、１つ以上のヘッダセクション１３５、メタデータセクション１５０、及び１つ以上の他のセクションを含んでもよい。一例では、ヘッダセクション１３５は．ＮＥＴヘッダセクション１３５であってもよい。ヘッダセクション１３５は、メタデータセクション１５０（例えば、．ＮＥＴメタデータセクション）の位置を指すポインタ１４５を含んでもよい。一例では、メタデータセクション１５０はアプリケーションメタデータ１５５（例えば、．ＮＥＴアプリケーションメタデータ）を含んでもよい。
【００２０】
一例では、注入モジュール１１０は、アプリケーションメタデータ１５５を修正することによって、コードをアプリケーションファイルセット１８０に注入してもよい。しかしながら、メタデータセクション１５０に含まれるアプリケーションメタデータ１５５を修正すること（例えば、アプリケーションメタデータ１５５を直接修正すること）は、様々な課題をもたらすことがある。
【００２１】
アプリケーションメタデータ１５５を直接修正することと関連する課題の１つは、アプリケーション起動ファイル１３０内のリンク及び参照を更新することに関する。アプリケーション起動ファイル１３０は、複数の位置固有のリンク又は参照を含むことがある。一例では、位置固有のリンク又は参照は、アプリケーション起動ファイル１３０内におけるリンク又は参照の位置に基づくことがある。結果として、アプリケーション起動ファイル１３０内のリンク又は参照の位置を修正すること（例えば、メタデータの挿入による）は、新しい位置を反映するようにリンク又は参照を更新することを必然的に伴うことがある。メタデータセクション１５０は１つ以上のセクション（例えば、他のセクション１６０）に先行することがあるので、（例えば、コードを注入するために）メタデータセクション１５０内のアプリケーションメタデータ１５５を直接修正することは、後続のセクション（例えば、他のセクション１６０）内の位置固有のリンク又は参照それぞれを更新することを必然的に伴うことがある。場合によっては、位置固有のリンク又は参照の更新は、時間がかかるもの及び／又はエラーを起こしやすいものであることがある。
【００２２】
一例では、注入モジュール１１０は、アプリケーション起動ファイル１３０内に新しいセクション１６５を作成してもよい。新しいセクション１６５は、アプリケーション起動ファイル１３０の最後に作成されてもよいので、新しいセクション１６５に対する修正の結果として、後続の位置固有のリンク又は参照を修正することはない。一例では、注入モジュール１１０は、メタデータセクション１５０に含まれるアプリケーションメタデータ１５５を新しいセクション１６５に複製してもよい。注入モジュール１１０は、複製アプリケーションデータを複製アプリケーションメタデータ１７０として新しいセクション１６５に保存してもよい。アプリケーションメタデータ１５５が新しいセクション１６５に複製される際、複製アプリケーションメタデータ１７０はアプリケーションメタデータ１５５の正確な複製であってもよい。
【００２３】
一例では、注入モジュール１１０は複製アプリケーションメタデータ１７０を修正してもよい。例えば、注入モジュール１１０は、注入メタデータ１７５を含むように複製アプリケーションメタデータ１７０を修正してもよい。一例では、注入メタデータ１７５は、１つ以上の注入ファイル１４０を参照及び／又はロードしてもよい。例えば、注入メタデータ１７５は、アプリケーションをトリガして、（例えば、アプリケーションをラッピングするため）アプリケーションの起動と関連するラッピングコードをロードさせてもよい。
【００２４】
一例では、注入モジュール１１０は、メタデータセクション１５０の代わりに新しいセクション１６５を指すようにポインタ１４５を修正してもよい。結果として、注入メタデータ１７５を含むように修正されている複製アプリケーションメタデータ１７０が、メタデータセクション１５０内のアプリケーションメタデータ１５５の代わりに実行されてもよい。注入メタデータ１７５及び注入ファイル１４０がラッピングコードに対応する場合、アプリケーションは、ポインタ１４５が新しいセクション１６５を指しているときはラッピングされたアプリケーションとして実行されてもよく、又はポインタ１４５がメタデータセクション１５０を指しているときは通常通り（アプリケーションをラッピングせずに）実行されてもよい。
【００２５】
一例では、デバイス１０５は実行モジュール１１５を含んでもよい。いくつかの実施形態では、実行モジュール１１５は、アプリケーション起動ファイル１３０を処理することによってアプリケーションを実行してもよい。一例では、実行モジュール１１５は、ポインタ１４５が指しているメタデータを処理してもよく、指されているメタデータに基づいてアプリケーションを実行してもよい。本明細書に記載するシステム及び方法では、ポインタ１４５は、注入メタデータ１７５を含むように修正されている複製アプリケーションメタデータ１７０を指すように修正されてもよい。
【００２６】
図２は、注入モジュール１１０−ａの一例２００を示すブロック図である。注入モジュール１１０−ａは、図１に示される注入モジュール１１０の一例であってもよい。注入モジュール１１０−ａは、起動ファイル検出モジュール２０５、セクション作成モジュール２１０、メタデータ複製モジュール２１５、修正モジュール２２０、コード注入モジュール２２５、ポインタ更新モジュール２３０、及びリパッケージングモジュール２３５を含んでもよい。注入モジュール１１０−ａの動作及び機能の少なくとも一部は、モジュール２０５〜２３５によって、又はそれらと連動して実行されてもよい。
【００２７】
一実施形態では、起動ファイル検出モジュール２０５は、アプリケーション起動ファイル（例えば、アプリケーション起動ファイル１３０）を検出してもよい。アプリケーション起動ファイルは、アプリケーション起動プロセスで実行される第１のファイルであってもよい。それに加えて、又はその代わりに、アプリケーション起動ファイルは、起動オブジェクト（例えば、アプリケーションの実行を開始するオブジェクト）を設定するための．ＮＥＴメタデータを含むファイルであってもよい。一例では、起動ファイル検出モジュール２０５は、アプリケーションマニフェストファイル（例えば、ＷＭＡｐｐＭａｎｉｆｅｓｔ．ｘｍｌ）に基づいて、アプリケーション起動ファイルを検出してもよい。例えば、起動ファイル検出モジュール２０５は、アプリケーションマニフェストファイル内の起動ファイルとして参照されるアプリケーション起動ファイル（例えば、参照される第１のアセンブリファイル）に基づいて、アプリケーション起動ファイルを検出してもよい。別の例では、起動ファイル検出モジュール２０５は、アプリケーション起動ファイルがアプリケーションファイルセット内の単独実行可能ファイル（例えば、．ＥＸＥファイル）であってもよいことを判断してもよい。
【００２８】
一実施形態では、セクション作成モジュール２１０は、アプリケーション起動ファイル内に新しいセクション（例えば、新しいセクション１６５）を作成してもよい。例えば、セクション作成モジュール２１０は、アプリケーション起動ファイルの最後に新しいセクションを作成してもよい。上述したように、セクション作成モジュール２１０は、更新する必要がある位置固有のリンク又は参照の数を最小限に抑えるため、アプリケーション起動ファイルの最後に新しいセクションを作成してもよい。アプリケーション起動ファイルの最後に新しいセクションを作成することによって、新しいセクションの後に続く位置固有のリンク又は参照がないことが担保されてもよい。ただし、位置固有のリンク又は参照の更新の中には、新しいセクション内で修がなされることにより、行う必要があるものもあることに留意されたい。
【００２９】
一実施形態では、メタデータ複製モジュール２１５は、アプリケーションメタデータ（例えば、アプリケーションメタデータ１５５）をメタデータセクション（例えば、メタデータセクション１５０）から新しいセクションに複製してもよい。結果として、修正に先立って、複製アプリケーションメタデータ１７０は、メタデータセクション内のアプリケーションメタデータの正確な複製であってもよい（例えば、アプリケーションは、使用されているメタデータが、新しいセクションからの複製アプリケーションメタデータのメタデータセクションからのアプリケーションメタデータであるか否かにかかわらず、全く同じに動作してもよい）。
【００３０】
一実施形態では、修正モジュール２２０は複製アプリケーションメタデータを修正してもよい。例えば、修正モジュール２２０は、複製アプリケーションメタデータ内のメタデータを追加（例えば、注入）、除去、及び／又は修正してもよい。一例では、修正モジュール２２０は、注入コードをアプリケーションと関連してロードできるようにしてもよい。例えば、修正モジュール２２０は、アプリケーション（例えば、．ＮＥＴフレームワークを使用して実装されたアプリケーション）のアプリケーションラッピングを可能にしてもよい。修正モジュール２２０については更に詳細に後述する。
【００３１】
一実施形態では、コード注入モジュール２２５は、コードをアプリケーションファイルセット（例えば、アプリケーションファイルセット１８０）に注入してもよい。例えば、コード注入モジュール２２５は、１つ以上の注入ファイル（例えば、注入ファイル１４０）をアプリケーションファイルセットに挿入してもよい。一例では、注入ファイルは、ＤＬＬ、アセンブリファイルなどであってもよい。一例では、アプリケーションメタデータに対する修正は、注入ファイルに含まれるコードを参照し実行してもよい。
【００３２】
一実施形態では、ポインタ更新モジュール２３０は、．ＮＥＴメタデータを指すポインタ（例えば、ポインタ１４５）を更新してもよい。例えば、ポインタ更新モジュール２３０は、（例えば、複製アプリケーションメタデータを修正した後に）新しいセクション内の複製アプリケーションメタデータを指すようにポインタを更新してもよい。一例では、ポインタ更新モジュール２３０は、注入コードなしでアプリケーションを実行するため、メタデータセクション内のアプリケーションメタデータに戻るようにポインタを更新してもよい。一例では、これにより、ラッピングされたアプリケーションとしてアプリケーションを実行すること、又はラッピングなしでアプリケーションを実行することの間で単純に切り替えることが可能になる。
【００３３】
一実施形態では、リパッケージングモジュール２３５は、注入ファイル１４０を含むようにアプリケーションファイルセットをリパッケージしてもよい。例えば、リパッケージングモジュール２３５は、アプリケーション起動ファイル、及び他のファイル（例えば、ファイル１３５、注入ファイル１４０）を、単一のファイル（例えば、．ｅｘｅ、．ｚｉｐ、．ｘａｐなど）にリパッケージしてもよい。
【００３４】
図３は、修正モジュール２２０−ａの一例３００を示すブロック図である。修正モジュール２２０−ａは、図２に示される修正モジュール２２０の一例であってもよい。修正モジュール２２０−ａは、ストリーム識別モジュール３０５、ストリーム修正モジュール３１０、起動オブジェクト識別モジュール３１５、コンストラクタコード検出モジュール３２０、及びコンストラクタコード修正モジュール３２５を含んでもよい。修正モジュール２２０−ａの動作及び機能の少なくとも一部は、モジュール３０５〜３２５によって行われるか、又はそれと連動してもよい。
【００３５】
一実施形態では、ストリーム識別モジュール３０５は、アプリケーションメタデータ（例えば、．ＮＥＴアプリケーションメタデータ）内の１つ以上のストリームを識別してもよい。例えば、ストリーム識別モジュール３０５は、．ＮＥＴメタデータ内の＃Ｓｔｒｉｎｇｓストリーム及び／又は＃〜ストリームを識別してもよい。いくつかの実施形態では、ストリーム識別モジュール３０５はまた、ストリーム内の１つ以上のテーブルを識別してもよい。例えば、ストリーム識別モジュール３０５は、＃〜ストリーム内のＡｓｓｅｍｂｌｙＲｅｆテーブル、＃〜ストリーム内のＴｙｐｅＲｅｆテーブル、＃〜ストリーム内のＭｅｍｂｅｒＲｅｆテーブル、及び／又は＃〜ストリーム内のＭｅｔｈｏｄＤｅｆテーブルを識別してもよい。
【００３６】
一実施形態では、ストリーム修正モジュール３１０は、ストリーム内のメタデータを修正（例えば、追加、除去、又は変更）してもよい。例えば、ストリーム修正モジュール３１０は、少なくとも１つの注入オブジェクトがアプリケーションの一部としてロードされるように適切に構築できるよう、様々なストリーム内のメタデータを修正してもよい。一例では、ストリーム修正モジュール３１０は、＃Ｓｔｒｉｎｇｓストリーム内のメタデータ、＃〜ストリーム内のＡｓｓｅｍｂｌｙＲｅｆテーブル、＃〜ストリーム内のＴｙｐｅＲｅｆテーブル、＃〜ストリーム内のＭｅｍｂｅｒＲｅｆテーブル、及び／又は＃〜ストリーム内のＭｅｔｈｏｄＤｅｆテーブルを修正してもよい。
【００３７】
一例では、ストリーム修正モジュール３１０は、注入アセンブリファイル（例えば、ラップアセンブリ）、注入ファイルの名前空間（例えば、ラップ名前空間）、及び／又は注入オブジェクト（例えば、ラップオブジェクト）に対する名前（例えば、ストリング）を追加してもよい。これらの名前は、１つ以上の他のストリームによって参照されてもよい。
【００３８】
一例では、ストリーム修正モジュール３１０は、＃〜ストリーム内のＡｓｓｅｍｂｌｙＲｅｆテーブルのメタデータを修正して、注入アセンブリファイル（例えば、注入ＤＬＬファイル）に関する情報を追加してもよい。注入アセンブリファイルに関する情報は、注入アセンブリファイルを参照してもよい。一例では、注入アセンブリファイルに関する情報は、注入アセンブリファイルのバージョン情報を含んでもよい。ＡｓｓｅｍｂｌｙＲｅｆテーブル内の修正されたメタデータは、＃Ｓｔｒｉｎｇｓストリームに追加された名前の１つ以上を参照してもよい。例えば、注入アセンブリファイルに関する情報は、＃Ｓｔｒｉｎｇｓストリームに追加された注入アセンブリファイルの名前を参照してもよい。
【００３９】
一例では、ストリーム修正モジュール３１０は、＃〜ストリーム内のＴｙｐｅＲｅｆテーブルのメタデータを修正して、注入オブジェクトに対するタイプ参照（例えば、オブジェクトタイプ）を追加してもよい。新しいタイプ参照は、ＡｓｓｅｍｂｌｙＲｅｆテーブルに追加された注入アセンブリファイルに関する情報を参照してもよい。新しいタイプ参照はまた、注入ファイル名前空間及び／又は注入オブジェクトを参照してもよい。一例では、タイプ参照は、作成されてもよいオブジェクトの分類を示してもよい。
【００４０】
一例では、ストリーム修正モジュール３１０は、＃〜ストリーム内のＭｅｍｂｅｒＲｅｆテーブルのメタデータを修正して、注入オブジェクトに対するコンストラクタを追加してもよい。コンストラクタは、ＴｙｐｅＲｅｆテーブルで参照される新しいタイプを参照してもよい。コンストラクタによって、ＴｙｐｅＲｅｆテーブルに記述された新しいタイプ参照を使用し、ＡｓｓｅｍｂｌｙＲｅｆテーブルに記述された注入アセンブリファイルを適切に参照して、注入オブジェクトを作成することが可能になってもよい。
【００４１】
場合によっては、ストリーム修正モジュール３１０は、テーブルに対する修正に基づいて、＃〜ストリームのテーブル内の行数のカウンタを更新してもよい。例えば、ストリーム修正モジュール３１０は、追加の行をテーブルに追加したときに、テーブル内の行数に対するカウンタを増加させてもよく、また、行をテーブルから除去したときに、テーブル内の行数のカウンタを減少させてもよい。場合によっては、テーブル内の行数に対する各カウンタは、アプリケーション起動ファイル内で適切に参照を行うため、適正である必要があり得る。
【００４２】
一実施形態では、コンストラクタコード検出モジュール３２０は、起動オブジェクト（例えば、アプリケーションを作成するオブジェクト）のコンストラクタを検出してもよい。場合によっては、コンストラクタコード検出モジュール３２０は、起動オブジェクトを識別することによって、起動オブジェクトに対するコンストラクタコードを検出してもよい。一例では、起動オブジェクトはマニフェストファイル内で参照されてもよい。例えば、起動オブジェクトは、マニフェストファイル内のエントリーオブジェクトであるものとして参照されてもよい。別の例では、起動オブジェクトは、アプリケーション起動ファイル内で識別されたエントリーポイント命令に基づいて識別されてもよい。起動オブジェクトが（例えば、マニフェストファイル又はエントリーポイント命令に基づいて）識別されると、＃〜ストリーム内のＭｅｍｂｅｒＲｅｆテーブルが、起動オブジェクトに対するコンストラクタに関して検索されてもよい。ＭｅｍｂｅｒＲｅｆテーブル内で起動オブジェクトに対するコンストラクタが見つかると、コンストラクタコード検出モジュール３２０は、起動オブジェクトに対するコンストラクタコードを検出してもよい。
【００４３】
一実施形態では、コンストラクタコード修正モジュール３２５は、起動オブジェクトに対する検出されたコンストラクタコードを修正してもよい。例えば、コンストラクタコード修正モジュール３２５は、検出されたコンストラクタコードを修正して、起動オブジェクトを作成する際の第１のステップとして（例えば、注入オブジェクトに対して作成されたコンストラクタを使用して）注入オブジェクトをロードしてもよい。これにより、注入コードをアプリケーションと関連してロードすることが可能になってもよい。一例では、これにより、第三者アプリケーション（例えば、．ＮＥＴを使用して実装される）を、注入コード（例えば、マネジメント及び／又はセキュリティポリシー）でラッピングすることが可能になる。
【００４４】
いくつかの実施形態では、修正モジュール２２０−ａは、それに加えて、追加されたアセンブリファイルを参照するようにマニフェストファイル（例えば、ＷＭＡｐｐＭａｎｉｆｅｓｔ．ｘｍｌ）を修正してもよい。場合によっては、ＡｐｐＭａｎｉｆｅｓｔ．ｘａｍｌファイルは、展開アセンブリとして、．ＮＥＴオブジェクトを追加するように修正されてもよい。場合によっては、これらのステップの一方又は両方はパッケージを破棄するために行われてもよい。
【００４５】
図４は、アプリケーション起動ファイル１３０−ａ内の新しいセクション１６５−ａの一例４００を示すブロック図である。アプリケーション起動ファイル１３０−ａは、図１に示されるアプリケーション起動ファイル１３０の一例であってもよい。上述したように、新しいセクション１６５−ａは複製アプリケーションメタデータ１７０−ａを含んでもよい。この例では、複製アプリケーションメタデータ１７０−ａは、第１のストリーム４０５及び第２のストリーム４１５を含んでもよい。一例では、第１のストリーム４０５は＃Ｓｔｒｉｎｇｓストリームであってもよく、第２のストリーム４１５は＃〜ストリームであってもよい。上述したように、第１のストリーム４０５は注入メタデータ１７５−ａ−１を含んでもよい。注入メタデータ１７５−ａ−１は１つ以上の注入ストリング４１０を含んでもよい。例えば、１つ以上の注入ストリング４１０は、ラップアセンブリの名前、ラップ名前空間の名前、及び／又はラップオブジェクトの名前に対するストリングを含んでもよい。
【００４６】
一例では、第２のストリーム４１５はまた、注入メタデータ１７５−ａ−２も含んでもよい。例えば、注入メタデータ１７５−ａ−２は、注入アセンブリ情報４２０（例えば、ＡｓｓｅｍｂｌｙＲｅｆテーブルに含まれる）、注入タイプ参照４２５（例えば、ＴｙｐｅＲｅｆテーブルに含まれる）、及び／又は注入コンストラクタ４３０（例えば、ＭｅｍｂｅｒＲｅｆテーブルに含まれる）を含んでもよい。上述したように、第１及び第２のストリームの注入メタデータによって、注入オブジェクトの作成が可能になってもよい。一例では、第２のストリーム４１５は、それに加えて、起動オブジェクト４３５に対する修正コンストラクタポインタを含んでもよい（例えば、修正コンストラクタポインタはＭｅｍｂｅｒＲｅｆテーブル内にあってもよい）。上述したように、起動オブジェクト４３５の修正コンストラクタ（例えば、新しいセクション１６５−ａ内の複製アプリケーションメタデータ１７０−ａに付加される）は、起動オブジェクトを作成する際の第１のステップとして、注入オブジェクトをロードしてもよい。
【００４７】
図５は、本明細書に記載するシステム及び方法の一実施形態５００を示すブロック図である。図５に示される実施形態は、図１に示される実施形態の一例であってもよい。しかしながら、実施形態５００では、アプリケーションファイルセット１８０はマニフェストファイル５０５（例えば、ＷＭＡｐｐＭａｎｉｆｅｓｔ．ｘｍｌ）を含んでもよい。一例では、マニフェストファイル５０５を含めることは、ウィンドウズフォンアプリケーションのアプリケーションファイルセット１８０と対応してもよい。
【００４８】
上述したように、アプリケーションファイルセット１８０は、アプリケーション起動ファイル１３０、１つ以上のファイル１３５（例えば、アセンブリファイル、ＤＬＬファイル）を含んでもよい。それに加えて、アプリケーションファイルセット１８０はマニフェストファイル５０５を含んでもよい。一例では、マニフェストファイル５０５は、起動オブジェクト参照５１０及び起動ファイル参照５１５を含んでもよい。一例では、起動オブジェクト参照５１０は、アプリケーションに対する起動オブジェクト（例えば、エントリーポイントオブジェクト）を識別してもよい。一実施形態では、起動ファイル参照は、アプリケーション起動ファイル（例えば、起動オブジェクトを作成するためのコンストラクタコードを含むアセンブリファイル）を識別してもよい。
【００４９】
いくつかの実施形態では、注入モジュール１１０は、アプリケーションファイルセット１８０をアンパッケージ（例えば、アンジップ）して、コードをアプリケーションファイルセット１８０に注入してもよい。一例では、注入モジュール１１０は、起動ファイル参照５０５に基づいて、アプリケーションファイルセット１８０内のどのファイル１３５がアプリケーション起動ファイル１３０であるかを判断してもよい。どのファイル１３５がアプリケーション起動ファイル１３０であるかを判断する際、注入モジュール１１０は、アプリケーションメタデータ１５５をメタデータセクションから複製し、複製アプリケーションメタデータ１７０−ｂを、アプリケーション起動ファイル１３０の最後にある新しいセクション１６５に保存してもよい。上述したように、注入モジュール１１０は、複製アプリケーションメタデータ１７０−ｂを修正して注入メタデータ１７５を含むようにしてもよく、アプリケーションファイルセット１８０を修正して１つ以上の注入ファイル１４０（例えば、アセンブリ又はＤＬＬファイル）を含むようにしてもよい。一例では、注入モジュール１１０は、マニフェストファイル５０５内の起動オブジェクト参照５１０に基づいて、起動オブジェクトのコンストラクタを識別してもよい。上述したように、注入モジュール１１０は、起動オブジェクトのコンストラクタを修正して、起動オブジェクト４３５の修正コンストラクタを作成してもよい。一例では、注入メタデータは、起動オブジェクト４３５の修正コンストラクタを指す、修正コンストラクタポインタを含んでもよい。場合によっては、起動オブジェクト４３５の修正コンストラクタは、アプリケーション起動ファイル１３０の最後（例えば、新しいセクションにおける、又は別のセクションにおける、複製アプリケーションメタデータの最後）に付加されてもよい。上述したように、起動オブジェクト４３５の修正コンストラクタは、起動オブジェクトを作成する際の第１のステップとして、注入オブジェクトをロードしてもよい。
【００５０】
図６は、本明細書に記載するシステム及び方法の一実施形態６００を示すブロック図である。図６に示される実施形態は、図１及び／又は図５に示される実施形態の一例であってもよい。しかしながら、実施形態６００（例えば、非電話．ＮＥＴアプリケーション）では、アプリケーション起動ファイル１３０は、アプリケーションファイルセット１８０内の単独の．ＥＸＥファイルであってもよい。結果として、注入モジュール１１０はアプリケーション起動ファイル１３０を決定する必要がないことがある。この例では、起動オブジェクト参照５１０はアプリケーション起動ファイル１３０に含まれてもよい。例えば、起動オブジェクト参照５１０はエントリーポイント命令によって参照されてもよい。一例では、起動オブジェクト参照５１０をアプリケーション起動ファイル１３０に含めることは、ウィンドウズベースの．ＮＥＴアプリケーションの移植可能な実行可能ファイル１８０と対応してもよい。上述したように、注入モジュール１１０は、メタデータを複製アプリケーションメタデータ１７０−ｂに注入してもよく、１つ以上の注入ファイル１４０をアプリケーションファイルセット１８０に注入してもよい。一例では、注入モジュール１１０は、起動オブジェクト参照５１０を使用して、起動オブジェクトのコンストラクタを識別してもよい。注入モジュール１１０は、起動オブジェクトのコンストラクタを修正して、起動オブジェクト４３５の修正コンストラクタを生成してもよい。一例では、注入メタデータは、起動オブジェクト４３５の修正コンストラクタを指す、修正コンストラクタポインタを含んでもよい。場合によっては、起動オブジェクト４３５の修正コンストラクタは、アプリケーション起動ファイル１３０の最後（例えば、新しいセクションにおける、又は別のセクションにおける、複製アプリケーションメタデータの最後）に付加されてもよい。一例では、起動オブジェクト４３５の修正コンストラクタは、起動オブジェクトを作成する際の第１のステップとして、注入オブジェクトをロードしてもよい。
【００５１】
図７は、コードをアプリケーションに注入する方法７００の一実施形態を示すフローチャートである。いくつかの構成では、方法７００は、図１、図２、図５、及び／又は図６に示される注入モジュール１１０によって実装されてもよい。
【００５２】
ブロック７０５で、メタデータポインタが識別されてもよい。メタデータポインタは、アプリケーション起動ファイル内の第１のメタデータセクションを指してもよい。ブロック７１０で、第２のメタデータセクションがアプリケーション起動ファイル内に作成されてもよい。ブロック７１５で、アプリケーションメタデータが第２のメタデータセクションに複製されてもよい。ブロック７２０で、第２のメタデータセクション内の複製アプリケーションメタデータが修正されてもよい。ブロック７２５で、メタデータポインタが第２のメタデータセクションを指すように更新されてもよい。
【００５３】
図８は、コードを．ＮＥＴアプリケーションに注入する方法８００の一実施形態を示すフローチャートである。いくつかの構成では、方法８００は、図１、図２、図５、及び／又は図６に示される注入モジュール１１０によって実装されてもよい。
【００５４】
ブロック８０５で、メタデータポインタが識別されてもよい。メタデータポインタは、アプリケーション起動ファイル内の第１のメタデータセクションを指してもよい。ブロック８１０で、第２のメタデータセクションがアプリケーション起動ファイル内に作成されてもよい。ブロック８１５で、アプリケーションメタデータが第２のメタデータセクションに複製されてもよい。ブロック８２０で、複製アプリケーションメタデータが注入オブジェクトをロードするように修正されてもよい。ブロック８２５で、アプリケーション起動オブジェクトのコンストラクタコードが複製アプリケーションメタデータ内で識別されてもよい。ブロック８３０で、アプリケーション起動オブジェクトのコンストラクタコードが、アプリケーション起動オブジェクトを作成する際の第１のステップとして注入オブジェクトをロードするように修正されてもよい。ブロック８３５で、メタデータポインタが第２のメタデータセクションを指すように更新されてもよい。
【００５５】
図９は、様々な実施形態による、コードをアプリケーションに注入するデバイス１０５−ａの一例を示すブロック図９００である。デバイス１０５−ａは、モバイルデバイス、タブレット、又はパーソナルコンピュータなど、様々な構成のいずれかを有してもよい。デバイス１０５−ａは、モバイル操作を容易にする、小型バッテリーなどの内部電源を有してもよい。いくつかの実施形態では、デバイス１０５−ａは、図１、図５、及び／又は図６のデバイス１０５であってもよい。
【００５６】
デバイス１０５−ａは、アンテナ（１つ以上）９３０、送受信機モジュール９０５、メモリ９１５、及びプロセッサモジュール９２５を含んでもよく、それらはそれぞれ互いに直接又は間接的に（例えば、１つ以上のバスを介して）通信していてもよい。送受信機モジュール９０５は、アンテナ（１つ以上）９３０及び／又は１つ以上の有線若しくは無線リンクを介して、１つ以上のネットワークと双方向的に通信するように構成されてもよい。例えば、送受信機モジュール９０５は、１つ以上の企業サーバと双方向的に通信するように構成されてもよい。送受信機モジュール９０５は、パケットを変調し、変調したパケットを伝送用にアンテナ（１つ以上）９３０に提供するように、またアンテナ（１つ以上）９３０から受信したパケットを復調するように構成された、モデムを含んでもよい。
【００５７】
メモリ９１５は、ランダムアクセスメモリ（ＲＡＭ）及び読出し専用メモリ（ＲＯＭ）を含んでもよい。メモリ９１５は、命令を収容したコンピュータ可読のコンピュータ実行可能ソフトウェアコード９２０を格納してもよく、これらの命令を実行すると、プロセッサモジュール９２５が本明細書に記載の様々な機能（例えば、ポインタの識別、新しいセクションの作成、メタデータの複製、複製メタデータの修正、ポインタの更新など）を行うように構成される。あるいは、ソフトウェアコード９２０は、プロセッサモジュール９２５によって直接実行可能でなくてもよく、（例えば、コンパイルされ実行されると）コンピュータが本明細書に記載の機能を行うように構成されてもよい。
【００５８】
プロセッサモジュール９２５は、知的ハードウェアデバイス、例えば中央処理装置（ＣＰＵ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）などを含んでもよい。
【００５９】
図９のアーキテクチャによれば、デバイス１０５−ａは、通信管理モジュール９１０を更に含んでもよい。通信管理モジュール９１０は、１つ以上の他のデバイスとの通信を管理してもよい。例として、通信管理モジュール９１０は、バスを介してモバイルデバイス１０５−ａの他の構成要素の一部又は全てと通信している、デバイス１０５−ａの構成要素であってもよい。あるいは、通信管理モジュール９１０の機能性は、送受信機モジュール９０５の構成要素として、コンピュータプログラム製品として、及び／又はプロセッサモジュール９２５の１つ以上のコントローラ要素として実装されてもよい。
【００６０】
図９のアーキテクチャによれば、デバイス１０５−ａは、注入モジュール１１０−ｂを更に含んでもよい。注入モジュール１１０−ｂは、図１、図２、図５、及び／又は図６に示される注入モジュール１１０の一例であってもよい。上述したように、注入モジュール１１０−ｂは本明細書に記載のシステム及び方法を実装してもよい。
【００６１】
図１０は、本発明のシステム及び方法を実装するのに好適なコンピュータシステム１０００のブロック図を示す。コンピュータシステム１０００は、図１、図５、図６、及び／又は図９に示されるデバイス１０５の一例であってもよい。コンピュータシステム１０００は、中央処理装置１０１０、システムメモリ１０１５（一般的にはＲＡＭであるが、ＲＯＭ、フラッシュＲＡＭなども含んでもよい）、入出力コントローラ１０２０、音声出力インターフェース１０３０を介するスピーカーシステム１０２５などの外部音声デバイス、ディスプレイアダプタ１０４０を介するディスプレイ画面１０３５などの外部デバイス、キーボード１０４５（キーボードコントローラ１０５０とインターフェース接続される）（若しくは他の入力デバイス）、複数のユニバーサルシリアルバス（ＵＳＢ）デバイス１０６５（ＵＳＢコントローラ１０７０とインターフェース接続される）、及び記憶装置インターフェース１０８０など、コンピュータシステム１０００の主要なサブシステムを相互接続するバス１００５を含む。また、シリアルポート１０６０を通してバス１００５に接続されるマウス１０５５（若しくは他のポイントアンドクリックデバイス）、及びネットワークインターフェース１０８５（バス１００５に直接連結される）も含まれる。
【００６２】
バス１００５によって、中央処理装置１０１０と、上述したような、読出し専用メモリ（ＲＯＭ）又はフラッシュメモリ（どちらも図示なし）及びランダムアクセスメモリ（ＲＡＭ）（図示なし）を含んでもよい、システムメモリ１０１５との間のデータ通信が可能になる。ＲＡＭは、概して、オペレーティングシステム及びアプリケーションプログラムがロードされるメインメモリである。ＲＯＭ又はフラッシュメモリは、他のコードの中でも、周辺構成要素又はデバイスとの相互作用などの基本的なハードウェア動作を制御する、ベーシック入出力システム（ＢＩＯＳ）を含むことができる。例えば、本発明のシステム及び方法を実装する注入モジュール１１０−ｃは、システムメモリ１０１５に格納されてもよい。注入モジュール１１０−ｃは、図１、図２、図５、図６、及び／又は図９に示される注入モジュール１１０の一例であってもよい。コンピュータシステム１０００に常駐するアプリケーションは、概して、ハードディスクドライブ（例えば、固定ディスク１０７５）又は他の記憶媒体などの持続性コンピュータ可読媒体に記憶され、それを介してアクセスされる。それに加えて、アプリケーションは、インターフェース１０８５を介してアクセスされるとアプリケーション及びデータ通信技術にしたがって変調される、電子信号の形態であることができる。
【００６３】
ストレージインターフェース１０８０は、コンピュータシステム１０００の他のストレージインターフェースと同様に、固定ディスクドライブ１０７５など、情報の記憶及び／又は検索用の標準的なコンピュータ可読媒体に接続することができる。固定ディスクドライブ１０７５は、コンピュータシステム１０００の一部であってもよく、又は独立したものであって、他のインターフェースシステムを通してアクセスされてもよい。ネットワークインターフェース１０８５は、ＰＯＰ（ポイントオブプレゼンス）を介したインターネットに対する直接ネットワークリンクを介して、リモートサーバに対する直接接続を提供してもよい。ネットワークインターフェース１０８５は、デジタル携帯電話接続、セルラーデジタルパケットデータ（ＣＤＰＤ）接続、デジタル衛星データ接続などを含む無線技術を用いて、かかる接続を提供してもよい。
【００６４】
他の多くのデバイス又はサブシステム（図示なし）は、同様の方法で接続されてもよい（例えば、文書スキャナ、デジタルカメラなど）。逆に、図１０に示される全てのデバイスが、本発明のシステム及び方法を実践するために必ずしも存在しなくてもよい。デバイス及びサブシステムは、図１０に示されるものとは異なる形で相互接続することができる。図１０に示されるものなどのコンピュータシステムの動作は、当該技術分野において容易に知られており、本出願では詳細に考察しない。本開示を実装するコードは、システムメモリ１０１５又は固定ディスク１０７５の１つ以上など、持続性コンピュータ可読媒体に格納することができる。コンピュータシステム１０００上に提供されるオペレーティングシステムは、ｉＯＳ（登録商標）、ＭＳ−ＤＯＳ（登録商標）、ＭＳ−ＷＩＮＤＯＷＳ（登録商標）、ＯＳ／２（登録商標）、ＵＮＩＸ（登録商標）、ＬＩＮＵＸ（登録商標）、又は別の既知のオペレーティングシステムであってもよい。
【００６５】
更に、本明細書に記載する信号に関して、当業者であれば、信号を第１のブロックから第２のブロックに直接伝送できること、又は信号をブロック間で修正（例えば、増幅、減衰、遅延、ラッチ、バッファ、反転、フィルタリング、又は別の方法で修正）できることを認識するであろう。上述の実施形態の信号は、あるブロックから次のブロックに伝送されるものと特徴付けられるが、本発明のシステム及び方法の他の実施形態は、信号の情報及び／又は機能面がブロック間で伝送される限り、かかる直接伝送される信号の代わりに修正済みの信号を含んでもよい。ある程度、第２のブロックにおける信号入力は、関係する回路の物理的制約（例えば、いくらかの減衰及び遅延が必然的に存在する）により、第１のブロックからの第１の信号出力から得られた第２の信号として概念化することができる。したがって、本明細書で使用するとき、第１の信号から得られた第２の信号は、回路制約によるものであるか、あるいは第１の信号の情報及び／又は最終機能面を変更しない他の回路素子を通過することによるものであるか否かにかかわらず、第１の信号又は第１の信号に対する何らかの修正を含む。
【００６６】
上述の開示は、特定のブロック図、フローチャート、及び例を使用して様々な実施形態を説明しているが、本明細書に記載及び／又は例証されるブロック図の構成要素、フローチャートのステップ、動作、及び／又は構成要素はそれぞれ、個別にかつ／又は集合的に、広範なハードウェア、ソフトウェア、又はファームウェア（若しくはそれらの任意の組み合わせの）構成を使用して実装されてもよい。それに加えて、他の多くのアーキテクチャが同じ機能性を達成するように実装可能であるので、他の構成要素内に含有される構成要素のあらゆる開示は、本質的に例示と見なされるべきである。
【００６７】
本明細書に記載及び／又は例証されるプロセスパラメータ、及びステップの順序は、単なる例として与えられるものであり、所望に応じて変更することができる。例えば、本明細書に例証及び／又は記載されるステップは特定の順序で図示若しくは検討されることがあるが、これらのステップは必ずしも例証又は検討される順序で行われなくてもよい。本明細書に記載及び／又は例証される様々な例示的な方法はまた、本明細書に記載若しくは例証されるステップの１つ以上を省略してもよく、又は開示されるステップに加えて追加のステップを含んでもよい。
【００６８】
更に、様々な実施形態を、完全に機能的なコンピューティングシステムの文脈において本明細書に記載及び／又は例証してきたが、これらの例示的な実施形態の１つ以上は、実際に配布を実施するために使用されるコンピュータ可読媒体の特定のタイプにかかわらず、様々な形態のプログラム製品として配布されてもよい。本明細書で開示される実施形態はまた、特定のタスクを実行するソフトウェアモジュールを使用して実装されてもよい。これらのソフトウェアモジュールは、スクリプト、バッチ、又はコンピュータ可読記憶媒体上若しくはコンピューティングシステム内に格納してもよい他の実行可能ファイルを含んでもよい。いくつかの実施形態では、これらのソフトウェアモジュールは、本明細書で開示される例示的な実施形態の１つ以上を実行するようにコンピューティングシステムを構成してもよい。
【００６９】
上記の記載は、説明を目的として特定の実施形態を参照して記載してきた。しかしながら、上述の例示的考察は、包括的であること、又は本発明を開示される正確な形態に限定することを意図するものではない。上述の教示を考慮して、多くの修正及び変形が可能である。実施形態は、本発明のシステム及び方法並びにそれらの実際の適用の原理を最も良く説明するために選択し記載したものであり、それによって他の当業者が、企図される特定の用途に好適であり得る様々な修正を用いて、本発明のシステム及び方法並びに様々な実施形態を最大限に利用することが可能になる。
【００７０】
別途記載のない限り、「ａ」又は「ａｎ」という用語は、本明細書及び特許請求の範囲で使用するとき、「〜の少なくとも１つ」を意味すると解釈されるものとする。それに加えて、使用しやすくするため、「含む」及び「有する」という語は、本明細書及び特許請求の範囲で使用するとき、「備える」という語と交換可能であり、同じ意味を有する。それに加えて、「〜に基づく」という用語は、本明細書及び特許請求の範囲で使用するとき、「少なくとも〜に基づく」を意味すると解釈されるものとする。
【図１】
2017500652.tif 000003
【図２】
2017500652.tif 000004
【図３】
2017500652.tif 000005
【図４】
2017500652.tif 000006
【図５】
2017500652.tif 000007
【図６】
2017500652.tif 000008
【図７】
2017500652.tif 000009
【図８】
2017500652.tif 000010
【図９】
2017500652.tif 000011
【図１０】
2017500652.tif 000012
【手続補正書】
【提出日】平成28年6月28日(2016.6.28)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コードをアプリケーションに注入するコンピュータ実装方法であって、
アプリケーション起動ファイル内の第１のメタデータセクションを指すメタデータポインタを識別するステップであって、前記第１のメタデータセクションがアプリケーションメタデータを含む、ステップと、
前記アプリケーション起動ファイル内に第２のメタデータセクションを作成するステップと、
前記アプリケーションメタデータを、複製アプリケーションメタデータを含む前記第２のメタデータセクションに複製するステップと、
前記第２のメタデータセクション内の前記複製アプリケーションメタデータを修正するステップと、
前記第２のメタデータセクションを指すように前記メタデータポインタを更新するステップと、
を含む、方法。
【請求項２】
前記第２のメタデータセクションが前記アプリケーション起動ファイルの最後に作成される、請求項１に記載の方法。
【請求項３】
前記複製アプリケーションメタデータを修正するステップが、
注入オブジェクトをロードするように前記複製アプリケーションメタデータを修正するステップを含む、請求項１に記載の方法。
【請求項４】
エントリーポイント命令又は異種ファイル内の参照のうちの少なくとも１つに基づいて決定される、アプリケーション起動オブジェクトを決定するステップを更に含む、請求項３に記載の方法。
【請求項５】
前記決定されたアプリケーション起動オブジェクトに基づいて、前記複製アプリケーションメタデータ内の前記アプリケーション起動オブジェクトに対するコンストラクタコードを識別するステップを更に含む、請求項４に記載の方法。
【請求項６】
前記注入オブジェクトをロードするように前記複製アプリケーションメタデータを修正するステップが、
前記アプリケーション起動オブジェクトを作成する際の第１のステップとして、前記注入オブジェクトをロードするように前記アプリケーション起動オブジェクトに対する前記コンストラクタコードを修正するステップを含む、請求項５に記載の方法。
【請求項７】
前記注入オブジェクトをロードするように前記複製アプリケーションメタデータを修正するステップが、
前記複製アプリケーションメタデータ内の少なくとも１つのストリームを修正するステップを含む、請求項３に記載の方法。
【請求項８】
前記注入オブジェクトをロードするように前記複製アプリケーションメタデータを修正するステップが、
前記注入オブジェクトをロードするためのコンストラクタを定義するように、前記複製アプリケーションメタデータを修正するステップと、
前記注入オブジェクトを実装するためのコードに対する参照を追加するように、前記複製アプリケーションメタデータを修正するステップと、
前記コード内のオブジェクト名を指定するように、前記複製アプリケーションメタデータを修正するステップと、を含む、請求項３に記載の方法。
【請求項９】
実行可能ファイル又は異種ファイルの少なくとも１つに基づいて決定される、前記アプリケーション起動ファイルを決定するステップを更に含む、請求項１に記載の方法。
【請求項１０】
前記アプリケーション起動ファイルが移植可能な実行可能ファイルを含む、請求項１に記載の方法。
【請求項１１】
前記第１のメタデータセクションが．ＮＥＴメタデータセクションを含み、前記第２のメタデータセクションが．ＮＥＴメタデータセクションを含む、請求項１に記載の方法。
【請求項１２】
コードをアプリケーションに注入するように構成されたコンピューティングデバイスであって、
プロセッサと、
前記プロセッサと電子的に通信しているメモリと、
前記メモリに格納された命令であって、前記命令が、
アプリケーション起動ファイル内にある、アプリケーションメタデータを含む第１のメタデータセクションを指すメタデータポインタを識別することと、
前記アプリケーション起動ファイル内に第２のメタデータセクションを作成することと、
前記アプリケーションメタデータを、複製アプリケーションメタデータを含む前記第２のメタデータセクションに複製することと、
前記第２のメタデータセクション内の前記複製アプリケーションメタデータを修正することと、
前記第２のメタデータセクションを指すように前記メタデータポインタを更新することと、を行うように前記プロセッサによって実行可能な命令と、
を備える、コンピューティングデバイス。
【請求項１３】
前記第２のメタデータセクションが前記アプリケーション起動ファイルの最後に作成される、請求項１２に記載のコンピューティングデバイス。
【請求項１４】
前記複製アプリケーションメタデータを修正するように実行可能な前記命令が、
注入オブジェクトをロードするように前記複製アプリケーションメタデータを修正すること、を行うように前記プロセッサによって実行可能である命令を含む、請求項１２に記載のコンピューティングデバイス。
【請求項１５】
コードをアプリケーションに注入するためのコンピュータプログラム製品であって、命令を格納する持続性コンピュータ可読媒体を含み、前記命令が、
アプリケーション起動ファイル内にある、アプリケーションメタデータを含む第１のメタデータセクションを指すメタデータポインタを識別することと、
前記アプリケーション起動ファイル内に第２のメタデータセクションを作成することと、
前記アプリケーションメタデータを、複製アプリケーションメタデータを含む前記第２のメタデータセクションに複製することと、
前記第２のメタデータセクション内の前記複製アプリケーションメタデータを修正することと、
前記第２のメタデータセクションを指すように前記メタデータポインタを更新することと、を行うように前記プロセッサによって実行可能な命令と、
を備える、コンピューティングデバイス。
【国際調査報告】
2017500652.tif 000013