(57)【要約】  オペレーティングシステム（ＯＳ）カーネルの中のデバイスドライバの動的置き換えの方法及び装置が記載される。一実施形態において、方法は、デバイスドライバをオペレーティングシステムに追加する要求を受信するステップと、ユーザアプリケーション及びオペレーティングシステムプロセスが実行されている間にデバイスドライバをオペレーティングシステムに動的に追加するステップとを含んでいる。【選択図】  図２Ｂ
2008511055.tif 000002
【特許請求の範囲】
【請求項１】
デバイスドライバをオペレーティングシステムに追加する要求を受信するステップと、
ユーザアプリケーション及びオペレーティングシステムプロセスが実行されている間に前記デバイスドライバを前記オペレーティングシステムに動的に追加するステップと、
を含む方法。
【請求項２】
デバイスドライバへのユーザアプリケーションコールをインターセプトするステップと、
前記デバイスドライバを前記ユーザアプリケーションコールにとって適切なものであると認定するために、ステートストレージをチェックするステップと、
を含む方法。
【請求項３】
デバイスドライバへのユーザアプリケーションコールをインターセプトするステップと、
前記デバイスドライバを前記ユーザアプリケーションコールにとって適切なものであると認定するために、ステートストレージをチェックするステップと、
前記デバイスドライバが置き換えられている最中であるかどうかを決定するステップと、
前記デバイスドライバが置き換え中であるならば、前記デバイスドライバの置き換えが完了するまで前記ユーザアプリケーションコールを保持するステップと、
前記デバイスドライバを呼び出すステップと、
を含む方法。
【請求項４】
システムによって実行されるとき、前記システムに、
デバイスドライバへのユーザアプリケーションコールをインターセプトするステップと、
前記デバイスドライバを前記ユーザアプリケーションコールにとって適切なものであると認定するために、ステートストレージをチェックするステップと、
前記デバイスドライバが置き換えられている最中であるかどうかを決定するステップと、
前記デバイスドライバが置き換えられている最中であるならば、前記デバイスドライバの置き換えが完了するまで前記ユーザアプリケーションコールを保持するステップと、
前記デバイスドライバを呼び出すステップと、
を含む方法を実行させる命令を記憶する１又は複数の記録可能な媒体を有する製品。
【請求項５】
オペレーティングシステムカーネルと協働して使用されるアーキテクチャであって、
１又は複数のユーザアプリケーションからのデバイスドライバコールをインターセプトし、
各ユーザアプリケーションコールにとって適切であるデバイスドライバを認定するために、ステートストレージをチェックし、
前記デバイスドライバが置き換えられている最中であるならば、前記適切なデバイスドライバが置き換えられるまで任意のユーザアプリケーションコールを保持し、
前記適切なデバイスドライバへのプロセスコールを前記デバイスドライバを呼び出すために生成するデバイスドライバ呼び出しマネージャと、
前記デバイスドライバ呼び出しマネージャからの前記プロセスコールに応じて、前記オペレーティングシステムカーネルに対して、１又は複数のデバイスドライバを組み込み、削除し、置き換えるカーネルデバイスドライバマネージャと、
前記デバイスドライバ呼び出しマネージャからの前記プロセスコールに応じて、ユーザアプリケーションコールを実行する１又は複数のデバイスドライバと、
を備えるアーキテクチャ。
【請求項６】
オペレーティングシステムカーネルと共に使用されるシステムであって、
デバイスドライバインターフェイスのための前記オペレーティングシステムカーネルに登録されたスタブメソッドであって、前記デバイスドライバインターフェイス上のインターフェイスメソッドがコールされるときにコールされるスタブメソッドを用いて、アプリケーション要求を影響なしにインターセプトし宛先変更するデバイスドライバ呼び出しマネージャと、
前記デバイスドライバのスタブメソッドを前記オペレーティングシステムカーネルに登録することにより前記デバイスドライバを登録し、前記オペレーティングシステムから別のデバイスドライバの関連したスタブメソッドの登録を解除することにより前記別のデバイスドライバを削除するカーネルデバイスドライバマネージャと、
を備えるシステム。
【発明の詳細な説明】
【関連出願】
【０００１】
[0001]本願は、“Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｄｙｎａｍｉｃ  Ｒｅｐｌａｃｅｍｅｎｔ  ｏｆ  Ｄｅｖｉｃｅ  Ｄｒｉｖｅｒｓ  ｉｎ  ｔｈｅ  ＯＳ  Ｋｅｒｎｅｌ”と題する、２００４年８月２０日に出願され、参照として本明細書に組み込まれた米国仮出願第６０／６０３，３４２号の利益を主張する。
【発明の分野】
【０００２】
[0002]本発明は、コンピュータシステム、及び、携帯装置（例えば、携帯電話、携帯情報端末など）といったその他の種々の装置のオペレーティングシステムの分野に関し、特に、コンピュータシステムにおけるデバイスドライバの呼び出し及び置き換えに関する。
【背景】
【０００３】
[0003]オペレーティングシステムはコンピュータシステムの動作を制御する。しかし、昨今、携帯電話のような携帯装置でさえオペレーティングシステムを有する。図１は従来型のオペレーティングシステム（ＯＳ）を図示する。図１を参照すると、アプリケーション１０１はユーザ空間１０２にあり、レガシーデバイスドライバ１０３は、レガシーカーネルサービス１０６及びシステムコールディスパッチャ１０４と共にカーネル空間１０５にある。ユーザ空間１０２内のアプリケーション１０１のうちの１つがレガシーデバイスドライバ１０３のうちの１つをコールするとき、カーネルへのトラップが発生し、その結果、システムコールディスパッチャ１０４がコールされる。システムコールディスパッチャ１０４は次にデバイスドライバ上の適切なメソッドをコールする。
【０００４】
[0004]オペレーティングシステムは、ハードウェア又は（仮想デバイスドライバの場合には）ソフトウェアと通信するためデバイスドライバを使用する。研究によると、デバイスドライバは大多数のオペレーティングシステム故障の原因であることがわかっている。例えば、Ｗｉｎｄｏｗｓ  ＸＰの故障の８５％は不良なドライバが原因である。デバイスドライバはカーネルの残りの部分の３〜７倍に達する高いエラー率を有する。携帯装置では、このような故障は運営者にとって費用のかかる回収をもたらす結果となる。
【０００５】
[0005]Ｌｉｎｕｘ、ＦｒｅｅＢＳＤ及びＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓのようなオペレーティングシステムは、デバイスドライバを置き換える仕組みを提供する。オペレーティングシステムカーネル内部のデバイスドライバを置き換える既存の仕組みには、２つの重要な問題がある。第１に、殆どの場合にドライバを使用するすべてのアプリケーションがシャットダウンされ、オペレーティングシステムが再起動されなければならない。第２に、デバイスドライバは、置き換えが完了したのち、それまでのすべての状態を失う。このことはエンドユーザに不便を生じさせるだけでなく、携帯装置がサーバのように作動し、以降常に利用可能でなければならない場合には非常に望ましくないことでもある。
【０００６】
[0006]“Ａｕｔｏｍａｔｉｃ  Ｕｐｄａｔｅ  ｏｆ  Ｓｔａｔｉｃ  ａｎｄ  Ｄｙｎａｍｉｃ  Ｆｉｌｅｓ  ａｔ  Ｒｅｍｏｔｅ  Ｎｅｔｗｏｒｋ  Ｎｏｄｅ  ｉｎ  Ｒｅｓｐｏｎｓｅ  ｔｏ  Ｃａｌｌｓ  Ｉｓｓｕｅｄ  ｂｙ  ｏｒ  ｆｏｒ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｓ”と題する米国特許第５，５６４，０５１号（以下では、０５１号特許という）は、ネットワークファイルのリモートアップグレードを開示する。０５１号特許は、第１のプロセッサ（ワークステーション）で現在利用可能であるファイルと第２のプロセッサ（ホスト）で保持された最新のファイルとの間で比較が行われることを開示する。次に、行われるべきアクションのリストが作られ、ファイルが第１のプロセッサへダウンロードされ、旧ファイルを置き換え、既に存在する旧ファイルを増強するためにファイルを追加若しくは作成し、又は、アプリケーションによってこれ以上必要とされない任意の旧いファイルを削除する。しかし、０５１号特許は、オペレーティングシステムカーネルの非侵入型のアップグレードを扱わず、デバイスドライバの動的置き換えを扱わない。
【０００７】
[0007]“Ｎｏｎｉｎｔｒｕｓｉｖｅ  Ｕｐｄａｔｅ  ｏｆ  Ｆｉｌｅｓ”と題する米国特許第６，５６０，６１４号（以下では、６１４号特許という）には、ファイルが開いている間にファイルを更新する方法について記載されている。６１４号特許では、新しいユーザを更新されたバージョンへ向け直している間に現在のユーザが元のファイルにアクセスし続けることを可能にすることにより、現在オープンしているファイルを更新することについて開示されている。ユーザアクティビティが許容するとき、更新されたバージョンは元のファイルと置き換えられる。補助プログラムは、サーバアプリケーションがファイルの旧バージョンにアクセスしようとするときを検出し、アクセスコールを最新ファイルバージョンへ向け直す。ユーザが旧ファイルバージョンにアクセスしていないとき、ファイルの最新バージョンが代わりに使用されるので、旧ファイルバージョンにアクセスしているユーザにエラーを引き起こすことなく最新ファイルバージョンへのアクセスが可能になる。ファイルの新しい更新版はマスタサイトから一時的なロケーションであるアクセス可能な中間ロケーションへ移され、最終的に常駐ロケーションへ移される。さらに、６１４号特許に記載された方法は、ファイルシステムに記憶されたファイルと共に使用するため設計され、既にシステム上で動いているコードを置き換えるため使用できない。よって、この方法はユーザ空間アプリケーションだけに適用可能であり、ＯＳカーネル内部で使用できない。
【０００８】
[0008]“Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  ａｎｄ  Ｍｅｔｈｏｄｓ  ｆｏｒ  Ｌｏａｄｉｎｇ  ａｎｄ  Ｍｏｄｉｆｙｉｎｇ  ａ  Ｃｏｎｔｒｏｌ  Ｐｒｏｇｒａｍ  Ｗｉｔｈｏｕｔ  Ｓｔｏｐｐｉｎｇ  ｔｈｅ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｕｓｉｎｇ  Ｒｅｓｅｒｖｅ  Ａｒｅａｓ”と題する米国特許第６，５０２，１７６号（以下では、１７６号特許という）は、ＯＳのような制御プログラムの非侵入型の更新を可能にすることについて開示するが、正しく動作するようにコアＯＳカーネルへの変更を必要とする。
【０００９】
[0009]“Ａｐｐａｒａｔｕｓ  ａｎｄ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｔｒａｎｓｆｅｒｒｉｎｇ  Ｓｔａｔｅ  Ｄａｔａ  Ｗｈｅｎ  Ｐｅｒｆｏｒｍｉｎｇ  Ｏｎ−Ｌｉｎｅ  Ｒｅｐｌａｃｅｍｅｎｔ  ｏｆ  ａ  Ｒｕｎｎｉｎｇ  Ｐｒｏｇｒａｍ  Ｃｏｄｅ  ａｎｄ  Ｄａｔａ”と題する米国特許第６，３１４，５６７号（以下では、５６７号特許という）、並びに、“Ｍｅｔｈｏｄ  ｆｏｒ  Ｒｅｍｏｔｅｌｙ  ａｎｄ  Ｒｅｌｉａｂｌｙ  Ｕｐｄａｔｉｎｇ  ｏｆ  ｔｈｅ  Ｓｏｆｔｗａｒｅ  ｏｎ  ａ  Ｃｏｍｐｕｔｅｒ  ｗｉｔｈ  Ｐｒｏｖｉｓｉｏｎ  ｆｏｒ  Ｒｏｌｌ  Ｂａｃｋ”と題する米国特許第６，１４１，６８３号（以下では、６０３号特許という）は、ユーザ空間プログラムだけに適用可能であり、オペレーティングシステムカーネル内部のデバイスドライバを動的に置き換えるため使用できない。
【００１０】
[0010]“Ａｐｐａｒａｔｕｓ  ａｎｄ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｕｐｇｒａｄｉｎｇ  ａ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ”と題する米国特許第５，９３０，５１５号（以下では、５１５号特許）では、オペレーティングシステムの更新について開示されているが、アップグレードを実行するため２台の異なるプロセッサに付属した２個の別個のメモリの使用を必要とする。
【発明の概要】
【００１１】
[00011]オペレーティングシステム（ＯＳ）カーネルの中のデバイスドライバの動的置き換えの方法及び装置について記載する。一実施形態の方法は、デバイスドライバをオペレーティングシステムに追加する要求を受信するステップと、ユーザアプリケーション及びオペレーティングシステムプロセスが実行されている間にデバイスドライバをオペレーティングシステムに動的に追加するステップとを含む。
【００１２】
[00012]本発明は、後述の詳細な説明と発明の種々の実施形態の添付図面とからより完全に理解されるが、発明の種々の実施形態は発明を特定の実施形態に限定するために利用されるべきではなく、説明と理解のためだけに使われる。
【本発明の詳細な説明】
【００１３】
[00028]デバイスドライバを置き換える方法及び装置について記載する。本発明の一実施形態は、オペレーティングシステム（ＯＳ）デバイスドライバの非侵入的な更新を可能にする。本発明の実施形態は、アプリケーションへの無影響性を維持し、動的更新機能の安全性を確保した状態で、デバイスドライバを動的に更新する機能を既存のオペレーティングシステムに追加する。デバイスドライバの動的更新は、デバイスドライバの組み込み、削除、及び、置き換えのうちの１又は複数を含む。
【００１４】
[00029]一実施形態では、新しい更新機能は、既存のデバイスドライバ呼び出しのセマンティックスを拡張する新しいユーザレベルアプリケーションプログラミングインターフェイス（ＡＰＩ）のセットによって実現される。一実施形態では、デバイスドライバのシステムコールインターフェイスのセマンティックスは、ユーザ又はカーネル空間アプリケーションに影響を与えることなく変更される。新しいセマンティックスは、デバイスドライバが置き換えられている最中である場合に、デバイスドライバへのシステムコールがクラッシュを生じさせないことを保証する。このことは、（i）置き換えの安全性を得ることを目的として、アプリケーション要求の影響を及ぼさないインターセプトと宛先変更を提供し、（ii）カーネル内部のデバイスドライバの登録、置き換え及び削除の仕組みを提供し、（iii）機能がカーネルソースコードを変更することなくカーネルモジュールとして動作し得ることを保証するインターフェイス機構を提供することにより達成される。
【００１５】
[00030]一実施形態では、本発明は、３個の新しいカーネルモジュールをオペレーティングシステムに追加し、ユーザレベルでユーザデバイスドライバマネージャアプリケーションを追加することにより実現される。ユーザデバイスドライバマネージャアプリケーションは、オペレーティングシステム中のデバイスドライバのリモート無線経由（ＯＴＡ）マネージメントのため使用される。
【００１６】
[00031]本発明の一実施形態では、システムコールディスパッチャは、デバイスドライバコールのためのデバイスドライバ呼び出しマネージャ（ＤＤＩＭ）に制御を移す。ＤＤＩＭは、次に、実際のデバイスドライバ自体の上で適切なメソッドを呼び出す。ＤＤＩＭによって導入されるインターセプションレイヤは、動的置き換えを実行することができる安全な時点の決定を可能にするので、本発明の一実施形態の実現化に役立つ。一実施形態では、本発明によるオペレーティングシステムデバイスドライバの動的置き換えシステムは以下の特徴を有する。第１に、デバイスドライバ置き換えは、ユーザ空間とカーネル空間の両方においてそれぞれ（カーネルモジュールが置き換えを実行することを除いて）既存のプロセスに影響を与えない。換言すると、置き換えはユーザプロセス／カーネルプロセスに無影響であり、それらのプロセスは何事も無かったかのように動作し続ける。第２に、デバイスドライバのアプリケーションプログラミングインターフェイス（ＡＰＩ）は変更されず、ユーザ空間アプリケーションはデバイスドライバをコールするために既存のＡＰＩを使用し続けることが可能である。第３に、デバイスドライバ置き換えは、置き換えが他のユーザプロセス／カーネルプロセスをクラッシュさせない点で安全である。第４に、カーネル自体の内部のコードは、置き換え機能をサポートするカーネルモジュールを除いて変更されない。したがって、本発明の一実施形態は、コアカーネル内部のコードを１行も変更することなしに、モジュール式にＯＳ機能を更新する。
【００１７】
[00032]本明細書で説明されている動的置き換え技術は、多くのオペレーティングシステムに適用可能である。本明細書における教示は、本明細書において規定された要件を満たす既存のオペレーティングシステムが動的置き換え機能で拡張され得るようにする。本発明の実施形態は、デバイスドライバをカーネルに登録し、デバイスドライバがハンドラメソッドをコアカーネルに登録できる仕組みを提供し、一旦上記のハンドラメソッドが呼び出されると、デバイスドライバがそれらのアイデンティティを決定できる仕組みを提供し、デバイスドライバが割り込みハンドラをオペレーティングシステムに登録できる仕組みを提供し、デバイスドライバが互いに通信できる仕組みを提供するオペレーティングシステムに適用される。殆どのＵＮＩＸオペレーティングシステム（例えば、Ｌｉｎｕｘ、ＦｒｅｅＢＳＤ）及びＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓオペレーティングシステムを含むオペレーティングシステムは、これらの要件を満たす。
【００１８】
[00033]本明細書に記載された技術は、多数のメモリ及びプロセッサを必要とすることなく、デバイスドライバの細粒度の動的置き換えを達成することに注目すべきである。
【００１９】
[00034]以下の説明中、本発明をより完全に説明するために、様々な詳細を記述する。しかし、本発明はこれらの詳細なしに実施されることが当業者に明白である。その他に、周知の構造及び装置は、本発明をわかりにくくすることを避けるために詳細にではなくブロック図形式で示されている。
【００２０】
[00035]後述の詳細な説明の一部は、アルゴリズム及びコンピュータメモリ内のデータビットに関する演算の記号表現の観点から提示されている。アルゴリズム的な記述及び表現は、データ処理技術の当業者が自分の業績の内容を他の当業者へ最も効果的に伝達するために使用される手段である。ここで、アルゴリズムは、一般的に、所望の結果を導く首尾一貫したステップの系列であると考えられる。ステップは物理量の物理的な操作を必要とするステップである。必ずしもそうであるとは限らないが、通常は、これらの量は、蓄積、転送、結合、比較及びその他の操作を施すことができる電気的又は磁気的信号の形式をしている。主として一般的な用法であるという理由から、これらの信号をビット、値、要素、シンボル、文字、項、数などと呼ぶことが時には好都合であることがわかった。
【００２１】
[00036]しかし、これらの用語及び類似した用語のすべては適切な物理量と関連付けられ、これらの量に付与された便宜的なラベルに過ぎないことに注意すべきである。以下の説明から明らかであるように、特に断らない限り、明細書全体を通じて、「処理する」又は「演算する」又は「計算する」又は「決定する」又は「表示する」などの用語を用いた議論では、コンピュータシステムのレジスタ及びメモリ内の物理（電子）量として表現されたデータを操作し、コンピュータシステム、或いは、その他のこのような情報蓄積、伝送又は表示装置のメモリ又はレジスタ内の物理量として同様に表現されたその他のデータに変換する、コンピュータシステム、又は、類似した電子コンピューティング装置のアクション及びプロセスを参照する。
【００２２】
[00037]本発明は、本明細書に記載された動作を実行する装置にさらに関係する。本装置は要求された目的のため特別に構成されるか、又は、コンピュータに記憶されたコンピュータプログラムによって選択的に作動若しくは再構成される汎用コンピュータを備える。このようなコンピュータプログラムは、例えば、限定されることはないが、コンピュータシステムバスに接続された、フレキシブルディスク、光ディスク、ＣＤ−ＲＯＭ、及び、光磁気ディスクを含むあらゆるタイプのディスク、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気若しくは光カード、又は、電子命令を記憶するため適したあらゆるタイプの媒体のようなコンピュータ読み取り可能な記憶媒体に記憶される。
【００２３】
[00038]本明細書に提示されたアルゴリズム及びディスプレイは、いずれかの特定のコンピュータ又はその他の装置に本質的に関係しない。種々の汎用システムが本明細書の教示に従うプログラムと共に使用され、又は、必要とされる方法ステップを実行するためより専用化された装置を構築するのが好都合であることがわかる。多種多様なこれらのシステムのため必要とされる構造は以下の説明から明白である。その上、本発明は特定のプログラミング言語を参照して記載されていない。多種多様なプログラミング言語が本明細書に記載されているような発明の教示内容を実施するため使用されることが理解される。
【００２４】
[00039]機械読み取り可能な媒体は、機械（例えば、コンピュータ）によって読み取り可能な形式で情報を蓄積又は伝送する任意の仕組みを含む。例えば、機械読み取り可能な媒体は、リードオンリメモリ（“ＲＯＭ”）、ランダムアクセスメモリ（“ＲＡＭ”）、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリ装置、電気的、光学的、音響的若しくはその他の形式の伝搬信号（例えば、搬送波、赤外線信号、デジタル信号など）などを含む。
【００２５】
[00040]図２Ａは、本発明のシステムアーキテクチャにおける機能的なコンポーネントのブロック図を図示する。図２Ａを参照すると、従来型のオペレーティングシステムと同様に、アプリケーション１０１はユーザ空間１０２にあり、カーネル空間１０５中のレガシーデバイスドライバ１０３と通信する。しかし、図２Ａに示されたシステムアーキテクチャでは、更新可能なデバイスドライバ２０３が同様にカーネル空間１０５にあり、アプリケーション１０１と通信する。その上、ユーザ空間１０２は、デバイスドライバ要求のインターセプトを実行する、より詳細に後述されるユーザデバイスドライバマネージメントモジュール２０１を含む。さらに、カーネル空間１０５は、デバイスドライバの組み込み、削除及び置き換えを実行する、より詳細に後述されるカーネルデバイスドライバマネージメントモジュール２０２を含む。
【００２６】
[00041]図２Ｂはプロセスの一実施形態のフローチャートである。プロセスは、ハードウェア（例えば、回路、専用ロジックなど）、ソフトウェア（例えば、汎用コンピュータシステム若しくは専用機械上で動かされるもの）、又は、両方の組み合わせを含む処理ロジックによって実行される。
【００２７】
[00042]図２Ｂを参照すると、プロセスは、デバイスドライバへのユーザアプリケーションコールをインターセプトする処理ロジックによって始まる（処理ブロック２３１）。
【００２８】
[00043]ユーザアプリケーションコールのインターセプトに応答して、処理ロジックは、デバイスドライバがユーザアプリケーションコールにとって適切なものであることを認定するために、ステートストレージをチェックする（処理ブロック２３２）。
【００２９】
[00044]デバイスドライバが認定されると、処理ロジックは、デバイスドライバが置き換えられている最中であるかどうかを決定する（処理ブロック２３３）。デバイスドライバが置き換えられている最中であるならば、処理ロジックは、デバイスドライバの置き換えが完了するまでユーザアプリケーションコールを保持し（処理ブロック２３４）、デバイスドライバの現在バージョンの状態を記憶する（処理ブロック２３５）。一実施形態では、デバイスドライバが置き換え中であるならば、処理ロジックはメモリ（例えば、ステートストレージ）からそのデバイスドライバ特定情報を削除し、オペレーティングシステムからデバイスドライバに関連付けられたスタブメソッドの登録を解除する。
【００３０】
[00045]その後、処理ロジックはデバイスドライバをオペレーティングシステムに追加する（処理ブロック２３６）。一実施形態では、デバイスドライバは、実行中のユーザアプリケーション及びオペレーティングシステムプロセスに影響なしに動的に追加される。一実施形態では、デバイスドライバは、オペレーティングシステムカーネルに動的に追加され、同時にデバイスドライバをコールするオペレーティングシステム及びユーザアプリケーションの安全性を確保する（例えば、オペレーティングシステム及び／又はユーザアプリケーションはデバイスドライバの置き換え中にクラッシュしない）。
【００３１】
[00046]一実施形態では、デバイスドライバを追加するステップは、入力されるユーザアプリケーションコールのデバイスドライバへのルーティングを可能にするため、デバイスドライバをオペレーティングシステムカーネルに登録し、デバイスドライバをステートストレージに登録する工程を備える。一実施形態では、デバイスドライバをオペレーティングシステムカーネルに登録することはスタブインターセプトを使用して実行される。そのために、一実施形態では、デバイスドライバを登録するステップはスタブメソッドだけをデバイスドライバインターフェイスのためのオペレーティングシステムカーネルに登録する工程を含む。
【００３２】
[00047]一実施形態では、デバイスドライバを登録するステップは、デバイスドライバ特定情報をメモリ（例えば、ステートストレージ）に記憶する工程をさらに含む。
【００３３】
[00048]デバイスドライバが置き換えられると、処理ロジックはデバイスドライバの状態を復元する（処理ブロック２３７）。
【００３４】
[00049]デバイスドライバが置き換えられていないか、又は、置き換えが実行された後、処理ロジックはデバイスドライバを呼び出す（処理ブロック２３８）。一実施形態では、処理ロジックは、デバイスドライバ上のプロセスメソッドをコールすることによりデバイスドライバを呼び出す。一実施形態では、アプリケーションがドライバ装置のインターフェイスメソッドをコールするとき、ドライバ装置の関連したスタブがコールされる。
【００３５】
[00050]図３は全体的なシステムアーキテクチャの一実施形態のより詳細なブロック図である。図３を参照すると、システムアーキテクチャは、本明細書に記載された機能を実現するため既存のオペレーティングシステムに追加された２個の論理部、すなわち、
（i）カーネルデバイスドライバ呼び出しマネージャ（ＤＤＩＭ）３０３、カーネルデバイスドライバマネージャ（ＫＤＤＭ）３０２及びステートストレージ３０４を含むカーネルレベルコンポーネントと、（ii）本明細書ではユーザデバイスドライバマネージャ（ＵＤＤＭ）３０１と呼ばれるユーザレベルアプリケーションとからなる。
【００３６】
[00051]システムアーキテクチャは、汎用コンピュータシステム又は専用機械に含まれてもよい。一実施形態では、システムアーキテクチャは、例えば、携帯電話のような携帯装置に含まれる。
ステートストレージ
[00052]ステートストレージ３０４は更新可能なデバイスドライバ２０３の状態を保存する。一実施形態では、ステートストレージ３０４は、その内容にアクセスし、記憶し、取り出すために他のカーネルモジュールにＡＰＩを提供する。一実施形態では、ステートストレージ３０４は、例えば、キーが文字列として記憶され、値がメモリ領域へのポインタであるハッシュテーブルのようなタプルコンテナとしてメモリに実施される。キーは更新可能なデバイスドライバ２０３のそれぞれに関連付けられた状態データを特定し、ポインタは更新可能なデバイスドライバ２０３のそれぞれの状態データが記憶されるメモリロケーションを特定するため使用される。状態データはグローバル変数及びヒープ割り当てを含む。一実施形態では、すべてのグローバル変数及びヒープ割り当てはステートストレージ３０４中でインデックス付けされる。データはドライバ置き換えを助けるため使用される。ステートストレージ３０４は、置き換えの過程でメモリが持続することを保証することにより動的ドライバ置き換えを円滑にする。さらに、ステートストレージ３０４は、デバイスドライバのメモリ構造を調べるため均一なインターフェイスを提供する。
デバイスドライバ呼び出しマネージャ（ＤＤＩＭ）
[00053]一実施形態では、デバイスドライバ呼び出しマネージャ（ＤＤＩＭ）３０３は、要求インターセプトと保護ドメイン全域でのメモリセーフティを実行する。
【００３７】
[00054]一実施形態では、ＤＤＩＭ３０３は、更新可能なデバイスドライバ２０３へのすべてのユーザアプリケーションコールをインターセプトする。コールをインターセプトした後、ＤＤＩＭ３０３は、コールするために適切なデバイスドライバを見つけるためステートストレージ３０４をチェックし、次に、そのデバイスドライバを呼び出す。ターゲットデバイスドライバが置き換え中であるならば、ＤＤＩＭ３０３は、置き換えが完了するまで、そのデバイスドライバのためのすべての入ってくるアプリケーションコールを保持する。
【００３８】
[00055]一実施形態では、入ってくるアプリケーションコールのインターセプトは、スタブメソッドを対応するデバイスドライバインターフェイスのオペレーティングシステムカーネルに登録することによって達成される。アプリケーションがデバイスドライバ上のインターフェイスメソッドをコールするとき、スタブがコールされる。この時点で、カーネル１０５のＤＤＩＭ３０３は、ターゲットデバイスドライバをコールし、実際の呼び出しを実行しても安全であることを確認する。
【００３９】
[00056]一実施形態では、カーネルとユーザ保護ドメインとの間のＡＰＩコールが間違ったポインタ参照を原因としてクラッシュしないことを保証するため、本発明の一実施形態は、２個の保護ドメインの間でメモリが安全にコピーされることを保証すべく、カーネルＡＰＩであるｃｏｐｙ＿ｆｒｏｍ＿ｕｓｅｒ（）及びｃｏｐｙ＿ｔｏ＿ｕｓｅｒ（）に依存する。これについては以下でより詳しく説明される。
【００４０】
[00057]一実施形態では、ＤＤＩＭ３０３は、従来型のデバイスドライバとして実施され、本明細書に記載されたすべての動的デバイスドライバ更新機能のエントリーポイントとして作動する。ユーザレベルアプリケーションは、ＤＤＩＭ３０３と相互に作用するため、（以下のプロトコル記述に示されるように）ＯＳ標準ＡＰＩコールを使用する。
【００４１】
[00058] 図４は、ＤＤＩＭ３０３によって実行されるプロセスの一実施形態を示す。一実施形態では、セクションは、ＤＤＩＭ３０３が、プロセス間のデッドロックを回避した状態で、デバイスドライバの安全な置き換えを実行することを保証するために、コードに含まれる。図４に記載されたプロセスは、ハードウェア（例えば、回路、専用ロジックなど）、（例えば、汎用コンピュータシステム若しくは専用機械上で動かされるような）ソフトウェア、又は、両方の組み合わせを含む処理ロジックによって実行される。
【００４２】
[00059]図４を参照すると、プロセスは、ステートストレージ３０４からターゲットデバイスドライバを決定する処理ロジックによって始まる（処理ブロック４０１）。次に、処理ロジックは、ターゲットデバイスドライバが削除中であるかどうかを決定する（処理ブロック４０２）。削除中であるならば、処理ロジックはアプリケーションにエラーを送信し（処理ブロック４１０）、リターンする（処理ブロック４１１）。
【００４３】
[00060]処理ロジックは、ターゲットデバイスドライバが置き換えられている最中であるかどうかをテストする（処理ブロック４０３）。置き換え中であるならば、処理ロジックは置き換えが完了するまで待機する（処理ブロック４１２）。
【００４４】
[00061]ターゲットデバイスドライバの置き換え後、処理ロジックは、ターゲットデバイスドライバの参照カウンタを増加させる（処理ブロック４０４）。参照カウンタは、デバイスドライバに対しある時点に存在する未解決の要求の個数を示す。
【００４５】
[00062]その後、処理ロジックはターゲットデバイスドライバを呼び出す（処理ブロック４０５）。ターゲットデバイスドライバを呼び出した後、処理ブロックはターゲットデバイスドライバの参照カウンタを減少させる（処理ブロック４０６）。処理ロジックは、参照カウンタが０であるかどうか、及び、システムがターゲットデバイスドライバの置き換え若しくは削除を待機中であるかどうかをテストする（処理ブロック４０７）。そうであるならば、処理ロジックはデバイスドライバフレームワークマネージャ中の置き換えモジュールをウェイクアップする（処理ブロック４１３）。そうでなければ、プロセスは終了する。
カーネルデバイスドライバマネージャ（ＫＤＤＭ）
[00063]一実施形態では、ＫＤＤＭ３０２は、デバイスドライバの組み込み、オペレーティングシステムカーネルからの削除、及び、置き換えを担うカーネルモジュールである。一実施形態では、ＫＤＤＭ３０２はＤＤＩＭ３０３を介してユーザレベルでＵＤＤＭ３０１とインターフェイスをとる。
【００４６】
[00064]一実施形態では、デバイスドライバ組み込みは、新しいドライバを、（i）カーネルＤＤＩＭ３０３に規定されたスタブインターセプションメソッドを使用してカーネルモジュールとしてオペレーティングシステムに登録すること、及び、（ii）カーネルＤＤＩＭ３０３が入力されたコールをドライバへルーティングし、最終的にデバイスドライバの初期化ルーチンをコールすることができるように、ステートストレージ３０４に登録することを包含する。デバイスドライバ組み込みプロトコルの一実施形態は図６と併せて以下で説明する。
【００４７】
[00065]一実施形態では、デバイスドライバ削除は、（i）ＤＤＩＭ３０３がデバイスドライバへ入力されるすべてコールを保持できるように削除保留フラグを真に設定すること、（ii）ターゲットデバイスドライバを使用しているアプリケーションが存在しないことをチェックすることによりシステムが安全な状態であることを確認すること、（iii）ＯＳカーネルからターゲットデバイスドライバの登録を解除すること、及び、（iv）デバイスドライバによって使用されるメモリを削除することを包含する。デバイスドライバ削除プロトコルの一実施形態は図７Ｂと併せて後述する。
【００４８】
[00066]一実施形態では、デバイスドライバ置き換えは２つのステップを包含する。本明細書において置き換え準備と呼ばれる第１のステップは、ＫＤＤＭ３０２が（i）デバイスドライバ呼び出しマネージャ３０３がデバイスドライバへ入力されるすべてのコールを保持できるように置き換え保留フラグを真に設定すること、（ii）ターゲットデバイスドライバを使用しているアプリケーションが存在しないことをチェックすることによりシステムが安全な状態であることを確認すること、（iii）ＯＳカーネルからターゲットデバイスドライバの登録を解除すること、及び、（iv）ドライバ状態情報でステートストレージ３０４を更新することを包含する。
【００４９】
[00067]この時点で、ＫＤＤＭ３０２は、新しいデバイスドライバをＯＳカーネルに挿入する準備ができている。この挿入は、（i）デバイスドライバ呼び出しマネージャ３０３が入ってくるコールをドライバへルーティングできるように、ステートストレージ３０４中の置き換えデバイスドライバのドライバエントリーを更新すること、（ii）置き換えデバイスドライバの初期化ルーチンをコールすること、及び、（iii）デバイスドライバへのアクセスを待機していたすべてのプロセスをウェイクアップすることを包含する。一実施形態では、デバイスドライバの置き換えは、デバイスドライバがコールされることを可能にするため新しいハンドルがオペレーティングシステムに与えられる（更新される）結果をもたらす。デバイスドライバ置き換えプロトコルの一実施形態は図８Ｃと併せて後述する。
ユーザデバイスドライバマネージャ（ＵＤＤＭ）
[00068]一実施形態では、ＵＤＤＭ３０１は、オペレーティングシステムからドライバを組み込み、削除し、置き換えるためＫＤＤＭ３０２とインターフェイスをとるユーザ空間アプリケーションである。
【００５０】
ＵＤＤＭ３０１は、多くの方法で使用される。一実施形態では、ＵＤＤＭ３０１はコマンドラインユーティリティ（ソフトウェア）である。別の実施形態では、ＵＤＤＭ３０１は、バックエンド無線経由（ＯＴＡ）デバイスマネージメントツールである。一実施形態では、ＵＤＤＭ３０１はアドニミストレータ（又はルート）の特権レベルで組み込まれるので、システムアドミニストレータだけがデバイスドライバの動的更新を実行可能である。したがって、一実施形態では、ＵＤＤＭ３０１は、局所的にシステムアドミニストレータによって呼び出されるか、又は、適切な特権レベルを有する無線経由（ＯＴＡ）エンティティによって呼び出される。
【００５１】
[00069]一実施形態では、ＵＤＤＭ３０１のコマンドラインパラメータは以下の通りである。
ｕｄｄｍ［−コマンド］［−名前］
オプション：
コマンド
ｉｎｓｔａｌｌ：新しいデバイスドライバを組み込む
ｒｅｍｏｖｅ：カーネルからデバイスドライバを削除する
ｒｅｐｌａｃｅ：デバイスドライバを新しいデバイスドライバで置き換える
ｉｎｓｐｅｃｔ：カーネルに組み込まれたデバイスドライバの状態を検査する
名前
デバイスドライバの名前。
更新可能なデバイスドライバ
[00070]一実施形態では、デバイスドライバ２０３のそれぞれは、以下の６個の特長を有する。
【００５２】
[00071]１．デバイスドライバは、入力として（例えば、ハッシュテーブルのような）タプルコンテナへのポインタをとり、返り値がないｐｒｏｃｅｓｓ（）メソッドを有する。
【００５３】
[00072]２．上記のｐｒｏｃｅｓｓ（）メソッドは、キー“ＭｅｔｈｏｄＮａｍｅ”を用いてタプルコンテナルックアップを実行することにより実際の呼び出しメソッドへのポインタを取り出し、次にそれを呼び出す。
【００５４】
[00073]３．呼び出されたメソッドは、パラメータを取り出し、呼び出し元へ返すためにタプルコンテナポインタを使用する。
【００５５】
[00074]４．デバイスドライバは、そのメジャー番号とそのプロセスメソッドへのファンクションポインタをステートストレージ３０４に登録する。
【００５６】
[00075]５．デバイスドライバはカーネル自体への登録を行わない。
【００５７】
[00076]６．すべてのグローバル変数及びヒープ上に割り当てられたメモリは、ステートストレージ３０４を介して記憶されアクセスされる。
例示的なプロトコル
[00077]上記のフレームワークを使用するデバイスドライバの呼び出し、組み込み、削除及び置き換えのためのプロトコルの実施形態を以下に記載する。
ドライバ呼び出しプロトコル
[00078] 図５に、デバイスドライバ呼び出しプロトコルの一実施形態を示す。図５を参照すると、ユーザレベルアプリケーションが更新可能なデバイスドライバ上のＡＰＩコール（ＤｅｖｉｃｅＤｒｉｖｅｒＣａｌｌ（）５０２）を行うとき、このコールはデバイスドライバ呼び出しマネージャ（ＤＤＩＭ）３０３によってインターセプトされる。ＤＤＩＭ３０３は、ｃｏｐｙ＿ｆｒｏｍ＿ｕｓｅｒ（）システムＡＰＩ５０３を使用することにより、すべてのユーザ空間メモリ参照をカーネル空間へコピーする。次に、ＤＤＩＭ３０３は、新しいタプルコンテナを作成し、ＤｅｖｉｃｅＤｒｉｖｅｒＣａｌｌ５０２のすべてのパラメータをタプルコンテナに入れる。この時点で、ＤＤＩＭ３０３は、ステートストレージ３０４からターゲットデバイスドライバを決定（リゾルブ）しようとする。これは、ＤＤＩＭ３０３が呼び出されているデバイスドライバを決定し、デバイスドライバが置き換えられている最中であるかどうかを決定するプロセスである。ターゲットデバイスドライバが置き換え中であるならば、ＤＤＩＭ３０３は、置き換えが完了するまで、入力されるすべてアプリケーションコールを保持する。ターゲットデバイスドライバのリゾルブに成功した後、ＤＤＩＭ３０３はターゲットデバイスドライバ上のｐｒｏｃｅｓｓ（）メソッド５０５をコールする。デバイスドライバのプロセスメソッドは、要求を適切なメソッド（ＤｅｖｉｃｅＤｒｉｖｅｒＣａｌｌ（））へ転送する。
【００５８】
[00079]要約すると、アプリケーションがデバイスドライバ上のインターフェイスメソッドをコールするとき、ＤＤＩＭ３０３上の適切なスタブがコールされる。この時点で、ＤＤＩＭ３０３は、ターゲットデバイスドライバをコールしても安全であることを確認し、実際の呼び出しを実行する。
【００５９】
[00080]デバイスドライバコールがリターン５０６するとき、それはＤＤＩＭ３０３によって再びインターセプトされ、メモリがｃｏｐｙ＿ｔｏ＿ｕｓｅｒ（）システムＡＰＩ５０７を使用してユーザ空間へ適切にコピーされることを保証し、次に、ＤＤＩＭ３０３はユーザアプリケーション５０１にリターン（ＤｅｖｉｃｅＤｒｉｖｅｒＲｅｔｕｒｎ（）５０８）を送信する。
ドライバ組み込みプロトコル
[00081]図６は、デバイスドライバ組み込みプロトコルの一実施形態である。図６を参照すると、ドライバ組み込みは、組み込み要求を使用してＵＤＤＭ３０１を呼び出すＯＴＡアプリケーション又はシステムアドミニストレータのような外部エンティティで始まる。ＵＤＤＭ３０１は、次に、標準的なＯｐｅｎ（）メソッドコール６０１を使用してＤＤＩＭ３０３をオープンする。ＤＤＩＭ３０３のオープンに成功した後、ＵＤＤＭ３０１は、ＤＤＩＭ３０３上のｉｏｃｔｌ（）コール６０２を実行する。このｉｏｃｔｌ（）コール６０２は、ＤＤＩＭ３０３にＫＤＤＭ３０２をコールすることを要求するものである。ＤＤＩＭ３０２は、次に、ｐｒｏｃｅｓｓ（）メソッド６０３を使用してステートストレージ３０４からＫＤＤＭ３０３をルックアップし、ＫＤＤＭ３０３上のｐｒｏｃｅｓｓ（）メソッド６０４を呼び出す。ＫＤＤＭ３０３上のプロセスメソッドは、コールへのメソッド名を“ｉｎｓｔａｌｌ＿ｄｄ”としてリゾルブし、ｉｎｓｔａｌｌｅｄ＿ｄｄメソッド６０５をコールする。
【００６０】
[00082]メソッド名をリゾルブした後、組み込みは、新しいデバイスドライバを（i）レジスタコール６０７を使用してカーネルデバイスドライバ呼び出しマネージャ３０３に定義されたスタブインターセプトメソッドを使用するカーネルモジュールとしてオペレーティングシステムに登録すること、及び、（ii）ｐｕｔ（）コール６０６を使用してステートストレージ３０４に登録することを包含する。このようにして、ＤＤＩＭ３０３は、入ってくるコールをドライバへルーティングし、最終的に実際の呼び出しを実行する。
デバイス削除プロトコル
[00083]図７Ａはデバイスドライバ削除プロセスの一実施形態のフローチャートである。このプロセスは、ハードウェア（例えば、回路、専用ロジックなど）、ソフトウェア（例えば、汎用コンピュータシステム若しくは専用機械上で動かされるもの）、又は、両方の組み合わせを含む処理ロジックによって実行される。
【００６１】
[00084]図７Ａを参照すると、プロセスは、削除されるべきデバイスドライバを決定するためターゲットデバイスドライバをリゾルブする処理ロジックによって始まる（処理ブロック７０１）。次に、処理ロジックは、ターゲットデバイスドライバの削除が既に行われていることを示す削除保留フラグが真であるかどうかを決定する（処理ブロック７０２）。真であるならば、処理ロジックはリターンする（処理ブロック７１０）。真でなければ、処理ロジックは削除保留フラグを真に設定する（処理ブロック７０３）。
【００６２】
[00085]次に、処理ロジックは、ターゲットデバイスドライバに対する現在保留している要求の個数を指し示す参照カウンタが零でないかどうかを決定する（処理ブロック７０４）。参照カウンタが零でないならば、処理ロジックは、参照カウンタが零になるまで待つ（処理ブロック７１１）。参照カウンタが零であるか、又は、参照カウンタが零になった後、処理ロジックはＯＳカーネルからデバイスドライバの登録を解除し（処理ブロック７０５）、ステートストレージ３０４中のドライバエントリーをクリアする（処理ブロック７０６）。その後、処理ロジックはリターンする（処理ブロック７０７）。
【００６３】
[00086]図７Ｂは、デバイスドライバ削除プロトコルの一実施形態を図示する。図７Ｂを参照すると、ドライバ削除は、削除要求でＵＤＤＭ３０１を呼び出すＯＴＡアプリケーション又はシステムアドミニストレータのような外部エンティティで始まる。ＵＤＤＭ３０１は、次に、標準的なＯｐｅｎ（）メソッドコール７２０を使用してＤＤＩＭ３０３をオープンする。ＤＤＩＭ３０３デバイスドライバをオープンすることに成功した後、ＵＤＤＭ３０１は、ＤＤＩＭ３０３上のｉｏｃｔｌ（）コール７２１を実行する。このｉｏｃｔｌ（）コール７２１は、ＤＤＩＭ３０３にＫＤＤＭ３０２のコールを要求するものである。ＤＤＩＭ３０３は、次に、ｐｒｏｃｅｓｓ（）メソッド７２２を使用してステートストレージ３０４からＫＤＤＭ３０２をルックアップし、ＫＤＤＭ３０２上のｐｒｏｃｅｓｓ（）メソッド７２３を呼び出す。それに応答して、ＫＤＤＭは、“ｒｅｍｏｖｅ＿ｄｄ”としてコールするメソッド名をリゾルブするためプロセスメソッドを行い、ｒｅｍｏｖｅ＿ｄｄメソッド７２４をコールする。Ｒｅｍｏｖｅ＿ｄｄ（）メソッド７２４は、ｕｎｒｅｇｉｓｔｅｒ（）コール７２６を使用してＯＳカーネルからデバイスドライバを削除し、ｒｅｍｏｖｅ（）コール７２５を使用してステートストレージ３０４からデバイスドライバを削除する。
ドライバ置き換えプロトコル
[00087]図８Ａは置き換え準備プロセスの一実施形態のフローチャートである。プロセスは、ハードウェア（例えば、回路、専用ロジックなど）、ソフトウェア（例えば、汎用コンピュータシステム若しくは専用機械上で動かされるもの）、又は、両方の組み合わせを含む処理ロジックによって実行される。
【００６４】
[00088]図８Ａを参照すると、処理ロジックは、まず、置き換えられるべきターゲットデバイスドライバを特定するためターゲットデバイスドライバをリゾルブする（処理ブロック８０１）。次に、処理ロジックは、ステートストレージ３０４中の置き換え保留フラグが真であるかどうかをテストする（処理ブロック８０２）。真であるならば、置き換えは既に保留されており、処理ロジックはリターンする（処理ブロック８７０）。真でなければ、処理ロジックはステートストレージ３０４中の置き換え保留フラグを真に設定する（処理ブロック８０３）。次に、処理ロジックは、デバイスドライバへの要求が依然として保留されていることを示す参照カウンタが零でないかどうかをテストする（処理ブロック８０４）。参照カウンタが零でないならば、処理ロジックは参照カウンタが０になるまで待機する（処理ブロック８７１）。
【００６５】
[00089]参照カウンタが零であるとき、処理ロジックはＯＳカーネルからデバイスドライバの登録を解除し（処理ブロック８０５）、リターンする（処理ブロック８０６）。
【００６６】
[00090]図８Ｂは、デバイスドライバ置き換えプロセスの一実施形態のフローチャートである。プロセスは、ハードウェア（例えば、回路、専用ロジックなど）、ソフトウェア（例えば、汎用コンピュータシステム若しくは専用機械上で動かされるもの）、又は、両方の組み合わせを含む処理ロジックによって実行される。
【００６７】
[00091]図８Ｂを参照すると、処理ロジックは置き換えられるべきデバイスドライバを決定するためターゲットデバイスドライバをリゾルブする（処理ブロック８１１）。ターゲットデバイスドライバがリゾルブされたならば、処理ロジックはステートストレージ３０４中の置き換え保留フラグを偽に設定する（処理ブロック８１２）。処理ロジックは、次に、ＯＳカーネル中にデバイスドライバを登録する（処理ブロック８１３）。処理ロジックは、次に、ターゲットデバイスドライバに関係したすべての休止中プロセスをウェイクアップし（処理ブロック８１４）、リターンする（処理ブロック８１５）。
【００６８】
[00092]図８Ｃは、デバイスドライバ置き換えプロトコルの一実施形態を図示する。図８Ｃを参照すると、置き換えプロセスは、置き換え要求を使用してＵＤＤＭ３０１を呼び出すＯＴＡアプリケーション又はシステムアドミニストレータのような外部エンティティで始まる。ＵＤＤＭ３０１は、次に、標準的なＯｐｅｎ（）メソッドコール８３０を使用してＤＤＩＭ３０３をオープンする。ＤＤＩＭ３０３をオープンすることに成功した後、ＵＤＤＭ３０１は、ＤＤＩＭ３０３上のｉｏｃｌｔ（）コール８３１を実行する。このｉｏｃｌｔ（）コール８３１は、ＤＤＩＭ３０３にＫＤＤＭ３０２をコールすることを要求するものである。ＤＤＩＭ３０３は、次に、ｐｒｏｔｏｃｏｌ（）８３２を使用してステートストレージ３０４からＫＤＤＭ３０２をルックアップし、ＫＤＤＭ３０２上のｐｒｏｃｅｓｓ（）メソッド８３３を呼び出す。プロセスメソッド８３３に応答して、ＫＤＤＭ３０２は、“ｐｒｅｐａｒｅＲｅｐｌａｃｅｍｅｎｔ”としてコールするためメソッド名をリゾルブし、そのメソッド８３４をコールする。Ｐｒｅｐａｒｅ＿ｒｅｐｌａｃｅｍｅｎｔ（）メソッド８３４は、ｕｐｄａｔｅ（）コール８３５を使用してステートストレージ３０４を更新し、登録解除コール８３６でＯＳカーネルからデバイスドライバの登録を解除することにより置き換えを実行するためにシステムが安全な状態であることを保証する。一実施形態では、ｕｐｄａｔｅｄ（）コール８３５は、キー、ポインタ、グローバル変数及び／又はヒープ割り当てを更新する。
【００６９】
[00093]この時点で、ＵＤＤＭ３０１は置き換えドライバをシステムに挿入する準備ができている。そうするため、ＵＤＤＭ３０１は、ＤＤＩＭ３０３上の別のｉｏｃｔｌ（）コール８３７を実行する。このｉｏｃｔｌ（）コール８３７は、ｒｅｐｌａｃｅ＿ｄｄ（）メソッド８４０がＫＤＤＭ３０２上で呼び出されるようにするためのものである。Ｒｅｐｌａｃｅ＿ｄｄ（）メソッド８４０は、ｕｐｄａｔｅ（）コール８４１を使用してステートストレージ３０４を更新し、ｒｅｇｉｓｔｅｒ（）コール８４２を使用してデバイスドライバをＯＳカーネルに登録することにより、実際の置き換えを引き起こす。ＵＤＤＭ３０１は、それが完了したとき、すべての休止中プロセスをウェイクアップする。
ドライバ検査プロトコル
[00094]図９は、デバイスドライバ検査プロトコルの一実施形態である。このプロトコルは、システムに組み込まれた更新可能なデバイスドライバとこれらのドライバの付随する状態をＵＤＤＭ３０１が検査したいときに呼び出される。図９を参照すると、プロセスは、検査要求でＵＤＤＭ３０１を呼び出すＯＴＡアプリケーション又はシステムアドミニストレータのような外部エンティティで始まる。ＵＤＤＭ３０１は、次に、標準的なＯｐｅｎ（）メソッドコール９０１を使用してＤＤＩＭ３０３をオープンする。ＤＤＩＭ３０３がうまくオープンされた後、ＵＤＤＭ３０１は、ＤＤＩＭ３０３にＫＤＤＭ３０２をコールすることを要求するＤＤＩＭ３０３上のｉｏｃｔｌ（）コール９０２を実行する。ＤＤＩＭ３０３は、次に、ステートストレージ３０４からＫＤＤＭ３０２をルックアップし、ＫＤＤＭ３０３上のｐｒｏｃｅｓｓ（）メソッド９０４を呼び出す。プロセスメソッド９０４に応答して、ＫＤＤＭ３０２は、“ｉｎｓｐｅｃｔ＿ｄｄ”としてコールするためメソッド名をリゾルブし、ｉｎｓｐｅｃｔ＿ｄｄメソッド９０５を使用してそのメソッドをコールする。ｉｎｓｐｅｃｔ＿ｄｄ（）メソッド９０５は、ｇｅｔ（）コール９０６を使用してステートストレージ３０４から組み込まれたデバイスドライバに関する状態情報を取り出し、それをアプリケーションに返す。よって、ＵＤＤＭ３０１は、いかなる時点でもシステムの現在状態のスナップショットを得ることができる。
デバイスドライバ呼び出しの新しいセマンティックス
[00095]本発明の実施形態は、オペレーティングシステムによってサポートされる標準的なデバイスドライバＡＰＩに対する新しいセマンティックスを使用する。
【００７０】
[00096]デバイスドライバが置き換えられている最中に呼び出されるならば、ＡＰＩコールは、置き換えが無事に完了するまで、ＤＤＩＭ３０３によってインターセプトされる。置き換えが無事に完了すると、ＡＰＩコールは続行することが許可される。一実施形態では、ＡＰＩコールが阻止され、置き換えがプリセットタイムアウト値までに完了しないならば、エラーがアプリケーションへ返されることを保証するため、タイムアウト機構が設けられる。
【００７１】
[00097]置き換えが不成功であるならば、ＫＤＤＭ３０３は元のデバイスドライバを復元するか、又は、完全に削除することができる。後者の場合、適切なエラーメッセージがアプリケーションへ返される。
【００７２】
デバイスドライバが置き換え中に呼び出されるならば、ＡＰＩコールはＤＤＩＭ３０３によってインターセプトされ、適切なエラーメッセージがアプリケーションへ返される。
例示的な携帯装置
[00098]図１０は、携帯電話の一実施形態のブロック図である。
【００７３】
[00099]図１０を参照すると、携帯電話１０１０は、アンテナ１０１１、無線周波数トランシーバ（ＲＦユニット）１０１２、モデム１０１３、信号処理ユニット１０１４、制御ユニット１０１５、外部インターフェイスユニット（外部Ｉ／Ｆ）１０１６、スピーカー（ＳＰ）１０１７、マイクロホン（ＭＩＣ）１０１８、表示ユニット１０１９、操作ユニット１０２０、及び、メモリ１０２１を含む。
【００７４】
[000100]外部端末１０３０は、外部インターフェイス（外部Ｉ／Ｆ）１０３１、ＣＰＵ（中央演算処理装置）１０３２、表示ユニット１０３３、キーボード１０３４、メモリ１０３５、ハードディスク１０３６、及び、ＣＤ−ＲＯＭドライブ１０３７を含む。
【００７５】
[000101]ＣＰＵ１０３２は、携帯電話１０１０のメモリ（例えば、メモリ１０２１、メモリ１０３５、及び、ハードディスク１０３６）と共に、上記の動作を実行するため協働する。
例示的なコンピュータシステム
[000102]図１１は、本明細書に記載された１つ以上の動作を実行する例示的なコンピュータシステムのブロック図である。図１１を参照すると、コンピュータシステム１１００は、例示的なクライアント又はサーバコンピュータシステムを備える。コンピュータシステム１１００は、情報を通信する通信メカニズム又はバス１１１１と、バスに接続され、情報を処理するプロセッサ１１１２とを備える。プロセッサ１１１２は、例えば、Ｐｅｎｔｉｕｍ（商標）、ＰｏｗｅｒＰＣ（商標）、Ａｌｐｈａ（商標）などのマイクロプロセッサを含むが、マイクロプロセッサに限定されない。
【００７６】
[000103]システム１１００は、バス１１１１に接続され、情報及びプロセッサ１１１２によって実行されるべき命令を記憶するランダムアクセスメモリ（ＲＡＭ）、又は、その他の動的記憶装置１１０４（メインメモリと呼ばれる）を備える。メインメモリ１１０４は、プロセッサ１１１２による命令の実行中に一時的変数又はその他の中間情報を記憶するためにも使用される。
【００７７】
[000104]コンピュータシステム１１０は、バス１１１１に接続され、静的情報及びプロセッサ１１１２の命令を記憶する読み出し専用メモリ（ＲＯＭ）、及び／又は、その他の静的記憶装置１１０６と、磁気ディスク又は光ディスク及びその対応するディスクドライブのようなデータ記憶装置１１０７とをさらに備える。データ記憶装置１１０７は、バス１１１１に接続され、情報及び命令を記憶する。
【００７８】
[000105]コンピュータシステム１１００は、バス１１１１に接続され、情報をコンピュータユーザに表示する陰極線管（ＣＲＴ）又は液晶ディスプレイ（ＬＣＤ）のようなディスプレイ装置１１２１にさらに接続される。英数字キー及びその他のキーを含む英数字入力装置１１２２は、バス１１１１にさらに接続され、情報及びコマンド選択をプロセッサ１１１２へ通信する。付加的なユーザ入力装置は、バス１１１１に接続され、方向情報及びコマンド選択をプロセッサ１１１２へ通信し、ディスプレイ１１２１上のカーソル移動を制御するマウス、トラックボール、トラックパッド、スタイラス、又は、カーソル方向キーのようなカーソルコントロール１１２３である。
【００７９】
[000106]バス１１１１に接続される別の装置は、命令、データ、又は、その他の情報を紙、フィルム、又は、同様のタイプの媒体のような媒体上に印刷するため使用されるハードコピー装置１１２４である。さらに、スピーカー及び／又はマイクロホンのような音声記録及び再生装置が、場合によってバス１１１１に接続され、コンピュータシステム１１００とのオーディオインターフェイスをとる。バス１１１１に接続される別の装置は、電話機又はハンドヘルド型の手のひらサイズ装置に通信するための有線／無線通信機能１１２５である。
【００８０】
[000107]システム１１００のいずれか又はすべてのコンポーネント、及び、関連したハードウェアが本発明で使用されることに着眼すべきである。しかし、コンピュータシステムのその他の構成が一部又は全部の装置を含むことが理解される。
【００８１】
[000108]本発明の多数の代替物及び変形物が上記の説明を読んだ後に当業者に明白であることには疑いもないが、例示のため示され明らかにされた特定の実施形態は限定的に考慮されることが全く意図されていないことが理解されるべきである。したがって、様々な実施形態の詳細への言及は、発明に不可欠であると考えられる特徴だけをそれ自体で表現する請求項の範囲を限定することが意図されていない。
【図面の簡単な説明】
【００８２】
【図１】従来型のオペレーティングシステム（ＯＳ）を図示する。
【図２Ａ】本発明のアーキテクチャのシステムにおける機能的なコンポーネントのブロック図である。
【図２Ｂ】デバイスドライバを置き換えるプロセスの一実施形態のフローチャートである。
【図３】全体的なシステムアーキテクチャの一実施形態のより詳細なブロック図である。
【図４】デバイスドライバ呼び出しマネージャによって実行されるプロセスの一実施形態を図示する。
【図５】デバイスドライバ呼び出しプロトコルの一実施形態を図示する。
【図６】デバイスドライバ組み込みプロトコルの一実施形態を図示する。
【図７Ａ】デバイスドライバ置き換えプロトコルの一実施形態を図示する。
【図７Ｂ】デバイスドライバ削除プロトコルの一実施形態を図示する。
【図８Ａ】置き換え準備プロセスの一実施形態のフローチャートである。
【図８Ｂ】デバイスドライバ置き換えプロセスの一実施形態のフローチャートである。
【図８Ｃ】デバイスドライバ置き換えプロトコルの一実施形態を図示する。
【図９】デバイスドライバ検査プロトコルの一実施形態を図示する。
【図１０】携帯装置の一実施形態のブロック図である。
【図１１】コンピュータシステムの一実施形態のブロック図である。
【図１】
2008511055.tif 000003
【図２Ａ】
2008511055.tif 000004
【図２Ｂ】
2008511055.tif 000005
【図３】
2008511055.tif 000006
【図４】
2008511055.tif 000007
【図５】
2008511055.tif 000008
【図６】
2008511055.tif 000009
【図７Ａ】
2008511055.tif 000010
【図７Ｂ】
2008511055.tif 000011
【図８Ａ】
2008511055.tif 000012
【図８Ｂ】
2008511055.tif 000013
【図８Ｃ】
2008511055.tif 000014
【図９】
2008511055.tif 000015
【図１０】
2008511055.tif 000016
【図１１】
2008511055.tif 000017
【手続補正書】
【提出日】平成19年2月21日(2007.2.21)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
デバイスドライバをオペレーティングシステムに追加する要求を受信するステップと、
ユーザアプリケーション及びオペレーティングシステムプロセスが実行されている間に前記デバイスドライバを前記オペレーティングシステムに動的に追加するステップと、
を含む方法。
【請求項２】
前記デバイスドライバを追加する前記要求は、前記デバイスドライバの第１バージョンを前記デバイスドライバの第２バージョンと置き換える要求である、請求項１に記載の方法。
【請求項３】
前記デバイスドライバが実行中のユーザアプリケーション及びオペレーティングシステムプロセスに影響を与えることなく動的に追加される、請求項１に記載の方法。
【請求項４】
前記デバイスドライバの前記オペレーティングシステムへの動的な追加が前記オペレーティングシステムの安全性を保証する間に行われる、請求項１に記載の方法。
【請求項５】
前記デバイスドライバが置き換えられている最中であるならば、前記デバイスドライバの状態を記憶するステップと、
置き換え後に前記デバイスドライバの前記状態を復元するステップと、
をさらに含む、請求項１に記載の方法。
【請求項６】
ユーザアプリケーションコールをインターセプトするステップと、
前記デバイスドライバを前記ユーザアプリケーションコールにとって適切なものであると認定するために、ステートストレージをチェックするステップと、
前記ユーザアプリケーションコールを取り扱うため前記デバイスドライバを呼び出すステップと、
をさらに含む、請求項１に記載の方法。
【請求項７】
前記デバイスドライバが置き換えられている最中であるかどうかを決定するステップと、
前記デバイスドライバが置き換えられている最中であるならば、前記デバイスドライバの置き換えが完了するまで前記ユーザアプリケーションコールを保持するステップと、
をさらに含む、請求項６に記載の方法。
【請求項８】
前記デバイスドライバを呼び出すステップが前記デバイスドライバ上のプロセスメソッドをコールする工程を含む、請求項６に記載の方法。
【請求項９】
前記デバイスドライバを前記オペレーティングシステムカーネルに登録するステップと、
入力されるユーザアプリケーションコールを前記デバイスドライバへルーティングすることを可能にするために、前記デバイスドライバを前記ステートストレージに登録するステップと、
をさらに含む、請求項１に記載の方法。
【請求項１０】
前記デバイスドライバの前記オペレーティングシステムカーネルへの登録がスタブインターセプトを使用して実行される、請求項９に記載の方法。
【請求項１１】
デバイスドライバへのアプリケーションプログラミングインターフェイス（ＡＰＩ）コールをインターセプトするステップをさらに含む、請求項１に記載の方法。
【請求項１２】
デバイスドライバへのユーザアプリケーションコールをインターセプトするステップと、
前記デバイスドライバを前記ユーザアプリケーションコールにとって適切なものであると認定するために、ステートストレージをチェックするステップと、
前記デバイスドライバを呼び出すステップと、
を含む方法。
【請求項１３】
ユーザアプリケーション及びオペレーティングシステムプロセスが実行されている間に、前記デバイスドライバをオペレーティングシステムに動的に追加するステップをさらに含む、請求項１２に記載の方法。
【請求項１４】
前記オペレーティングシステムの安全性を保証する間に、実行中のユーザアプリケーション及びオペレーティングシステムプロセスに影響を与えることなく前記デバイスドライバが動的に追加される、請求項１３に記載の方法。
【請求項１５】
前記デバイスドライバが置き換えられている最中であるかどうかを決定するステップと、
前記デバイスドライバが置き換えられている最中であるならば、前記デバイスドライバの置き換えが完了するまで前記ユーザアプリケーションコールを保持するステップと、
をさらに含む、請求項１２に記載の方法。
【請求項１６】
デバイスドライバへのユーザアプリケーションコールをインターセプトするステップと、
前記デバイスドライバを前記ユーザアプリケーションコールにとって適切なものであると認定するために、ステートストレージをチェックするステップと、
前記デバイスドライバが置き換えられている最中であるかどうかを決定するステップと、
前記デバイスドライバが置き換えられている最中であるならば、前記デバイスドライバの置き換えが完了するまで前記ユーザアプリケーションコールを保持するステップと、
前記デバイスドライバを呼び出すステップと、
を含む方法。
【請求項１７】
システムによって実行されるとき、前記システムに、
デバイスドライバをオペレーティングシステムに追加する要求を受信するステップと、
ユーザアプリケーション及びオペレーティングシステムプロセスが実行されている間に前記デバイスドライバを前記オペレーティングシステムに動的に追加するステップと、
を含む方法を実行させる命令を記憶する１又は複数の記録可能な媒体を有する製品。
【請求項１８】
前記デバイスドライバを追加する前記要求が前記デバイスドライバの第１バージョンを前記デバイスドライバの第２バージョンと置き換える要求である、請求項１７に記載の製品。
【請求項１９】
前記デバイスドライバが実行中のユーザアプリケーション及びオペレーティングシステムプロセスに影響を与えることなく動的に追加される、請求項１７に記載の製品。
【請求項２０】
前記デバイスドライバの前記オペレーティングシステムへの動的な追加が前記オペレーティングシステムの安全性を保証する間に行われる、請求項１７に記載の製品。
【請求項２１】
前記方法が、
前記デバイスドライバが置き換えられている最中であるならば、前記デバイスドライバの状態を記憶するステップと、
置き換え後に前記デバイスドライバの前記状態を復元するステップと、
をさらに含む、請求項１７に記載の製品。
【請求項２２】
前記方法が、
ユーザアプリケーションコールをインターセプトするステップと、
前記デバイスドライバを前記ユーザアプリケーションコールにとって適切なものであると認定するために、ステートストレージをチェックするステップと、
前記ユーザアプリケーションコールを取り扱うため前記デバイスドライバを呼び出すステップと、
をさらに含む、請求項１７に記載の製品。
【請求項２３】
前記方法が、
前記デバイスドライバが置き換えられている最中であるかどうかを決定するステップと、
前記デバイスドライバが置き換えられている最中であるならば、前記デバイスドライバの置き換えが完了するまで前記ユーザアプリケーションコールを保持するステップと、
をさらに含む、請求項２２に記載の製品。
【請求項２４】
前記デバイスドライバを呼び出すステップが前記デバイスドライバ上のプロセスメソッドをコールする工程を含む、請求項２２に記載の製品。
【請求項２５】
前記方法が、
前記デバイスドライバを前記オペレーティングシステムカーネルに登録するステップと、
入力されるユーザアプリケーションコールを前記デバイスドライバへルーティングすることを可能にするために、前記デバイスドライバを前記ステートストレージに登録するステップと、
をさらに含む、請求項１７に記載の製品。
【請求項２６】
前記デバイスドライバの前記オペレーティングシステムカーネルへの登録がスタブインターセプトを使用して実行される、請求項２５に記載の製品。
【請求項２７】
システムによって実行されるとき、前記システムに、
デバイスドライバへのユーザアプリケーションコールをインターセプトするステップと、
前記デバイスドライバを前記ユーザアプリケーションコールにとって適切なものであると認定するために、ステートストレージをチェックするステップと、
前記デバイスドライバを呼び出すステップと、
を含む方法を実行させる命令を記憶する１又は複数の記録可能な媒体を有する製品。
【請求項２８】
ユーザアプリケーション及びオペレーティングシステムプロセスが実行されている間に、前記デバイスドライバをオペレーティングシステムに動的に追加するステップをさらに含む、請求項２７に記載の製品。
【請求項２９】
前記オペレーティングシステムの安全性を保証する間に、前記デバイスドライバが実行中のユーザアプリケーション及びオペレーティングシステムプロセスに影響を与えることなく動的に追加される、請求項２８に記載の製品。
【請求項３０】
前記デバイスドライバが置き換えられている最中であるかどうかを決定するステップと、
前記デバイスドライバが置き換えられている最中であるならば、前記デバイスドライバの置き換えが完了するまで前記ユーザアプリケーションコールを保持するステップと、
をさらに含む、請求項２７に記載の製品。
【請求項３１】
システムによって実行されるとき、前記システムに、
デバイスドライバへのユーザアプリケーションコールをインターセプトするステップと、
前記デバイスドライバを前記ユーザアプリケーションコールにとって適切なものであると認定するために、ステートストレージをチェックするステップと、
前記デバイスドライバが置き換えられている最中であるかどうかを決定するステップと、
前記デバイスドライバが置き換えられている最中であるならば、前記デバイスドライバの置き換えが完了するまで前記ユーザアプリケーションコールを保持するステップと、
前記デバイスドライバを呼び出すステップと、
を含む方法を実行させる命令を記憶する１又は複数の記録可能な媒体を有する製品。
【請求項３２】
デバイスドライバをオペレーティングシステムに追加する要求を受信する手段と、
ユーザアプリケーション及びオペレーティングシステムプロセスが実行されている間に前記デバイスドライバを前記オペレーティングシステムに動的に追加する手段と、
を備える装置。
【請求項３３】
デバイスドライバへのユーザアプリケーションコールをインターセプトする手段と、
前記デバイスドライバを前記ユーザアプリケーションコールにとって適切なものであると認定するために、ステートストレージをチェックする手段と、
前記デバイスドライバが置き換えられている最中であるかどうかを決定する手段と、
前記デバイスドライバが置き換えられている最中であるならば、前記デバイスドライバの置き換えが完了するまで前記ユーザアプリケーションコールを保持する手段と、
前記デバイスドライバを呼び出す手段と、
を備える装置。
【請求項３４】
オペレーティングシステムカーネルと協働して使用されるアーキテクチャであって、
デバイスドライバをオペレーティングシステムに追加する要求を受信するデバイスドライバ呼び出しマネージャと、
ユーザアプリケーション及びオペレーティングシステムプロセスが実行されている間に前記デバイスドライバを前記オペレーティングシステムに動的に追加するカーネルデバイスドライバマネージャと、
を備えるアーキテクチャ。
【請求項３５】
前記デバイスドライバ呼び出しマネージャが前記デバイスドライバへの１又は複数のアプリケーション要求を影響なしにインターセプトし宛先変更する、請求項３４に記載のアーキテクチャ。
【請求項３６】
前記デバイスドライバ呼び出しマネージャは、アプリケーションが前記デバイスドライバ上のインターフェイスメソッドをコールするときにスタブがコールされるように、前記オペレーティングシステムカーネルと共にスタブメソッドを使用して、アプリケーション要求を影響なしにインターセプトし宛先変更する、
請求項３４に記載のアーキテクチャ。
【請求項３７】
前記カーネルデバイスドライバマネージャがデバイスドライバ特定情報を記憶コンポーネントに格納する、請求項３４に記載のアーキテクチャ。
【請求項３８】
前記カーネルデバイスドライバマネージャが前記デバイスドライバの１又は複数のスタブメソッドを前記オペレーティングシステムカーネルに登録する、請求項３４に記載のアーキテクチャ。
【請求項３９】
前記カーネルデバイスドライバマネージャが前のデバイスドライバを置き換えるために前記デバイスドライバを前記オペレーティングシステムに追加する、請求項３４に記載のアーキテクチャ。
【請求項４０】
前記カーネルデバイスドライバマネージャが、前記デバイスドライバを前記オペレーティングシステムに動的に追加する前にすべての現在の要求がフラッシュされることを保証する間に、前記前のデバイスドライバの状態を保存し、前記デバイスドライバのさらなる呼び出しを阻止する、請求項３９に記載のアーキテクチャ。
【請求項４１】
現在のデバイスドライバマネージャが、記憶コンポーネントからデバイスドライバ特定情報を削除し、前記オペレーティングシステムカーネルから前記デバイスドライバの１又は複数のスタブメソッドの登録を解除することにより、前記デバイスドライバを削除する、請求項３９に記載のアーキテクチャ。
【請求項４２】
前記デバイスドライバに関して実行する動作を示すコマンドを受信するユーザデバイスドライバマネージャをさらに備える、請求項３４に記載のアーキテクチャ。
【請求項４３】
前記ユーザデバイスドライバマネージャが外部エンティティによって呼び出される、請求項３４に記載のアーキテクチャ。
【請求項４４】
前記外部エンティティがコマンドラインインターフェイスである、請求項４３に記載のアーキテクチャ。
【請求項４５】
前記外部エンティティが無線経由のマネージメントツールである、請求項４３に記載のアーキテクチャ。
【請求項４６】
前記ユーザデバイスドライバマネージャがオープンメソッドコールを使用して前記デバイスドライバをオープンする、請求項４２に記載のアーキテクチャ。
【請求項４７】
前記ユーザデバイスドライバマネージャが、前記デバイスドライバ呼び出しマネージャに前記カーネルデバイスドライバマネージャをコールさせるため、前記デバイスドライバ呼び出しマネージャ上の入出力制御コールを実行する、請求項４２に記載のアーキテクチャ。
【請求項４８】
デバイスドライバ呼び出しマネージャがストレージ中の前記カーネルデバイスドライバマネージャをルックアップし、前記カーネルデバイスドライバマネージャに従ってプロセスメソッドを呼び出す、請求項４７に記載のアーキテクチャ。
【請求項４９】
前記プロセスメソッドが前記カーネルデバイスドライバマネージャにコールするためのメソッド名をリゾルブさせる、請求項４８に記載のアーキテクチャ。
【請求項５０】
コールするための前記メソッド名が前記デバイスドライバを置き換えるためのメソッドとしてリゾルブされる、請求項４９に記載のアーキテクチャ。
【請求項５１】
前記メソッドが、前記オペレーティングシステムが前記デバイスドライバを置き換えるために安全な状態であることを保証する、請求項５０に記載のアーキテクチャ。
【請求項５２】
前記ユーザデバイスドライバマネージャが前記デバイスドライバ呼び出しマネージャ上のコールを呼び出すことにより既存のデバイスドライバを置き換えるため前記デバイスドライバを前記システムに挿入する、請求項５１に記載のアーキテクチャ。
【請求項５３】
前記コールは、置き換えられたデバイスドライバメソッドをカーネルデバイスドライバマネージャによって呼び出されるようにする、前記デバイスドライバ呼び出しマネージャ上の入出力制御コールである、請求項５２に記載のアーキテクチャ。
【請求項５４】
オペレーティングシステムカーネルと協働して使用されるアーキテクチャであって、
１又は複数のユーザアプリケーションからのデバイスドライバコールをインターセプトし、
各ユーザアプリケーションコールにとって適切であるデバイスドライバを認定するために、ステートストレージをチェックし、
前記デバイスドライバが置き換えられている最中であるならば、前記適切なデバイスドライバが置き換えられるまでユーザアプリケーションコールを保持し、
前記適切なデバイスドライバへのプロセスコールを前記デバイスドライバを呼び出すために生成するデバイスドライバ呼び出しマネージャと、
前記デバイスドライバ呼び出しマネージャからの前記プロセスコールに応じて、前記オペレーティングシステムカーネルに対して、１又は複数のデバイスドライバを組み込み、削除し、置き換えるカーネルデバイスドライバマネージャと、
前記デバイスドライバ呼び出しマネージャからの前記プロセスコールに応じて、ユーザアプリケーションコールを実行する１又は複数のデバイスドライバと、
を備えるアーキテクチャ。
【請求項５５】
前記デバイスドライバ呼び出しマネージャがデバイスドライバとして実施される、請求項５４に記載のアーキテクチャ。
【請求項５６】
前記デバイスドライバマネージャがデバイスドライバとして実施される、請求項５４に記載のアーキテクチャ。
【請求項５７】
前記デバイスドライバ呼び出しマネージャ及びカーネルデバイスドライバマネージャがデバイスドライバとして実施される、請求項５４に記載のアーキテクチャ。
【請求項５８】
前記デバイスドライバに関して実行する動作を指し示すコマンドを受信するユーザデバイスドライバマネージャをさらに備える、請求項５４に記載のシステムアーキテクチャ。
【請求項５９】
前記コマンドが、前記デバイスドライバの組み込みと、前記オペレーティングシステムカーネルからの前記デバイスドライバの削除と、前記デバイスドライバの置き換えと、前記オペレーティングシステムカーネルに組み込まれた前記デバイスドライバの状態の検査のうちの１又は複数を備える、請求項５８に記載のソフトウェアアーキテクチャ。
【請求項６０】
オペレーティングシステムカーネルと共に使用されるシステムであって、
デバイスドライバインターフェイスのための前記オペレーティングシステムカーネルに登録されたスタブメソッドであって、前記デバイスドライバインターフェイス上のインターフェイスメソッドがコールされるときにコールされるスタブメソッドを用いて、アプリケーション要求を影響なしにインターセプトし宛先変更するデバイスドライバ呼び出しマネージャと、
前記デバイスドライバのスタブメソッドを前記オペレーティングシステムカーネルに登録することにより前記デバイスドライバを登録し、前記オペレーティングシステムから別のデバイスドライバの関連したスタブメソッドの登録を解除することにより前記別のデバイスドライバを削除するカーネルデバイスドライバマネージャと、
を備えるシステム。
【国際調査報告】
2008511055.tif 000018
2008511055.tif 000019
2008511055.tif 000020