JP4878715B2 - オペレーティングシステムに適合しないアプリケーションにパッチを当てる方法、コンピュータシステム及びコンピュータ可読記録媒体 - Google Patents
オペレーティングシステムに適合しないアプリケーションにパッチを当てる方法、コンピュータシステム及びコンピュータ可読記録媒体 Download PDFInfo
- Publication number
- JP4878715B2 JP4878715B2 JP2001520617A JP2001520617A JP4878715B2 JP 4878715 B2 JP4878715 B2 JP 4878715B2 JP 2001520617 A JP2001520617 A JP 2001520617A JP 2001520617 A JP2001520617 A JP 2001520617A JP 4878715 B2 JP4878715 B2 JP 4878715B2
- Authority
- JP
- Japan
- Prior art keywords
- application
- function
- operating system
- compatible
- computer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44552—Conflict resolution, i.e. enabling coexistence of conflicting executables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45537—Provision of facilities of other operating environments, e.g. WINE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Shovels (AREA)
- Pharmaceuticals Containing Other Organic And Inorganic Compounds (AREA)
Description
(他の出願との関連)
本出願は、1999年9月1日出願の米国仮出願第60/150077号の利益を主張する。
【0002】
(発明の分野)
本発明はソフトウェアに関し、より詳細には、オペレーティングシステムに適合しないソフトウェアアプリケーションを適合させることに関する。
【0003】
(発明の背景)
めまぐるしく動いている今日のソフトウェア分野では、アプリケーションの多くは、アプリケーションの開発時に使用されるオペレーティングシステム用に特化してプログラムされる。通常はオペレーティングシステム開発者からアプリケーション開発者にプログラミング仕様が提供されるが、これらの手順および規則が守られないこともある。その結果、多くのアプリケーションが、新たにリリースされたオペレーティングシステムのもとで正しく機能しなくなる場合がある。これは、プログラミング仕様に従わないことや、オペレーティングシステムがどのように動作するかを憶測することなど、様々な多くの要因から生じる可能性がある。例えば、あるタイプのファイルが常にコンピュータ中の特定位置に記憶されているとアプリケーション開発者が信じていることがあり、このプログラマは、プログラミング仕様の指示どおりにオペレーティングシステム中の関数にそのファイルの位置を要求するのではなく、アプリケーションコードにファイル位置のパスを具体的に入力することになる。さらに、プログラマは、オペレーティングシステムの関数内でエラーが発生した場合にその関数がある種の値だけしか返さないということに依拠する場合もある。例えば、オペレーティングシステムの以前のバージョンではエラーを示すのに1つの負の値が返されていた場合、プログラマは、将来も1つの負の値だけが返されるであろうと憶測することがある。しかし、オペレーティングシステムの変更により、エラーに基づいて他の値が返されるように関数が修正されているかもしれず、したがってプログラムは、このオペレーティングシステムのもとで、すべての状況では正しく機能しなくなる可能性がある。
【0004】
他の例では、プログラムがエラーを含んでいても、あるバージョンのオペレーティングシステムのもとでは正しく動作するように見えることがある。これは、古いバージョンのオペレーティングシステムがアプリケーションに含まれるエラーを検出しないとき、またはエラーを有効としないときに起こる可能性がある。しかし、新たにリリースされたオペレーティングシステムは、以前はチェックされていなかったこれらの条件をチェックするかもしれず、それにより、アプリケーションは新バージョンのオペレーティングシステムに適合しなくなる。
【0005】
適合しないアプリケーションをさらに作り出すということは、オペレーティングシステムの普及が高まるにつれて不適合アプリケーションの問題もまた増大するということである。例えば、あるオペレーティングシステムがそのリリース中に普及すると、そのオペレーティングシステム用に特化して何千ものアプリケーションが書かれることになる。アプリケーションが多数あり、かつアプリケーション開発者のグループが多様であることにより、オペレーティングシステムの新バージョンがリリースされたときに多くのプログラムが正しく機能しなくなる可能性がある。
【0006】
現在機能しているアプリケーションが新しいオペレーティングシステムに適合しない場合、これらのアプリケーションのユーザは、新しいオペレーティングシステムに切り替えたくないと思うことがある。この問題を解決しようとするために、アプリケーション開発者は自分たちのアプリケーション自体を修正することが必要であり、あるいはオペレーティングシステム開発者は、既知の問題のアプリケーションの多くを修正するためにオペレーティングシステムの新バージョンに一体化されたパッチを含め、新しいオペレーティングシステムのもとでもアプリケーションが正しく機能するようにしてきた。
【0007】
しかし、オペレーティングシステムパッチ手法は多くの問題を生じる。第1に、パッチは、オペレーティングシステムに多量のデータを追加することがあり、したがってオペレーティングシステムの空間要件が大きく増大する恐れがある。第2に、新しいオペレーティングシステムに適合するアプリケーションが多いにもかかわらず、すべてのアプリケーションがこの追加パッチ層を通して動作することが必要とされる。これにより、プログラムの実行が遅くなる可能性がある。第3に、修正が必要かもしれないプログラムの数が多いため、オペレーティングシステムのプログラミングコードが非常に乱雑になる場合がある。この乱雑なコードは、オペレーティングシステム開発者がオペレーティングシステムに変更や改良を加えることをより困難にする。最後に、新しいオペレーティングシステムが最初にリリースされるときに、正しく機能しないであろうアプリケーションを開発者がすべて知ることは不可能である。したがって、それらのプログラムが正しく機能できるようにするために、オペレーティングシステムに後続のパッチを作成しなければならない。これにより、すでに複雑なオペレーティングシステムにもう一つの層が加わり、オペレーティングシステムの動作効率が低下する。
【0008】
(発明の概要)
本発明は、アプリケーションが動作するコンピュータのオペレーティングシステムに普通なら適合しないはずのアプリケーションにパッチを当てるためのシステムおよび方法を提供することを対象とする。本発明によれば、適合しないアプリケーションのアドレス空間にダイナミックリンクライブラリ(DLL)が挿入される。DLLは、適合しないアプリケーション中でパッチを当てる必要のある関数を決定し、これらの関数にパッチを当てる。
【0009】
DLLは、オペレーティングシステムに適合しないと識別されたアプリケーションだけについてオペレーティングシステムによってロードされることを理解されたい。したがって、オペレーティングシステムに適合するアプリケーションは、実行時に追加のオペレーティングシステムレベルを通る必要はなく、これによりシステムリソースが温存される。
【0010】
本発明の一実施形態は次のようにして機能する。最初に、ユーザがアプリケーションを起動する。第2に、アプリケーションがオペレーティングシステムに適合するまたは適合しないと識別される。アプリケーションが適合しないかどうかを判定するために、アプリケーションからの識別情報が、現在適合しないことがわかっているアプリケーションのリストを含むデータベースと照らしてチェックされる。アプリケーションの名前がデータベース中にある場合は、アプリケーションのこの特定バージョンが適合するかどうかを調べるために属性のセットがチェックされる。チェックされた属性すべてがデータベース中に見られるものと一致する場合、このアプリケーションは現オペレーティングシステムに適合しないと判定される。
【0011】
アプリケーションの名前がデータベース中に見られない場合は、アプリケーションは現オペレーティングシステムに適合すると判定される。アプリケーションが適合すると判定された場合、アプリケーションは通常どおり実行される。アプリケーションが適合しないと判定された場合、オペレーティングシステムは、アプリケーションとオペレーティングシステムとの間でシム(詰め木)として働くDLLを、アプリケーションのアドレス空間にロードする。Shim DLL(シムDLL)は、Hook DLL(フックDLL)と呼ぶ別個のDLLに含まれるパッチを当てるのに必要なプログラムコードを含む。Hook DLLは、適合しないアプリケーションにパッチを当てるのに必要な実際のプログラムコードを含む。
【0012】
Hook DLLがロードされた後で、Shim DLLは、Hook DLLの内容を解析して、アプリケーション中のどの関数にパッチを当てる必要があるかを決定する。本発明の一実施形態では、Hook DLLはまた、適合しない関数が位置するモジュールの名前、適合しない関数の名前、問題を修正するために呼び出すべきスタブ関数、およびパッチを当てる必要のあるアプリケーションのDLLのリストも含むことができる。次いでShim DLLは、Hook DLLに含まれる情報を用いて、適合しないアプリケーションのプログラムコードにパッチを当てる。
【0013】
適合しないアプリケーションによってShim DLLおよびHook DLLがロードされた後、アプリケーションに必要な残りのDLLがロードされる。ロードされる各DLLは、そのDLLに含まれる関数および関数ポインタのリストを維持するインポートテーブルを有する。Shim DLLは、DLL中の適合しない関数ポインタを、Hook DLLに含まれる更新済み関数ポインタで置換する。
【0014】
本発明の他の態様によれば、実行時にロードされるときDLLにパッチを当てるのに加えて、アプリケーションが実行されている間に動的にロードされるDLLにパッチを当てるための方法およびシステムも提供される。動的にロードされるDLLの内にある不適合性を訂正するために、オペレーティングシステムはデフォルトで、アプリケーションがDLLに動的にリンクしてそのDLLからAPIを呼び出すために使用する少数のシステムAPIにパッチを当てる。
【0015】
前述の概要から当業者なら理解するであろうが、本発明は、適合しないアプリケーションにパッチを当てる効率的な方法を提供する。
【0016】
本発明の前述の態様および付随する多くの利点は、添付の図面と共に以下の詳細な説明を参照することによってよりよく理解されたとき、より容易に認識されるであろう。
【0017】
(好ましい実施形態の詳細な説明)
本発明は、適合しないアプリケーションにパッチを当てるためのコンピュータ方法およびシステムを対象とする。より具体的には、本発明は、アプリケーションを実行するコンピュータ上で稼動するオペレーティングシステムのもとで実行されたときに普通なら適切に機能しないはずのアプリケーションにパッチを当てる際に使用するのに理想的に適している。簡単に述べると、本発明は、アプリケーションがオペレーティングシステムに適合するまたは適合しないと識別し、アプリケーションが適合しないと判定された場合は、適合しないアプリケーションにパッチを当てるShim DLLをアプリケーションのアドレス空間に挿入する。
【0018】
図1および以下の考察は、本発明を実施できる適したコンピューティング環境の簡単かつ一般的な記述を提供するものである。本発明は、パーソナルコンピュータに関連するオペレーティングシステム上で実行されるアプリケーションプログラムの一般的なコンテキストで述べるが、本発明は他のプログラムモジュールと共に実施することもできることを当業者なら理解するであろう。一般にプログラムモジュールは、特定のタスクを実行するか特定の抽象データ型を実装するルーチン、プログラム、コンポーネント、データ構造などを含む。さらに本発明は、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースのまたはプログラム可能な民生電子機器、ミニコンピュータ、メインフレームコンピュータなどを含めた、他のコンピュータシステム構成で実施することもできることを当業者なら理解するであろう。本発明はまた、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが行われる分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、プログラムモジュールがローカルとリモートの両方の記憶デバイス中に位置することができる。
【0019】
図1を参照すると、本発明を実施するための例示的なシステムは従来型のパーソナルコンピュータ20を含み、このパーソナルコンピュータ20は、プロセッシングユニット21と、システムメモリ22と、システムメモリをプロセッシングユニット21に結合するシステムバス23とを備える。システムメモリ22は、読出し専用メモリ(ROM)24およびランダムアクセスメモリ(RAM)25を含む。ROM24には、起動時などにパーソナルコンピュータ20内の要素間で情報を転送するのを助ける基本ルーチンを含むBIOS(basic input/output system)26が記憶されている。パーソナルコンピュータ20はさらに、ハードディスクドライブ27と、例えば取外し可能ディスク29に対して読取りまたは書込みを行うための磁気ディスクドライブ28と、例えばCD−ROMディスク31を読み取ったり他の光学媒体に対して読取りまたは書込みを行ったりするための光学ディスクドライブ30とを備える。ハードディスクドライブ27、磁気ディスクドライブ28、および光学ディスクドライブ30は、それぞれハードディスクドライブインタフェース32、磁気ディスクドライブインタフェース33、および光学ドライブインタフェース34によってシステムバス23に接続される。ドライブおよびそれらに関連するコンピュータ可読媒体は、パーソナルコンピュータ20のための不揮発性記憶域を提供する。以上のコンピュータ可読媒体についての記述ではハードディスク、取外し可能磁気ディスク、およびCD−ROMディスクに言及しているが、磁気カセット、フラッシュメモリカード、ディジタルビデオディスク、ベルヌーイ(Bernoulli)カートリッジ、ZIPディスクなど、コンピュータによって読取り可能な他のタイプの媒体もまた、この例示的な動作環境で使用できることを当業者は理解されたい。
【0020】
ドライブおよびRAM25には、オペレーティングシステム35、1つまたは複数のアプリケーションプログラム36、その他のプログラムモジュール37、およびプログラムデータ38を含めた、いくつかのプログラムモジュールを記憶することができる。ユーザは、キーボード40やマウス42などの入力デバイスを介してパーソナルコンピュータ20にコマンドおよび情報を入力することができる。その他の入力装置(図示せず)には、マイクロホン、タッチパッド、ジョイスティック、ゲームパッド、衛星受信アンテナ、スキャナなどを含めることができる。これらおよび他の入力デバイスは、システムバスに結合されたシリアルポートインタフェース46を介してプロセッシングユニット21に接続されることが多いが、ゲームポートやユニバーサルシリアルバス(USB)など、他のインタフェースによって接続することもできる。モニタ47または他のタイプの表示装置もまた、ビデオアダプタ48などのインタフェースを介してシステムバス23に接続される。モニタに加えて、パーソナルコンピュータは通常、スピーカやプリンタなど他の周辺出力デバイス(図示せず)も備える。
【0021】
パーソナルコンピュータ20は、リモートコンピュータ49など、1つまたは複数のリモートコンピュータへの論理接続を用いてネットワーク化された環境で動作することもできる。リモートコンピュータ49は、サーバ、ルータ、ピアデバイス、またはその他の一般的なネットワークノードとすることができ、図1にはメモリ記憶デバイス50しか示していないが通常は、パーソナルコンピュータ20に関して述べた要素の多くまたはすべてを備える。図1に示す論理接続は、ローカルエリアネットワーク(LAN)51およびワイドエリアネットワーク(WAN)52を含む。このようなネットワーキング環境は、オフィス、企業全体のコンピュータネットワーク、イントラネット、およびインターネットでよくみられる。
【0022】
LANネットワーキング環境で使用されるときは、パーソナルコンピュータ20は、ネットワークインタフェース53を介してLAN51に接続される。WANネットワーキング環境で使用されるときは、パーソナルコンピュータ20は通常、インターネットなどのWAN52を介して通信を確立するためのモデム54またはその他の手段を備える。モデム54は、内蔵でも外付けでもよく、シリアルポートインタフェース46を介してシステムバス23に接続される。ネットワーク化された環境では、パーソナルコンピュータ20に関して示すプログラムモジュールまたはその一部をリモートメモリ記憶デバイスに記憶することもできる。図示のネットワーク接続は例示的なものであり、コンピュータ間の通信リンクを確立する他の手段を用いることもできることを理解されたい。
【0023】
本発明は、図2〜6を参照することによって最もよく記述され、これらの図は本発明の一実施形態を示している。図2〜4には、オペレーティングシステムに対するアプリケーションの適合性を判定して、適合しないアプリケーションにパッチを当てるためにアプリケーションのアドレス空間にShim DLLを挿入するための論理を示す。図5および6には、Hook DLLと、本発明の一実施形態により適合しないアプリケーションにどのようにパッチを当てるかに関する例を示す。
【0024】
図2は、本発明の概観を示すフローチャートである。ブロック62はアプリケーションの起動を示す。決定ブロック64で、アプリケーションがオペレーティングシステムに適合するかどうかが判定される。本発明の一実施形態では、この判定はオペレーティングシステムが行う。アプリケーションは様々なレベルでオペレーティングシステムに適合する可能性があることを、当業者なら理解するであろう。例えば、適合しないアプリケーションのせいでオペレーティングシステムがコンピュータを停止することもあり、また、適合しないアプリケーションは、起こりそうにない指定のイベントが発生するまでは不適合性を含まないかのように動作することもある。したがって、適合しないアプリケーションとは、あるオペレーティングシステムのもとで正しく機能しないと識別されるアプリケーションであると定義する。当業者には理解されるであろうが、この定義に従えば、多くのアプリケーションが適合しないと識別される可能性がある。本発明の一実施形態では、アプリケーションは、アプリケーションがそのプログラムコードの実行を開始する前に、適合しないアプリケーションであると識別される。アプリケーションが適合するとオペレーティングシステムが判定した場合は、ブロック66で示すように、アプリケーションは通常どおり実行される。そうではなくアプリケーションが適合しないと判定した場合は、オペレーティングシステムは、ブロック68で示すように、アプリケーションにパッチを当てるのに使用されるShim DLLをアプリケーションのアドレス空間にロードする。次いで、アプリケーションは終了まで実行される。
【0025】
図3に、図2の決定ブロック64によって行われる機能をより詳細に示す。より具体的には、図3は、アプリケーションを実行することになるコンピュータのオペレーティングシステムにアプリケーションが適合するかどうかを判定するための、本発明の一実施形態を示すフローチャートである。最初にブロック82で、起動されたアプリケーションの識別属性(名前など)の少なくとも1つが、オペレーティングシステムによってチェックされる。チェックできる他の識別属性には、ヘッダのバージョン数、アプリケーションのバージョン数、社名、アプリケーションのチェックサム、アプリケーションのリリース日、アプリケーションのサイズ、アプリケーションの始めの6バイト、またはアプリケーションを識別する助けとして使用できるその他の属性が含まれるが、これらに限定しない。当業者には理解されるであろうが、アプリケーションを一意的に識別するものならどんな属性を選択してもよい。
【0026】
次にブロック84で、オペレーティングシステムが、起動されたアプリケーションの属性を、適合しないと判定されているアプリケーションの属性と比較する。本発明の一実施形態では、適合しないアプリケーションの属性のいくつかが、データベース、具体的にはWindows(登録商標)レジストリに記憶されている。属性は異なる多くの位置に記憶してもよいことは、当業者には理解されるであろう。例えば属性は、ユーザのパーソナルコンピュータのハードディスクドライブに記憶してもよい。別法として属性は、ウェブサーバやリモートホストなどのリモート位置に記憶してもよい。リモートに記憶する場合、識別属性は、インターネットを介してユーザのコンピュータにダウンロードすることができ、あるいはリモートホストから直接読み取ることさえもできる。さらに、識別属性は、光学ディスクまたは磁気ディスクに記憶してもよく、あるいは前述のようにリモートホストのウェブサーバに記憶してもよい。本発明の一実施形態では、データベースは、オペレーティングシステムに適合しないことが現在わかっているアプリケーションの名前を他の識別情報と共に含む。regedit.exeやregedit32.exeを含め、レジストリデータベースを編集するのに使用できるツールが多くあることは、当業者には理解されるであろう。これらのツールまたは同様のツールを使用して、ユーザは、適合しないアプリケーションの識別属性をレジストリに入力することができる。
【0027】
起動されたアプリケーションの識別属性が、識別済みの不適合アプリケーションの属性と等しい場合、起動されたアプリケーションは現オペレーティングシステムに適合しないと判定される。前述のように本発明の一実施形態では、比較される第1の識別属性は、起動されたアプリケーションの名前である。アプリケーションの名前がデータベースに含まれる名前のどれとも一致しない場合、アプリケーションは現オペレーティングシステムに適合すると判定される。起動されたアプリケーションの名前がデータベースに含まれる名前と一致する場合は、アプリケーションがオペレーティングシステムに適合しないかどうかを判定するために追加の識別属性がチェックされる。アプリケーションは様々な多くの方式で識別することができ、比較される識別属性のセットには前述のように様々な多くの識別パラメータを含めることができることは、当業者には理解されるであろう。場合によっては、適合しないアプリケーションを一意的に識別するのに識別属性は1つで十分なこともある。
【0028】
本発明の実際の一実施形態では、識別属性はデータベース内のバイナリデータで表される。最初の数バイトは、後続の識別属性のサイズを示す。識別属性はASCIIフォーマットまたはその他のコンピュータ可読フォーマットで記憶することができることを理解されたい。
【0029】
属性がチェックされ(ブロック82)比較された(ブロック84)後で、起動されたアプリケーションの属性がデータベースに含まれる属性と一致するかどうかを判定するためのテストが行われる(決定ブロック86)。ブロック88で示すように、比較された属性が一致する場合は、アプリケーションはオペレーティングシステムに適合しないと判定される。ブロック90で示すように、属性が一致しない場合は、アプリケーションはオペレーティングシステムに適合すると判定される。アプリケーションが適合すると判定された場合、アプリケーションは通常どおり実行される。そうではなくアプリケーションが適合しない場合は、図2に示し上に述べたように、オペレーティングシステムは、適合しないアプリケーションにパッチを当てるためにアプリケーションのアドレス空間にShim DLLをロードする。図4に、Shim DLLをロードするプロセスをより詳細に示す。
【0030】
図4は、Shim DLLを使用して適合しないアプリケーションにパッチを当てるための、本発明の一実施形態によって採用される論理を示す流れ図である。ブロック100で、オペレーティングシステムは、アプリケーションのアドレス空間にShim DLLをロードする。これは、アプリケーションがオペレーティングシステムに適合しないと判定された後で行われる(図3参照)。Shim DLLは、アプリケーションとオペレーティングシステムとの間の層を形成し、アプリケーションのDLLインポートテーブルにパッチを当てるのに必要な機能を提供する。本発明の一実施形態では、Shim DLLは、Hook DLLと呼ぶ別個のDLLに含まれるパッチを当てるのに必要なプログラムコードを含む。Shim DLLはアプリケーションのためのパッチをShim DLL自体の中に含むこともできることは、当業者には理解されるであろう。Shim DLLは、適合しないアプリケーションにパッチを当てるための関数(プログラムコード)だけでなく、適合しないアプリケーション中のどの関数にパッチを当てる必要があるかをHook DLLに基づいて決定するプログラムコードも含む。
【0031】
Shim DLLがアプリケーションのアドレス空間にロードされた後、ブロック102で、Shim DLLは、適合しないアプリケーションのための実際のパッチを含むHook DLLをロードする。Shim DLLがロードされると、オペレーティングシステムはShim DLL内にある初期化ルーチンを呼び出すが、これにより、アプリケーションにパッチを当てるのに使用されるスタブ関数を含むHook DLLの名前が提供される。本発明の実際の一実施形態では、Hook DLLは、Hook DLLが最初に作成されたときにオペレーティングシステムに適合しないことがわかっていたアプリケーションのためのすべてのパッチを含む。パッチは1つのDLLに含まれる必要はなく、別々のDLLに含まれるものとすることもできることは、当業者には理解されるであろう。例えば、適合しない各アプリケーションにつき別個のHook DLLを作成してもよい。さらに、製品の製造元に基づいて別々のHook DLLを作成してもよい。
【0032】
Hook DLLをロードした後、Shim DLLは、適合しないアプリケーション中のどの関数にパッチを当てる必要があるかを決定する。本発明の実際の一実施形態では、Shim DLLは、アプリケーションにパッチを当てるのに必要な情報を含む構造体の配列(図5参照)を生み出す。当業者には理解されるであろうが、様々な多くのデータ構造体を使用して、パッチを当てる必要のある関数についての情報を記憶することができる。例えば、連係リストのデータ構造体を使用してもよい。本発明の一実施形態では、Shim DLLはGetHookAPIと呼ばれる関数を含み、この関数は、Hook DLLに含まれる構造体で構造体の配列を埋めるものである。GetHookAPIはまた、Hook DLLからロードされた構造体の数も返す。Hook DLLは、アプリケーション中でパッチを当てる必要のある関数のリストを含む。Hook DLL中のこのリストはまた、適合しない関数が位置するモジュールの名前、適合しない関数の名前、問題を修正するために呼び出すべきスタブ関数、およびパッチを当てる必要のあるアプリケーションDLLのリストも含む。次いで、Shim DLLはこの情報を用いて、適合しないアプリケーションにパッチを当てる。
【0033】
図4のブロック104に示すように、Hook DLL中で指定されたAPIが、パッチを当てたスタブ関数で置換される(図6A〜C参照)。Hook DLL中で指定されたAPIにパッチが当てられた後は、ブロック106で示すように、アプリケーションは通常どおり実行される。
【0034】
アプリケーションはまた、最初に実行時にロードされなかったDLL中にある適合しない関数を呼び出すこともある。本発明の実際の一実施形態では、適合しないアプリケーションが動的にDLLをロードするために出した要求をインターセプトするフックが、オペレーティングシステム中に提供される。より具体的には、ブロック108で示すように、動的にロードされるモジュールがあればそれがロードされるときにパッチを当てるようにオペレーティングシステムを設計することができる。動的にロードされるDLLの内にある不適合性を正すために、Shim DLLは、アプリケーションプログラマが動的にDLLをリンクするのに利用するシステムAPIにパッチを当てる。これらの関数は、Windows(登録商標)内ではCallProcAddressおよびLadLibraryと呼ばれる。例えば、Windows(登録商標)オペレーティングシステムで、アプリケーションがCallProcAdress(”fa”)を呼び出したときであって(”fa”)はパッチを当てる必要のある適合しない関数であるとき、パッチを当てられたGetProcAddressが、その関数ポインタを、アプリケーションに返す前にHook DLLからのパッチ済み関数で置換する。これは、すべてのプロセスが実行前に確実に修正されるようにするのに役立ち、したがってシステム間がよりよく噛み合うようになる。当業者には理解されるであろうが、他のオペレーティングシステムでは、同じ目的のために異なる関数が使用される場合もあるが、これらも同様の方式でパッチを当てることができる。
【0035】
当業者その他には理解されるであろうが、本発明のいくつかの実施形態では、動的にロードされるDLLにパッチを当てることが必要でない場合もある。より具体的には、適合しないアプリケーションの実行中にDLLが動的にロードされない場合、オペレーティングシステム中にフックを提供する必要はない。この結果、ブロック108に示し上に述べた機能もまた、除くことができる。同様に本発明の他の実施形態では、適合しない関数はすべて、実行時の前にではなく、実行時に呼び出されたときにパッチを当てることもできる。この場合、ブロック100、102、および104に示す機能のいくつかまたは全部を除くことができる。
【0036】
図5は、擬似コードによるHook DLLの図である。インジケータ120は、適合しないアプリケーションに含まれる関数の不適合性を正すスタブ関数群を示す。本発明の実際の一実施形態では、Hook DLLは、適合しないと判定されているすべてのアプリケーション関数のためのスタブ関数を含む。スタブ関数は、適合しない関数にパッチを当てるのに必要なコードを含む。通常、スタブ関数は、適合しない関数への関数呼出しの周りを取り巻く前処理(preprocessing)コードおよび後処理(post processing)コードを含む。ただし、スタブ関数は適合しない関数を呼び出さないことさえもある。例えば、適合しないアプリケーションが、オペレーティングシステムのもとで正しく機能するために単にアプリケーションの前バージョンを返すように要求するだけである場合、スタブ関数はこの値をアプリケーションに返すだけとなる可能性が高い。本発明の実際の一実施形態では、スタブ関数とStructure Hook APIの間には、インジケータ122で示すように一対一の関係がある。
【0037】
インジケータ122は、本発明の実際の一実施形態によって採用されるHook構造体を示している。図5を参照するとわかるように、Hook構造体は、モジュール名(module name)と、関数名(function name)と、スタブ関数(stub function)と、パッチを当てるべきDLLのリスト、または関連するアプリケーションに伴うすべてのDLLにパッチを当てることを示すNULLなどのインジケータとを含む。Hook DLLは、アプリケーション中の適合しない関数それぞれにつき1つのStructure Hook APIを含む。ただし、当業者には理解されるであろうが、単一の構造体を使用して、別々の構造体に含まれる情報を含めることもできる。さらに、異なる3つ以上の構造体が単一のスタブ関数を呼び出すこともできる。モジュール名は、適合しないプログラムのモジュールを示す。関数名は、アプリケーション中の適合しないと判定された関数を示す。Stub function(f)は、適合しない関数の代わりに呼び出されることになる、Hook DLLに含まれる関連する関数を示す。DLLのリストは、アプリケーションを適合させるためにパッチを当てる必要のある、適合しないアプリケーションのDLLをすべて含む。NULLは、すべてのアプリケーションDLLにパッチを当てる必要があることを示すために提供される。
【0038】
図6A〜Cは、本発明の実際の一実施形態で、DLLに含まれる適合しない関数をどのようにHook DLL内にある適合スタブ関数で置換するかを示す一連の図である。図6Aおよび6Bには、アプリケーションに関連する2つのDLLと、適合しないアプリケーションにパッチを当てるために使用される1つのHook DLLとを示す。ロードされた各DLLには、インポートテーブルが関連付けられている。図6A〜Cに示すインポートテーブル140、142、および144は、DLLに含まれる関数および関数ポインタのリストを含む。インポートテーブルはまた、DLL1のインポートテーブル140で示すように、別個のDLLにある他の関数への参照またはポインタを含む場合もある。一般にShim DLLは、適合しない関数を含むDLLに関連するインポートテーブル内の、適合しない位置にパッチを当てる。アプリケーションの関連DLLがロードされているとき、Shim DLLは、インポートテーブルに含まれるすべての情報を列挙する。次いでShim DLLは、適合しないエントリがあるかどうかインポートテーブルを検索する。
【0039】
図6Aに示すDLL1のインポートテーブル140は、DLL2に含まれる関数への参照を含む。このエントリは、インポートテーブルのこの位置にロードされる関数がDLL2のインポートテーブル142中にあり、fAと呼ばれることを示している。アプリケーションが適合するときは、インポートテーブル140中のfA参照は、DLL2内にある関数の実際の位置で置換される。この例では、アプリケーションが適合する場合、DLL1中のfAはDLL2に含まれるfA(0x0005)で置換されることになる。オペレーティングシステムは、DLL1中のfAおよびDLL2の参照を、DLL2中にみられるfAの実際の値で置換する。しかし、適合しないアプリケーションにおいては、適合しないと判定された関数があれば、その関数はHook DLLに含まれる値で置換されることになる。Hook DLLのインポートテーブル144は、関数が適合しないせいで、fAが、DLL2に含まれる値ではなく、DLL2に含まれる0x0005と比較して実際には値0x0001を有することを示している。したがって、識別されたいずれかのDLL中にfAへの参照があれば、インポートテーブル中のfAの値はHook DLLに含まれる値で置換される必要がある。
【0040】
図6Bには、DLL2のインポートテーブル142に含まれるfAを、Hook DLLに含まれる訂正済みアドレスで置換することが示されている。図6Bを参照するとわかるように、関数fAの適合バージョンは0x0001である。この値がDLL2のインポートテーブル142に挿入され、それによって前の値0×0005が置換される。DLL2内にfAへの参照が他にもあれば、それらもまたこの関数のパッチ済みバージョンで置換される。
【0041】
図6Cには、DLL1のインポートテーブル140に含まれるfAへの参照を、DLL2のインポートテーブル142に含まれる訂正済みのfAの値で置換することが示されている。DLL1のインポートテーブル140を参照すると、参照が0x0001で置換されたことがわかる。この例のこの時点で、適合しない関数へのすべての参照が、Hook DLLに含まれる訂正済みの関数位置で置換されている。
【0042】
適合しないと識別された各関数につき、Shim DLLは、識別されたDLLを検索するか、Structure Hook API中でNULLが識別される場合はアプリケーションのDLLをすべて検索し、適合しない関数へのすべての参照をHook DLLに含まれる値で置換する。これらの参照にパッチが当てられた後で、アプリケーションが実行される。ただしアプリケーションは、適合しない関数を呼び出す代わりに、適合するスタブ関数を呼び出す。
【0043】
本発明の好ましい実施形態について図示および記述したが、本発明の趣旨および範囲を逸脱することなく様々な変更を加えることができることを理解されたい。
【図面の簡単な説明】
【図1】 本発明のための例示的な動作環境を提供するのに適したコンピュータのブロック図である。
【図2】 本発明を示す概略流れ図である。
【図3】 アプリケーションがオペレーティングシステムに適合するまたは適合しないことをどのように判定するかを示す流れ図である。
【図4】 DLLを使用して適合しないアプリケーションにどのようにパッチを当てるかについての論理を示す流れ図である。
【図5】 擬似コードによるHook DLLの図である。
【図6A】 インポートテーブルと、総称関数名を実際の関数へのポインタで置換することを示す図である。
【図6B】 インポートテーブルと、適合しない関数ポインタをHook DLL内に含まれる関数ポインタの値で置換することを示す図である。
【図6C】 インポートテーブルと、適合しない関数名をHook DLLから供給される訂正済み関数ポインタで置換することを示す図である。
Claims (18)
- プロセッサとメモリを有するコンピュータ上に導入されたオペレーティングシステムに適合しないアプリケーションにパッチを当てるための前記コンピュータにより実行される方法であって、
前記方法は、
(a)前記アプリケーションを起動するステップであって、前記アプリケーションは、関連するアドレス空間を前記メモリ内に有し、かつ、前記アプリケーションを実行するために前記関連するアドレス空間にロードされたダイナミックリンクライブラリを有し、前記ダイナミックリンクライブラリは、関数を有するとともに前記関数への関数ポインタを含む関連インポートテーブルを有する、ステップと、
(b)前記オペレーティングシステムと適合しないアプリケーションを識別する情報の中に前記アプリケーションに関する情報が含まれているかどうかの決定に基づいて、前記アプリケーションが前記オペレーティングシステムに適合するか否かを判定するステップと、
(c)前記アプリケーションが前記オペレーティングシステムに適合しない場合に、前記アプリケーションの前記関連するアドレス空間に、シムダイナミックリンクライブラリおよびフックダイナミックリンクライブラリを挿入するステップであって、前記フックダイナミックリンクライブラリは、前記シムダイナミックリンクライブラリからロードされるように構成されており、アプリケーション中でパッチを当てる必要のある関数のリストと、この関数のリストに含まれる関数にパッチを当てるための情報とを含み、前記シムダイナミックリンクライブラリは、前記関数のリストに含まれる関数にパッチを当てるのに必要なプログラムコードを含んでおり、前記シムダイナミックリンクライブラリを使用して、
(i)前記フックダイナミックリンクライブラリの関数のリストに基づいて、前記適合しないアプリケーション中のどの関数にパッチを当てる必要があるかを決定し、
(ii)前記フックダイナミックライブラリに含まれる前記情報に基づいて、前記プログラムコードで前記決定された関数にパッチを当てるステップと、
(d)前記パッチ後のアプリケーションを実行するステップと
を備えることを特徴とする方法。 - 請求項1に記載の方法であって、前記アプリケーションが前記オペレーティングシステムに適合するか否かを判定するステップが、
(a)前記起動したアプリケーションの複数の識別属性のうち少なくとも1つの識別属性が、不適合アプリケーションの複数の識別属性のうち少なくとも1つの識別属性と一致するかどうかを判定するステップと、
(b)少なくとも1つの前記識別属性が一致する場合には、前記起動したアプリケーションは適合しないと判定し、そうでない場合には、前記起動したアプリケーションは適合すると判定するステップと
を備えることを特徴とする方法。 - 請求項2に記載の方法であって、前記アプリケーションが前記オペレーティングシステムに適合するか否かを判定するステップが、
不適合アプリケーションの識別属性を記憶するステップと、
前記起動したアプリケーションの複数の識別属性のうち少なくとも1つの識別属性が、不適合アプリケーションの前記記憶された識別属性のうち少なくとも1つの識別属性と一致するかどうかを判定するために、前記記憶された識別属性の少なくとも1つを取り出すステップと
をさらに備えることを特徴とする方法。 - 請求項3に記載の方法であって、前記アプリケーションが前記オペレーティングシステムに適合するか否かを判定するステップが、
前記起動したアプリケーションの追加の識別属性を、不適合アプリケーションの前記記憶された識別属性と比較するステップと、
前記識別属性が一致する場合には、前記アプリケーションは適合しないと判定するステップと
をさらに備えることを特徴とする方法。 - 請求項4に記載の方法であって、前記プログラムコードは、前記リスト中の前記関数をパッチするためのスタブ関数群を含むことを特徴とする方法。
- 請求項5に記載の方法であって、前記関数にパッチを当てるステップでは、前記コンピュータは、前記決定された関数を前記スタブ関数に置き換えるように構成されていることを特徴とする方法。
- オペレーティングシステムに適合しないアプリケーションにパッチを当てるためのプロセッサとメモリを含むコンピュータシステムにより実行されて方法を行うコンピュータ実行可能命令を格納したコンピュータ可読記録媒体であって、前記命令は、以下のステップをプロセッサに実行させるものであり、
(a)前記アプリケーションを起動するステップであって、前記アプリケーションは、関連するアドレス空間を前記メモリ内に有し、かつ、前記アプリケーションを実行するために前記関連するアドレス空間にロードされたダイナミックリンクライブラリを有し、前記ダイナミックリンクライブラリは、関数を有するとともに前記関数への関数ポインタを含む関連インポートテーブルを有する、ステップと、
(b)前記オペレーティングシステムと適合しないアプリケーションを識別する情報の中に前記アプリケーションに関する情報が含まれているかどうかの決定に基づいて、前記アプリケーションが前記オペレーティングシステムに適合するか否かを判定するステップと、
(c)前記アプリケーションが前記オペレーティングシステムに適合しない場合に、前記アプリケーションのアドレス空間にシムダイナミックリンクライブラリおよびフックダイナミックリンクライブラリを挿入するステップであって、前記フックダイナミックリンクライブラリは、前記シムダイナミックライブラリからロードされるように構成されており、前記適合しないアプリケーション中でパッチを当てる必要のある関数のリストと、この関数のリストに含まれる関数にパッチを当てるための情報とを含み、前記シムダイナミックリンクライブラリは、前記関数のリストに含まれる関数でパッチを当てるのに必要なプログラムコードを含んでおり、前記シムダイナミックリンクライブラリを使用して、
(i)前記フックダイナミックリンクライブラリの関数のリストに基づいて、前記適合しないアプリケーション中のどの関数にパッチを当てる必要があるかを決定し、
(ii)前記フックダイナミックライブラリに含まれる前記情報に基づいて、前記プログラムコードで前記決定された関数にパッチを当てるステップと、
(d)前記パッチ後のアプリケーションを実行するステップと
を含むことを特徴とするコンピュータ可読記録媒体。 - 請求項7に記載のコンピュータ可読記録媒体であって、前記アプリケーションが前記オペレーティングシステムに適合するか否かを判定するステップが、
(a)前記起動したアプリケーションの複数の識別属性のうち少なくとも1つの識別属性が、不適合アプリケーションの複数の識別属性のうち少なくとも1つの識別属性と一致するかどうかを判定するステップと、
(b)少なくとも1つの前記識別属性が一致する場合には、前記起動したアプリケーションは適合しないと判定し、そうでない場合には、前記起動したアプリケーションは適合すると判定するステップと
を備えることを特徴とするコンピュータ可読記録媒体。 - 請求項8に記載のコンピュータ可読記録媒体であって、前記アプリケーションが前記オペレーティングシステムに適合するか否かを判定するステップが、
不適合アプリケーションの識別属性を記憶するステップと、
前記起動したアプリケーションの複数の識別属性のうち少なくとも1つの識別属性が、不適合アプリケーションの前記記憶された識別属性のうち少なくとも1つの識別属性と一致するかどうかを判定するために、前記記憶された識別属性の少なくとも1つを取り出すステップと
をさらに備えることを特徴とするコンピュータ可読記録媒体。 - 請求項9に記載のコンピュータ可読記録媒体であって、前記アプリケーションが前記オペレーティングシステムに適合するか否かを判定するステップが、
(a)前記起動したアプリケーションの追加の識別属性を、不適合アプリケーションの前記記憶された識別属性と比較するステップと、
(b)前記識別属性が一致する場合には、前記アプリケーションは適合しないと判定するステップと
をさらに備えることを特徴とするコンピュータ可読記録媒体。 - 請求項10に記載のコンピュータ可読記録媒体であって、前記プログラムコードは、前記リスト中の前記関数をパッチするためのスタブ関数群を含むことを特徴とするコンピュータ可読記録媒体。
- 請求項11に記載のコンピュータ可読記録媒体であって、前記関数にパッチを当てるステップでは、前記コンピュータは、前記決定された関数を前記スタブ関数に置き換えるように構成されていることを特徴とするコンピュータ可読記録媒体。
- メモリとプロセッサとを有するコンピュータシステムに導入されたオペレーティングシステムに適合しないアプリケーションにパッチを当てるためのコンピュータシステムであって、
(a)前記アプリケーションを起動する処理であって、前記アプリケーションは、関連するアドレス空間を前記メモリ内に有し、かつ、前記アプリケーションを実行するために前記関連するアドレス空間にロードされたダイナミックリンクライブラリを有し、前記ダイナミックリンクライブラリは、関数を有するとともに前記関数への関数ポインタを含む関連インポートテーブルを有する、処理と、
(b)前記オペレーティングシステムと適合しないアプリケーションを識別する情報の中に前記アプリケーションに関する情報が含まれているかどうかの決定に基づいて、前記アプリケーションが前記オペレーティングシステムに適合するか否かを判定する処理と、
(c)前記アプリケーションが前記オペレーティングシステムに適合しない場合に、前記アプリケーションのアドレス空間にシムダイナミックリンクライブラリおよびフックダイナミックリンクライブラリを挿入する処理であって、前記フックダイナミックリンクライブラリは、前記シムダイナミックライブラリからロードされるように構成されており、前記適合しないアプリケーション中でパッチを当てる必要のある関数のリストと、この関数のリストに含まれる関数にパッチを当てるための情報とを含み、前記シムダイナミックリンクライブラリは、前記関数のリストに含まれる関数でパッチを当てるのに必要なプログラムコードを含んでおり、前記シムダイナミックリンクライブラリを使用して、
(i)前記フックダイナミックリンクライブラリの関数のリストに基づいて、前記適合しないアプリケーション中のどの関数にパッチを当てる必要があるかを決定し、
(ii)前記フックダイナミックライブラリに含まれる前記情報に基づいて、前記プログラムコードで前記決定された関数にパッチを当てる処理と、
(d)前記パッチ後のアプリケーションを実行する処理と
を実行するように構成されていることを特徴とするコンピュータシステム。 - 請求項13に記載のコンピュータシステムであって、前記アプリケーションが前記オペレーティングシステムに適合するか否かを判定する処理では、
(a)前記起動したアプリケーションの複数の識別属性のうち少なくとも1つの識別属性が、不適合アプリケーションの複数の識別属性のうち少なくとも1つの識別属性と一致するかどうかを判定する処理と、
(b)少なくとも1つの前記識別属性が一致する場合には、前記起動したアプリケーションは適合しないと判定し、そうでない場合には、前記起動したアプリケーションは適合すると判定する処理と
を実行するように構成されていることを特徴とするコンピュータシステム。 - 請求項14に記載のコンピュータシステムであって、前記アプリケーションが前記オペレーティングシステムに適合するか否かを判定する処理では、
不適合アプリケーションの識別属性を記憶する処理と、
前記起動したアプリケーションの複数の識別属性のうち少なくとも1つの識別属性が、不適合アプリケーションの前記記憶された識別属性のうち少なくとも1つの識別属性と一致するかどうかを判定するために、前記記憶された識別属性の少なくとも1つを取り出す処理と
をさらに実行するように構成されていることを特徴とするコンピュータシステム。 - 請求項15に記載のコンピュータシステムであって、前記アプリケーションが前記オペレーティングシステムに適合するか否かを判定する処理では、
前記起動したアプリケーションの追加の識別属性を、不適合アプリケーションの前記記憶された識別属性と比較する処理と、
前記識別属性が一致する場合には、前記アプリケーションは適合しないと判定する処理と
をさらに実行するように構成されていることを特徴とするコンピュータシステム。 - 請求項16に記載のコンピュータシステムであって、前記プログラムコードは、前記リスト中の前記関数をパッチするためのスタブ関数群を含むことを特徴とするコンピュータシステム。
- 請求項17に記載のコンピュータシステムであって、前記関数にパッチを当てる処理では、前記コンピュータシステムは、前記決定された関数を前記スタブ関数に置き換えるように構成されていることを特徴とするコンピュータシステム。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15185399P | 1999-09-01 | 1999-09-01 | |
US60/151,853 | 1999-09-01 | ||
US09/513,016 US6745385B1 (en) | 1999-09-01 | 2000-02-25 | Fixing incompatible applications by providing stubs for APIs |
US09/513,016 | 2000-02-25 | ||
PCT/US2000/022580 WO2001016730A2 (en) | 1999-09-01 | 2000-08-17 | FIXING INCOMPATIBLE APPLICATIONS BY PROVIDING STUBS FOR APIs |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2003508846A JP2003508846A (ja) | 2003-03-04 |
JP2003508846A5 JP2003508846A5 (ja) | 2007-10-11 |
JP4878715B2 true JP4878715B2 (ja) | 2012-02-15 |
Family
ID=26849029
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001520617A Expired - Fee Related JP4878715B2 (ja) | 1999-09-01 | 2000-08-17 | オペレーティングシステムに適合しないアプリケーションにパッチを当てる方法、コンピュータシステム及びコンピュータ可読記録媒体 |
Country Status (7)
Country | Link |
---|---|
US (1) | US6745385B1 (ja) |
EP (1) | EP1224543B1 (ja) |
JP (1) | JP4878715B2 (ja) |
AT (1) | ATE423347T1 (ja) |
AU (1) | AU6781600A (ja) |
DE (1) | DE60041589D1 (ja) |
WO (1) | WO2001016730A2 (ja) |
Families Citing this family (64)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7032213B1 (en) * | 1999-09-01 | 2006-04-18 | Microsoft Corporation | Fixing incompatible applications using a light debugger |
GB9921720D0 (en) * | 1999-09-14 | 1999-11-17 | Tao Group Ltd | Loading object-oriented computer programs |
US20030167463A1 (en) * | 2002-03-01 | 2003-09-04 | Microsft Corporation | Custom application-compatibility systems and layers |
JP2004005419A (ja) * | 2002-03-25 | 2004-01-08 | Canon Inc | インストール処理装置、処理方法及び記憶媒体ならびにプログラム |
US7363237B1 (en) * | 2002-12-31 | 2008-04-22 | Adams Phillip M | Enforcement process for correction of hardware and software defects |
US7210121B2 (en) | 2003-02-07 | 2007-04-24 | Sun Microsystems, Inc. | Method and system for generating first class citizen application implementing native software application wrapper |
GB0307805D0 (en) * | 2003-04-04 | 2003-05-07 | Intuwave Ltd | A method of enabling source code to be used to generate a first and a second software application,each compatible with a different operating system |
US7392527B2 (en) * | 2003-12-10 | 2008-06-24 | Microsoft Corporation | Driver-specific context for kernel-mode shimming |
US8539469B2 (en) * | 2004-05-11 | 2013-09-17 | Microsoft Corporation | Efficient patching |
US7770158B2 (en) * | 2004-10-14 | 2010-08-03 | Bea Systems, Inc. | Source code translator |
US7653684B2 (en) * | 2004-12-03 | 2010-01-26 | Microsoft Corporation | Enabling inter-subsystem resource sharing |
US20060143222A1 (en) * | 2004-12-23 | 2006-06-29 | Maxime Daniel | Method, program and system for automatic reengineering of a client code |
US8151258B2 (en) * | 2005-03-09 | 2012-04-03 | Ipass Inc. | Managing software patches |
US7409532B2 (en) | 2005-03-24 | 2008-08-05 | International Business Machines Corporation | Method and apparatus for extending operations of an application in a data processing system |
US20070006202A1 (en) * | 2005-07-01 | 2007-01-04 | Mikkelsen Tim I | Dynamic mapping of shared libraries |
US8296758B2 (en) * | 2006-09-20 | 2012-10-23 | Sap Ag | Deployment and versioning of applications |
WO2009152250A2 (en) * | 2008-06-10 | 2009-12-17 | True Commerce, Inc. | User-deployable data transformation and exchange platform including on demand item synchronization and user deployable order management system |
US9053260B2 (en) * | 2009-04-13 | 2015-06-09 | Honeywell International Inc. | Utilizing spreadsheet user interfaces with flowsheets of a CPI simulation system |
US10095678B2 (en) | 2009-04-13 | 2018-10-09 | Honeywell International Inc. | Database user interfaces with flowsheets of a simulation system |
EP3940533A1 (en) * | 2009-09-08 | 2022-01-19 | Abbott Diabetes Care, Inc. | Methods and articles of manufacture for hosting a safety critical application on an uncontrolled data processing device |
US20110063306A1 (en) * | 2009-09-16 | 2011-03-17 | Nvidia Corporation | CO-PROCESSING TECHNIQUES ON HETEROGENEOUS GPUs INCLUDING IDENTIFYING ONE GPU AS A NON-GRAPHICS DEVICE |
US9830889B2 (en) | 2009-12-31 | 2017-11-28 | Nvidia Corporation | Methods and system for artifically and dynamically limiting the display resolution of an application |
US9171350B2 (en) | 2010-10-28 | 2015-10-27 | Nvidia Corporation | Adaptive resolution DGPU rendering to provide constant framerate with free IGPU scale up |
US8789138B2 (en) | 2010-12-27 | 2014-07-22 | Microsoft Corporation | Application execution in a restricted application execution environment |
US9519600B2 (en) * | 2011-03-04 | 2016-12-13 | Microsoft Technology Licensing, Llc | Driver shimming |
US20120233605A1 (en) * | 2011-03-07 | 2012-09-13 | Microsoft Corporation | Application Compatibility Leveraging Successful Resolution of Issues |
JP5803157B2 (ja) * | 2011-03-07 | 2015-11-04 | 日本電気株式会社 | 情報処理装置、プログラム不正検知方法、およびプログラム不正検知プログラム |
JP5716469B2 (ja) | 2011-03-17 | 2015-05-13 | 富士通セミコンダクター株式会社 | ラッパープログラム及び集積回路装置 |
US9003363B2 (en) | 2011-03-21 | 2015-04-07 | Microsoft Technology Licensing, Llc | Device flags |
US8776094B2 (en) | 2011-08-11 | 2014-07-08 | Microsoft Corporation | Runtime system |
US8695021B2 (en) * | 2011-08-31 | 2014-04-08 | Microsoft Corporation | Projecting native application programming interfaces of an operating system into other programming languages |
US9436487B2 (en) * | 2012-03-29 | 2016-09-06 | Adobe Systems Incorporated | Method and apparatus for creating a platform agnostic application file |
US20140007117A1 (en) * | 2012-06-13 | 2014-01-02 | Bluebox | Methods and apparatus for modifying software applications |
US9176838B2 (en) * | 2012-10-19 | 2015-11-03 | Intel Corporation | Encrypted data inspection in a network environment |
US9578133B2 (en) * | 2012-12-03 | 2017-02-21 | Apkudo, Llc | System and method for analyzing user experience of a software application across disparate devices |
US10261611B2 (en) | 2012-12-03 | 2019-04-16 | Apkudo, Llc | System and method for objectively measuring user experience of touch screen based devices |
US9984083B1 (en) | 2013-02-25 | 2018-05-29 | EMC IP Holding Company LLC | Pluggable storage system for parallel query engines across non-native file systems |
US9454573B1 (en) * | 2013-02-25 | 2016-09-27 | Emc Corporation | Parallel processing database system with a shared metadata store |
US9075781B2 (en) | 2013-03-15 | 2015-07-07 | Apkudo, Llc | System and method for coordinating field user testing results for a mobile application across various mobile devices |
US9830176B2 (en) | 2013-04-19 | 2017-11-28 | The Trustees Of Columbia University In The City Of New York | Methods, systems, and media for binary compatible graphics support in mobile operating systems |
US20160077850A1 (en) * | 2013-04-19 | 2016-03-17 | The Trustees Of Columbia University In The City Of New York | Methods, systems, and media for binary compatibility |
US10860303B2 (en) * | 2013-04-24 | 2020-12-08 | Nintendo Co., Ltd. | Selective operating system patching/updating |
US9594545B2 (en) | 2013-06-05 | 2017-03-14 | Splunk Inc. | System for displaying notification dependencies between component instances |
US8756614B2 (en) | 2013-06-05 | 2014-06-17 | Splunk Inc. | Central registry for binding features using dynamic pointers |
US10061626B2 (en) | 2013-06-05 | 2018-08-28 | Splunk Inc. | Application framework providing a registry for mapping names to component instances |
US9058193B2 (en) * | 2013-11-14 | 2015-06-16 | Google Inc. | Methods and systems for providing compatibility of applications with multiple versions of an operating system |
CN103885808A (zh) * | 2014-04-08 | 2014-06-25 | 北京奇虎科技有限公司 | 热补丁处理方法及装置 |
US9348625B2 (en) | 2014-05-23 | 2016-05-24 | Google Inc. | Application access to native and bundled libraries |
US10338914B2 (en) | 2014-09-01 | 2019-07-02 | Hewlett Packard Enterprise Development Lp | Dynamically applying a patch to a shared library |
US10445505B2 (en) * | 2014-09-22 | 2019-10-15 | Mcafee, Llc | Process vulnerability assessment |
CN105528224B (zh) * | 2014-09-30 | 2018-12-25 | 中国电信股份有限公司 | 基于应用识别的多系统调度方法和终端 |
US10635504B2 (en) | 2014-10-16 | 2020-04-28 | Microsoft Technology Licensing, Llc | API versioning independent of product releases |
US9283672B1 (en) | 2014-12-11 | 2016-03-15 | Apkudo, Llc | Robotic testing device and method for more closely emulating human movements during robotic testing of mobile devices |
CN104866307B (zh) * | 2015-05-14 | 2018-04-27 | 百度在线网络技术(北京)有限公司 | 一种应用程序的修复方法和装置 |
WO2018143977A1 (en) * | 2017-02-01 | 2018-08-09 | Hewlett-Packard Development Company, L.P. | Performance threshold |
EP3406674A1 (de) | 2017-05-26 | 2018-11-28 | Ewald Dörken Ag | Thermochromes beschichtungssystem |
US10956563B2 (en) * | 2017-11-22 | 2021-03-23 | Aqua Security Software, Ltd. | System for securing software containers with embedded agent |
CN108920216B (zh) * | 2018-08-03 | 2021-11-09 | 武汉斗鱼网络科技有限公司 | 关闭软件兼容模式的方法、装置、终端及存储介质 |
US10915426B2 (en) | 2019-06-06 | 2021-02-09 | International Business Machines Corporation | Intercepting and recording calls to a module in real-time |
US11074069B2 (en) | 2019-06-06 | 2021-07-27 | International Business Machines Corporation | Replaying interactions with transactional and database environments with re-arrangement |
US11036619B2 (en) | 2019-06-06 | 2021-06-15 | International Business Machines Corporation | Bypassing execution of a module in real-time |
US10929126B2 (en) | 2019-06-06 | 2021-02-23 | International Business Machines Corporation | Intercepting and replaying interactions with transactional and database environments |
US11016762B2 (en) | 2019-06-06 | 2021-05-25 | International Business Machines Corporation | Determining caller of a module in real-time |
US20210389937A1 (en) * | 2020-06-12 | 2021-12-16 | Western Digital Technologies, Inc. | Systems And Methods For Fixing Incompatibilities In Field Firmware Updates |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5579509A (en) | 1991-02-08 | 1996-11-26 | International Business Machines Corporation | Apparatus and method for verifying compatibility of system components |
US5193180A (en) * | 1991-06-21 | 1993-03-09 | Pure Software Inc. | System for modifying relocatable object code files to monitor accesses to dynamically allocated memory |
DE69324840T2 (de) | 1992-03-06 | 1999-09-09 | Microsoft Corp | Verfahren zum Speichern von Programmen |
US5815722A (en) * | 1992-11-18 | 1998-09-29 | Canon Information Systems, Inc. | In an interactive network board, a method and apparatus for remotely downloading and executing files in a memory |
US5546586A (en) | 1993-05-06 | 1996-08-13 | Apple Computer, Inc. | Method and apparatus for vectorizing the contents of a read only memory device without modifying underlying source code |
US5675803A (en) * | 1994-01-28 | 1997-10-07 | Sun Microsystems, Inc. | Method and apparatus for a fast debugger fix and continue operation |
CA2143488C (en) | 1995-02-27 | 2000-01-11 | Robert Paul Duncan | Dynamic link libraries without linker or loader support |
US5790856A (en) * | 1995-05-08 | 1998-08-04 | Apple Computer, Inc. | Methods, apparatus, and data structures for data driven computer patches and static analysis of same |
US5951639A (en) * | 1996-02-14 | 1999-09-14 | Powertv, Inc. | Multicast downloading of software and data modules and their compatibility requirements |
US6611878B2 (en) * | 1996-11-08 | 2003-08-26 | International Business Machines Corporation | Method and apparatus for software technology injection for operating systems which assign separate process address spaces |
US6141698A (en) * | 1997-01-29 | 2000-10-31 | Network Commerce Inc. | Method and system for injecting new code into existing application code |
US6026238A (en) * | 1997-08-18 | 2000-02-15 | Microsoft Corporatrion | Interface conversion modules based upon generalized templates for multiple platform computer systems |
EP1071991A4 (en) * | 1997-12-11 | 2002-03-13 | Digits Corp | OBJECT CODE ANALYSIS AND IMPROVEMENT SYSTEM AND METHOD |
US6009261A (en) * | 1997-12-16 | 1999-12-28 | International Business Machines Corporation | Preprocessing of stored target routines for emulating incompatible instructions on a target processor |
US6490721B1 (en) * | 1998-07-14 | 2002-12-03 | Oc Systems Incorporated | Software debugging method and apparatus |
US6484309B2 (en) * | 1998-10-08 | 2002-11-19 | Intel Corporation | Enabling software designed for one operating system to operate on another operating system |
US20020073398A1 (en) * | 1998-12-14 | 2002-06-13 | Jeffrey L. Tinker | Method and system for modifying executable code to add additional functionality |
US6463583B1 (en) * | 1999-04-08 | 2002-10-08 | Novadigm, Inc. | Dynamic injection of execution logic into main dynamic link library function of the original kernel of a windowed operating system |
-
2000
- 2000-02-25 US US09/513,016 patent/US6745385B1/en not_active Expired - Fee Related
- 2000-08-17 AU AU67816/00A patent/AU6781600A/en not_active Abandoned
- 2000-08-17 WO PCT/US2000/022580 patent/WO2001016730A2/en active Application Filing
- 2000-08-17 JP JP2001520617A patent/JP4878715B2/ja not_active Expired - Fee Related
- 2000-08-17 AT AT00955648T patent/ATE423347T1/de not_active IP Right Cessation
- 2000-08-17 DE DE60041589T patent/DE60041589D1/de not_active Expired - Lifetime
- 2000-08-17 EP EP00955648A patent/EP1224543B1/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
EP1224543B1 (en) | 2009-02-18 |
WO2001016730A2 (en) | 2001-03-08 |
DE60041589D1 (de) | 2009-04-02 |
AU6781600A (en) | 2001-03-26 |
EP1224543A2 (en) | 2002-07-24 |
JP2003508846A (ja) | 2003-03-04 |
WO2001016730A3 (en) | 2002-05-10 |
ATE423347T1 (de) | 2009-03-15 |
US6745385B1 (en) | 2004-06-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4878715B2 (ja) | オペレーティングシステムに適合しないアプリケーションにパッチを当てる方法、コンピュータシステム及びコンピュータ可読記録媒体 | |
US11853774B2 (en) | Dynamically loaded plugin architecture | |
US7784044B2 (en) | Patching of in-use functions on a running computer system | |
US6920631B2 (en) | Software installation and validation using custom actions | |
US6542167B1 (en) | System and method for flexible software linking | |
US7055146B1 (en) | Method and system for dynamically inserting modifications for identified programs | |
US6415435B1 (en) | Method and apparatus for determining compatibility of parent classes in an object oriented environment using versioning | |
US6735766B1 (en) | Method and computer-readable medium for installing an upgrade to an application program | |
US6681391B1 (en) | Method and system for installing software on a computer system | |
US7954096B2 (en) | Shared loader system and method | |
US7032213B1 (en) | Fixing incompatible applications using a light debugger | |
US8181166B2 (en) | System and method for determining when an EJB compiler needs to be executed | |
EP1280058A2 (en) | Method and system for creating and employing an operating system having selected functionality | |
US20080022269A1 (en) | Method and Apparatus for Building Executable Computer Programs Using Compiled Program Libraries | |
JPH0836488A (ja) | ダイナミック・パッチングを使用するランタイム・エラー・チェック方法と装置 | |
BRPI0618027A2 (pt) | configuração de extensões isoladas e acionadores de dispositivo | |
US20070006202A1 (en) | Dynamic mapping of shared libraries | |
US20110016463A1 (en) | Computer-hardware, life-extension apparatus and method | |
US20060282840A1 (en) | Dynamic mapping of shared libraries | |
Meisami et al. | A comprehensive survey of upgradeable smart contract patterns | |
CN112668008A (zh) | 一种基于lsm来实现动态的系统调用劫持的方法 | |
US7454762B2 (en) | Method and computer program product for handling application references to undefined operating system services | |
CN117632222A (zh) | 一种数据处理的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070814 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20070814 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20070814 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080520 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20080819 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20080826 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20081120 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20081226 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090326 |
|
RD13 | Notification of appointment of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7433 Effective date: 20090327 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20090327 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20090501 |
|
A912 | Re-examination (zenchi) completed and case transferred to appeal board |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20090529 |
|
RD13 | Notification of appointment of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7433 Effective date: 20100524 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20100524 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110705 |
|
RD16 | Notification of change of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7431 Effective date: 20110721 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20110721 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20111031 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20111129 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20141209 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees | ||
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |