(57)【要約】【課題】新しい機能を追加後も、古い機能を使用中のアプリケーションプログラムに機能追加による擾乱を与えない。【解決手段】拡張ハンドラ組み込み手段１１は、アドオンプログラムマネージャ３０からのアドオン要求に応じて拡張デバイスドライバ２０を拡張システムコールハンドラ２１としてデバイスドライバコード領域１５にロードし、デバイスドライバ１０の一部として動作可能となるように拡張システムコールハンドラ２１のシンボルのアドレス情報の解決を行う。ハンドラポインタテーブル更新追加手段１２は、拡張システムコールハンドラ２１をポイントするようにハンドラポインタテーブル１６を更新して最新のハンドラポインタテーブル１６として追加する。システムコールディスパッチ手段１３は、プライベートデータ３内のハンドラポインタテーブル１６を参照してシステムコールをディスパッチする。【選択図】  図１
2004246461.tif 000002
【特許請求の範囲】
【請求項１】
デバイスドライバへ追加される機能である拡張システムコールハンドラを有している拡張デバイスドライバと、
デバイスドライバに対して前記拡張デバイスドライバのアドオン要求を行うアドオンプログラムマネージャと、
前記アドオンプログラムマネージャからのアドオン要求に応じて前記拡張デバイスドライバを前記拡張システムコールハンドラとしてデバイスドライバにロードし、デバイスドライバの一部として動作可能となるように前記拡張システムコールハンドラのシンボルのアドレス情報の解決を行う拡張ハンドラ組み込み手段と、
前記拡張ハンドラ組み込み手段による前記拡張システムコールハンドラのロード後に前記拡張システムコールハンドラをポイントするようにハンドラポインタテーブルを更新して最新のハンドラポインタテーブルとして追加するハンドラポインタテーブル更新追加手段と、
ユーザプログラムからのＯｐｅｎシステムコール時にデバイスドライバによって作成されるプライベートデータにより特定されるハンドラポインタテーブルを参照してユーザプログラム毎のシステムコールをディスパッチするシステムコールディスパッチ手段と
を有することを特徴とするデバイスドライバにおける動的機能追加方式。
【請求項２】
前記デバイスドライバが、前記ハンドラポインタテーブルを前記プライベートデータ内にコピーすることを特徴とする請求項１記載のデバイスドライバにおける動的機能追加方式。
【請求項３】
前記デバイスドライバが、前記ハンドラポインタテーブルへの参照を前記プライベートデータ内に保持させることを特徴とする請求項１記載のデバイスドライバにおける動的機能追加方式。
【請求項４】
アドオンプログラムマネージャからのアドオン要求に応じて拡張デバイスドライバを拡張システムコールハンドラとしてデバイスドライバにロードし、デバイスドライバの一部として動作可能となるように拡張システムコールハンドラのシンボルのアドレス情報の解決を行う拡張ハンドラ組み込み手段と、
前記拡張ハンドラ組み込み手段による前記拡張システムコールハンドラのロード後に前記拡張システムコールハンドラをポイントするようにハンドラポインタテーブルを更新して最新のハンドラポインタテーブルとして追加するハンドラポインタテーブル更新追加手段と、
ユーザプログラムからのＯｐｅｎシステムコール時にデバイスドライバによって作成されるプライベートデータにより特定されるハンドラポインタテーブルを参照してユーザプログラム毎のシステムコールをディスパッチするシステムコールディスパッチ手段と
を有することを特徴とするデバイスドライバ。
【請求項５】
前記プライベートデータ内にハンドラポインタテーブルをコピーすることを特徴とする請求項４記載のデバイスドライバ。
【請求項６】
前記プライベートデータ内にハンドラポインタテーブルへの参照を保持させることを特徴とする請求項４記載のデバイスドライバ。
【請求項７】
コンピュータを、アドオンプログラムマネージャからのアドオン要求に応じて拡張デバイスドライバを拡張システムコールハンドラとしてデバイスドライバにロードし、デバイスドライバの一部として動作可能となるように拡張システムコールハンドラのシンボルのアドレス情報の解決を行う拡張ハンドラ組み込み手段，前記拡張ハンドラ組み込み手段による前記拡張システムコールハンドラのロード後に前記拡張システムコールハンドラをポイントするようにハンドラポインタテーブルを更新して最新のハンドラポインタテーブルとして追加するハンドラポインタテーブル更新追加手段，およびユーザプログラムからのＯｐｅｎシステムコール時にデバイスドライバによって作成されるプライベートデータにより特定されるハンドラポインタテーブルを参照してユーザプログラム毎のシステムコールをディスパッチするシステムコールディスパッチ手段として機能させるためのプログラム。
【請求項８】
前記プライベートデータ内にハンドラポインタテーブルをコピーすることを特徴とする請求項７記載のプログラム。
【請求項９】
前記プライベートデータ内にハンドラポインタテーブルへの参照を保持させることを特徴とする請求項７記載のプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はデバイスドライバにおける動的機能追加方式に関し、特にデバイスドライバ内に機能を動的に追加することができるデバイスドライバおける動的機能追加方式に関する。
【０００２】
【従来の技術】
機能を追加する従来技術として、システムイベント処理機構が公知であるが、この機構は、デバイスドライバの機能を拡張するものではなく、カーネルの割り込みディスパッチテーブルを操作することでイベントを追加するものであり、ある意味で擬似的なデバイスドライバそのものを追加するものにすぎなかった（例えば、特許文献１参照）。
【０００３】
また、同様の従来技術として、ノンストップ拡張ドライバ装置も公知であり、この装置は、デバイスドライバ内に新たに機能を追加するものであるが、ソースレベルでの機能を登録してエミュレーションを行うものであった（例えば、特許文献２参照）。
【０００４】
さらに、類似する従来技術として、ドライバ機能の動的管理方式が公知であり、この方式は、バイナリコードでの機能の動的な登録を可能にするものであるが、アプリケーションプログラム側に新機能追加手段，情報獲得手段および情報編集手段を設ける必要があり、アプリケーションプログラムの改変が必要であるという問題点があった（例えば、特許文献３参照）。
【０００５】
【特許文献１】
特開平０８−２７２７２７号公報（第２−３頁、図１）
【特許文献２】
特開２００１−００５７６６号公報（第３−５頁、図１）
【特許文献３】
特開平１１―２４９８７３号公報（第４−５頁、図１）
【０００６】
【発明が解決しようとする課題】
上述した従来技術では、デバイスドライバに機能を追加するためには、デバイスドライバを停止しなければならないという問題点があった。その理由は、デバイスドライバそのものを置き換える必要があったためである。
【０００７】
また、デバイスドライバにバイナリコードでの機能の動的な登録を可能にするためにアプリケーションプログラムの改変が必要であるという問題点があった。その理由は、アプリケーションプログラム側で新たな機能を編集してデバイスドライバに組み込む必要があったからである。
【０００８】
さらに、新しい機能を追加した場合に、古い機能を使用中のアプリケーションプログラムが機能追加による擾乱を受けるおそれがあるという問題点があった。その理由は、デバイスドライバそのものを置き換えていたからである。
【０００９】
本発明の目的は、デバイスドライバを停止させることなしに、デバイスドライバに動的に機能を追加することを可能とするデバイスドライバにおける動的機能追加方式を提供することにある。
【００１０】
また、本発明の他の目的は、アプリケーションプログラムの改変なしに、デバイスドライバに動的に機能を追加することを可能とするデバイスドライバにおける動的機能追加方式を提供することにある。
【００１１】
さらに、本発明の別の目的は、新しい機能を追加後にも、古い機能を使用中のアプリケーションプログラムに機能追加による擾乱を与えることのないデバイスドライバにおける動的機能追加方式を提供することにある。
【００１２】
【課題を解決するための手段】
本発明のデバイスドライバにおける動的機能追加方式は、デバイスドライバへ追加される機能である拡張システムコールハンドラを有している拡張デバイスドライバと、デバイスドライバに対して前記拡張デバイスドライバのアドオン要求を行うアドオンプログラムマネージャと、前記アドオンプログラムマネージャからのアドオン要求に応じて前記拡張デバイスドライバを前記拡張システムコールハンドラとしてデバイスドライバにロードし、デバイスドライバの一部として動作可能となるように前記拡張システムコールハンドラのシンボルのアドレス情報の解決を行う拡張ハンドラ組み込み手段と、前記拡張ハンドラ組み込み手段による前記拡張システムコールハンドラのロード後に前記拡張システムコールハンドラをポイントするようにハンドラポインタテーブルを更新して最新のハンドラポインタテーブルとして追加するハンドラポインタテーブル更新追加手段と、ユーザプログラムからのＯｐｅｎシステムコール時にデバイスドライバによって作成されるプライベートデータにより特定されるハンドラポインタテーブルを参照してユーザプログラム毎のシステムコールをディスパッチするシステムコールディスパッチ手段とを有することを特徴とする。
【００１３】
また、本発明のデバイスドライバにおける動的機能追加方式は、前記デバイスドライバが、前記ハンドラポインタテーブルを前記プライベートデータ内にコピーすることを特徴とする。
【００１４】
さらに、本発明のデバイスドライバにおける動的機能追加方式は、前記デバイスドライバが、前記ハンドラポインタテーブルへの参照を前記プライベートデータ内に保持させることを特徴とする。
【００１５】
一方、本発明のデバイスドライバは、アドオンプログラムマネージャからのアドオン要求に応じて拡張デバイスドライバを拡張システムコールハンドラとしてデバイスドライバにロードし、デバイスドライバの一部として動作可能となるように拡張システムコールハンドラのシンボルのアドレス情報の解決を行う拡張ハンドラ組み込み手段と、前記拡張ハンドラ組み込み手段による前記拡張システムコールハンドラのロード後に前記拡張システムコールハンドラをポイントするようにハンドラポインタテーブルを更新して最新のハンドラポインタテーブルとして追加するハンドラポインタテーブル更新追加手段と、ユーザプログラムからのＯｐｅｎシステムコール時にデバイスドライバによって作成されるプライベートデータにより特定されるハンドラポインタテーブルを参照してユーザプログラム毎のシステムコールをディスパッチするシステムコールディスパッチ手段とを有することを特徴とする。
【００１６】
また、本発明のデバイスドライバは、前記プライベートデータ内にハンドラポインタテーブルをコピーすることを特徴とする。
【００１７】
さらに、本発明のデバイスドライバは、前記プライベートデータ内にハンドラポインタテーブルへの参照を保持させることを特徴とする。
【００１８】
他方、本発明のプログラムは、コンピュータを、アドオンプログラムマネージャからのアドオン要求に応じて拡張デバイスドライバを拡張システムコールハンドラとしてデバイスドライバにロードし、デバイスドライバの一部として動作可能となるように拡張システムコールハンドラのシンボルのアドレス情報の解決を行う拡張ハンドラ組み込み手段，前記拡張ハンドラ組み込み手段による前記拡張システムコールハンドラのロード後に前記拡張システムコールハンドラをポイントするようにハンドラポインタテーブルを更新して最新のハンドラポインタテーブルとして追加するハンドラポインタテーブル更新追加手段，およびユーザプログラムからのＯｐｅｎシステムコール時にデバイスドライバによって作成されるプライベートデータにより特定されるハンドラポインタテーブルを参照してユーザプログラム毎のシステムコールをディスパッチするシステムコールディスパッチ手段として機能させることを特徴とする。
【００１９】
また、本発明のプログラムは、前記プライベートデータ内にハンドラポインタテーブルをコピーすることを特徴とする。
【００２０】
さらに、本発明のプログラムは、前記プライベートデータ内にハンドラポインタテーブルへの参照を保持させることを特徴とする。
【００２１】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照して詳細に説明する。
【００２２】
図１を参照すると、本発明の第１の実施の形態に係るデバイスドライバにおける動的機能追加方式は、デバイスドライバ１０を搭載するオペレーティングシステム１と、拡張システムコールハンドラ２１を含む拡張デバイスドライバ２０と、デバイスドライバ１０の機能を動的に追加するアドオンプログラムマネージャ３０と、ユーザプログラム４０とから、その主要部が構成されている。
【００２３】
オペレーティングシステム１には、デバイスドライバ１０と、ユーザプログラム４０がデバイスドライバ１０の利用をオペレーティングシステム１に宣言することによってオペレーティングシステム１によって作成されるファイル構造体２と、デバイスドライバ１０によってユーザプログラム４０を識別するために作成されるプライベートデータ３とが含まれている。
【００２４】
拡張デバイスドライバ２０は、アドオンプログラムマネージャ３０からのアドオン要求に応じてデバイスドライバ１０へ追加される機能である拡張システムコールハンドラ２１を有している。
【００２５】
拡張システムコールハンドラ２１は、デバイスドライバ１０へ追加される機能そのものであり、デバイスドライバ１０によってデバイスドライバコード領域１５にロードされるプログラムコードである。拡張システムコールハンドラ２１は、システムコールディスパッチ手段１３によって呼び出される。
【００２６】
アドオンプログラムマネージャ３０は、オペレーティングシステム１によって提供される特権ユーザ権限において動作するアプリケーションプログラムであり、デバイスドライバ１０に対して拡張デバイスドライバ２０のアドオン要求を行う機能を有している。
【００２７】
ユーザプログラム４０は、デバイスドライバ１０を利用するアプリケーションプログラムであり、一般的なオペレーティングシステム１において提供されているＯｐｅｎシステムコール相当のオペレーティングシステムサービス（以下、単にＯｐｅｎシステムコールと記す）を呼び出すことで、デバイスドライバ１０の利用をオペレーティングシステム１に宣言する。ユーザプログラム１が、Ｏｐｅｎシステムコール等を介してデバイスドライバ１０の利用を宣言した際には、ユーザプログラム１用にデバイスドライバ１０によって確保されるプライベートデータ３内にハンドラポインタテーブル１６がコピーされる。
【００２８】
ファイル構造体２は、オペレーティングシステム１に依存するデータ構造であり、ユーザプログラム４０を識別および制御するために、ユーザプログラム４０からのＯｐｅｎシステムコール時にオペレーティングシステム１によって作成される。
【００２９】
プライベートデータ３は、デバイスドライバ１０に依存するデータ構造であり、ユーザプログラム４０を識別および制御するために、一般的にユーザプログラム４０からのＯｐｅｎシステムコール時にデバイスドライバ１０によって作成され、Ｃｌｏｓｅシステムコール時にデバイスドライバ１０によって消去される。また、プライベートデータ３には、Ｏｐｅｎシステムコール時にデバイスドライバ１０によってハンドラポインタテーブル１６がコピーされる。
【００３０】
デバイスドライバ１０は、オペレーティングシステム１の一部としてユーザプログラム４０によって利用されるプログラムであり、ユーザプログラム４０に対する各種のサービスを提供する。デバイスドライバ１０は、拡張ハンドラ組み込み手段１１と、ハンドラポインタテーブル更新追加手段１２と、システムコールディスパッチ手段１３と、ハンドラポインタテーブル１６を配置するデバイスドライバデータ領域１４と、システムコールハンドラ１７を配置するデバイスドライバコード領域１５とを有している。
【００３１】
ハンドラポインタテーブル１６は、デバイスドライバ１０のデバイスドライバデータ領域１４に配置されるテーブルであり、デバイスドライバ１０の初期化時に確保される。ハンドラポインタテーブル１６は、デバイスドライバ１０が提供するサービスである各種のシステムコールハンドラ１７へのポインタの集合である（図２および図３参照）。ハンドラポインタテーブル１６は、ユーザプログラム４０毎のデバイスドライバ１０の振る舞いを制御するためのディスパッチテーブルであり、ユーザプログラム４０によるシステムコールに応じて、オペレーティングシステム１より呼び出されるシステムコール毎の機能へのポインタセットを有しており、ユーザプログラム４０に対して提供される機能レベル毎に、デバイスドライバ１０によって管理される。デバイスドライバ１０は、ハンドラポインタテーブル１６の内容に従ってユーザプログラム４０に提供する機能を決定する。
【００３２】
システムコールハンドラ１７は、デバイスドライバ１０におけるデフォルトの振る舞いを行うプログラムコードそのものであり、ハンドラポインタテーブル１６よりポイントされる。デバイスドライバ１０は、システムコールハンドラ１７によって各種のサービスを実行する。
【００３３】
拡張ハンドラ組み込み手段１１は、アドオンプログラムマネージャ３０からのアドオン要求に応じて、拡張デバイスドライバ２０を拡張システムコールハンドラ２１としてデバイスドライバコード領域１５にロードし、デバイスドライバ１０の一部として動作可能となるように拡張システムコールハンドラ２１の関数や変数等のシンボルのアドレス情報の解決を行う機能を有している。
【００３４】
ハンドラポインタテーブル更新追加手段１２は、アドオンプログラムマネージャ３０からのアドオン要求に応じて、ハンドラポインタテーブル１６を更新して最新のハンドラポインタテーブル１６として追加するとともに、ハンドラポインタテーブル１６の集合を管理する手段である。
【００３５】
システムコールディスパッチ手段１３は、プライベートデータ３内のハンドラポインタテーブル１６を参照し、ユーザプログラム４０毎の振る舞いを制御するシステムコールをディスパッチする機能を有している。
【００３６】
図２は、ハンドラポインタテーブル１６とシステムコールハンドラ１７との間のリンクの初期状態を例示する図である。
【００３７】
図３は、ハンドラポインタテーブル１６とシステムコールハンドラ１７との間のリンクのハンドラ変更後の状態を例示する図である。
【００３８】
図４を参照すると、デバイスドライバ１０のシステムコール受け付け時の処理は、Ｏｐｅｎシステムコール受け付けステップＳ１０１と、ハンドラポインタテーブルコピーステップＳ１０２とからなる。
【００３９】
図５を参照すると、デバイスドライバ１０のアドオン要求受け付け時の処理は、アドオン要求受け付けステップＳ２０１と、拡張デバイスドライバロードステップＳ２０２と、シンボルアドレス情報解決ステップＳ２０３と、ハンドラポインタテーブル更新追加ステップＳ２０４とからなる。
【００４０】
次に、このように構成された第１の実施の形態に係るデバイスドライバにおける動的機能追加方式の動作について説明する。
【００４１】
デバイスドライバ１０は、一般的にオペレーティングシステム１の起動時にメモリにロードされ、動作可能な状態になっている。デバイスドライバ１０は、初期化時に、デバイスドライバコード領域１５上の各システムコールハンドラ１７へのポインタをハンドラポインタテーブル１６に設定する（図２参照）。初期化時にポイントされているシステムコールハンドラ１７は、デバイスドライバ１０のコンパイル時に作成されていたプログラムコードであり、デフォルトのハンドラとして動作する。デバイスドライバ１０の初期化時には、ただ１つのハンドラポインタテーブル１６が有効な状態となっている。
【００４２】
このようなデフォルトの状態において、ユーザプログラム４０よりＯｐｅｎシステムコールが発行されると、デバイスドライバ１０は、Ｏｐｅｎシステムコールを受け付け（ステップＳ１０１）、Ｏｐｅｎシステムコール時にオペレーティングシステム１によって作成されたプライベートデータ３に、デバイスドライバデータ領域１４上に配置されたデフォルトの振る舞いを行うように初期化された最新のハンドラポインタテーブル１６をコピーする（ステップＳ１０２）。これ以降、ユーザプログラム４０によるデバイスドライバ１０に対するシステムコール等のサービス要求は、システムコールディスパッチ手段１３によってプライベートデータ３内のハンドラポインタテーブル１６が参照されることで、システムコールハンドラ１７によって処理される。例えば、ユーザプログラム４０による以降のＲｅａｄシステムコール等のサービス要求の際には、ハンドラポインタテーブル１６よりデバイスドライバ１０内のＲｅａｄハンドラ本体等のプログラムコードが検索されて実行される。
【００４３】
次に、アドオンプログラムマネージャ３０が拡張デバイスドライバ２０のアドオン要求をデバイスドライバ１０に対して発行すると、デバイスドライバ１０は、アドオン要求を受け付け（ステップＳ２０１）、拡張ハンドラ組み込み手段１１により、拡張デバイスドライバ２０を拡張システムコールハンドラ２１としてデバイスドライバコード領域１５にロードする（ステップＳ２０２）。
【００４４】
続いて、デバイスドライバ１０は、拡張ハンドラ組み込み手段１１により、デバイスドライバコード領域１５にロードされた拡張デバイスドライバ２０内の拡張システムコールハンドラ２１をシステムコールハンドラ１７としてシンボルのアドレス情報の解決を行って動作可能なプログラムコードとする（ステップＳ２０３）。拡張デバイスドライバ２０は、すでにコンパイル済みのプログラムコードではあるが、実際に動作可能なプログラムコードとするには、該プログラムコード内にて参照される関数や変数等のシンボルのアドレス情報を解決するリンク処理が必要となる。よって、拡張ハンドラ組み込み手段１１は、拡張デバイスドライバ２０をデバイスドライバコード領域１５にロードする際にジャンプテーブル等の一般的な技術を用いてシンボルのアドレス情報を解決する。
【００４５】
次に、バイスドライバ１０は、ハンドラポインタテーブル更新追加手段１２により、デバイスドライバデータ領域１４上に配置された、その時点で最新のハンドラポインタテーブル１６を、デバイスドライバコード領域１５にロードされた拡張システムコールハンドラ２１をポイントするハンドラポインタテーブル１６に更新して最新のハンドラポインタテーブル１６としてデバイスドライバデータ領域１４上に追加する（図３参照）（ステップＳ１０４）。
【００４６】
これにより、以降のユーザプログラム４０によるデバイスドライバ１０に対するシステムコール等のサービス要求は、拡張システムコールハンドラ２１によっても処理可能となる。
【００４７】
デバイスドライバ１０は、初期化時に作成されたデフォルトのハンドラポインタテーブル１６と、更新されて追加された最新のハンドラポインタテーブル１６とを個別に保守し、以降の新しいユーザプログラム４０からのＯｐｅｎシステムコール時に、そのユーザプログラム４０のプライベートデータ３に最新のハンドラポインタテーブル１６をコピーする。
【００４８】
ただし、すでにＯｐｅｎシステムコールを発行しているが、Ｃｌｏｓｅシステムコールを発行していないユーザプログラム４０、すなわち、デバイスドライバ１０を使用中のユーザプログラム４０については、プライベートデータ３内にＯｐｅｎシステムコール時にコピーされたハンドラポインタテーブル１６がすでに存在しているので、デバイスドライバコード領域１５にロードされた拡張システムコールハンドラ２１を直ちにはシステムコールすることはできない。このことは、ユーザプログラム４０が、デバイスドライバ１０の使用中にデバイスドライバ１０に新しい機能が追加されても、古い機能を使い続けることができ、ユーザプログラム４０に機能追加による擾乱を与えることがないことを意味している。
【００４９】
ここで、拡張システムコールハンドラ２１としてＷｒｉｔｅハンドラがロードされた場合を例にとって具体的に説明する（図２および図３参照）。
【００５０】
デバイスドライバ１０は、指定されたＷｒｉｔｅハンドラをデバイスドライバコード領域１５にロードするとともに、ハンドラポインタテーブル１６を更新して最新のハンドラポインタテーブル１６を追加し、デフォルトのハンドラポインタテーブル１６のうち、指定のハンドラ（本例においては、Ｗｒｉｔｅハンドラ）をオーバーライドしたエントリを設定する。
【００５１】
これ以降において、ユーザプログラム４０が、Ｏｐｅｎシステムコール等を介してデバイスドライバ１０の利用を宣言した際には、該ユーザプログラム４０用にデバイスドライバ１０によって確保されるプライベートデータ３内に最新のハンドラポインタテーブル１６がコピーされる。
【００５２】
これにより、以降のユーザプログラム４０によるＷｒｉｔｅシステムコールのサービス要求の際には、最新のハンドラポインタテーブル１６より拡張デバイスドライバ２０のＷｒｉｔｅハンドラのプログラムコードが検索されて実行される。
【００５３】
［第１の実施の形態の変形例］
なお、第１の実施の形態では、プライベートデータ３内にハンドラポインタテーブル１６をコピーするように説明したが、プライベートデータ３内にハンドラポインタテーブル１６への参照（ポインタ，識別子等）を保持させるようにしてもよい。
【００５４】
［第２の実施の形態］
図６は、本発明の第２の実施の形態に係るデバイスドライバにおける動的機能追加方式の構成を示すブロック図である。本実施の形態に係るデバイスドライバにおける動的機能追加方式は、図１に示した第１の実施の形態に係るデバイスドライバにおける動的機能追加方式をコンピュータ１００に搭載し、このコンピュータ１００に対してプログラム２００を付加するようにした点だけが異なる。したがって、その他の特に言及しない部分には同一符号を付して、それらの詳しい説明を省略する。
【００５５】
プログラム２００は、コンピュータ１００に読み込まれ、コンピュータ１００の動作を、オペレーティングシステム１（ファイル構造体２，プライベートデータ３，デバイスドライバ１０），拡張デバイスドライバ２０（拡張システムコールハンドラ２１），アドオンプログラムマネージャ３０等として制御する。プログラム２００の制御によるコンピュータ１００の動作は、第１の実施の形態におけるデバイスドライバにおける動的機能追加方式の動作と全く同様になるので、その詳しい説明を割愛する。
【００５６】
【発明の効果】
第１の効果は、デバイスドライバに新しい機能を追加する際に、デバイスドライバの停止やシステムの再起動を行う必要がなく、動作中のサービスを継続することができることである。その理由は、拡張システムコールハンドラがロードされた際にハンドラポインタテーブル更新追加手段がハンドラポインタテーブルを更新して追加するようにしたからである。
【００５７】
第２の効果は、ユーザプログラムの改変なしに、デバイスドライバに動的に機能を追加することが可能になることである。その理由は、アドオンプログラムマネージャからのアドオン要求によって拡張ハンドラ組み込み手段が拡張デバイスドライバをデバイスドライバにロードするようにしたからである。
【００５８】
第３の効果は、古い機能を使用中のユーザプログラムに擾乱を与えることなく、新しく追加する機能を使用するユーザプログラムをサポートできることである。その理由は、ユーザプログラム毎に別のハンドラポインタテーブルを用いることができるようにしたからである。これは、例えば、グラフィックスライブラリにおいて、デバイスドライバに新しい機能を追加することによって、アプリケーションプログラミングインタフェースを拡張するようなケースに利用することができる。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態に係るデバイスドライバにおける動的機能追加方式の構成を示すブロック図である。
【図２】図１中のハンドラポインタテーブルとシステムコールハンドラとの間のリンクの初期状態を例示する図である。
【図３】図１中のハンドラポインタテーブルとシステムコールハンドラとの間のリンクのハンドラ変更後の状態を例示する図である。
【図４】図１中のデバイスドライバのシステムコール受け付け時の処理を示すフローチャートである。
【図５】図１中のデバイスドライバのアドオン要求受け付け時の処理を示すフローチャートである。
【図６】本発明の第２の実施の形態に係るデバイスドライバにおける動的機能追加方式の構成を示すブロック図である。
【符号の説明】
１  オペレーティングシステム
２  ファイル構造体
３  プライベートデータ
１０  デバイスドライバ
１１  拡張ハンドラ組み込み手段
１２  ハンドラポインタテーブル更新追加手段
１３  システムコールディスパッチ手段
１４  デバイスドライバデータ領域
１５  デバイスドライバコード領域
１６  ハンドラポインタテーブル
１７  システムコールハンドラ
２０  拡張デバイスドライバ
２１  拡張システムコールハンドラ
３０  アドオンプログラムマネージャ
４０  ユーザプログラム
１００  コンピュータ
２００  プログラム
【図１】
2004246461.tif 000003
【図２】
2004246461.tif 000004
【図３】
2004246461.tif 000005
【図４】
2004246461.tif 000006
【図５】
2004246461.tif 000007
【図６】
2004246461.tif 000008