(57)【要約】【課題】開発対象のフィルタドライバのロード位置を開発時に確定し、且つドライバ開発時の不具合の原因特定を容易にすることを課題とする。【解決手段】Ｉ／Ｏマネージャ２５によって送信されたＩＲＰ（Ｉ／Ｏ  Ｒｅｑｕｅｓｔ  Ｐａｃｋｅｔ）を一旦受信するメッセージ受信部３１と、ＩＲＰの受信情報をＲＡＭ１２に出力する受信情報出力部３２と、一旦受信されたＩＲＰを、より下層にロードされた他のドライバに対してそのまま送信されるように、Ｉ／Ｏマネージャ２５を介して転送するメッセージ転送部３３と、を備えるモニタリング用フィルタドライバ３０を保持し、このモニタリング用フィルタドライバ３０は、開発対象のフィルタドライバがロードされるべき位置に、開発対象のフィルタドライバに代えてロードされる、情報処理装置１とした。【選択図】図３
2010140165.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置に接続された情報処理装置であって、
複数のドライバが前記記憶装置にロードされた際の各ドライバ間の階層関係を示す、ドライバロード情報を保持するドライバロード情報保持手段と、
前記複数のドライバが前記ドライバロード情報に示された階層関係となるように、前記複数のドライバを前記記憶装置にロードするドライバロード手段と、
前記ドライバロード手段によってロードされた前記ドライバとの間でメッセージを送受信することで、該ドライバを管理するドライバ管理手段と、
前記ドライバロード手段によってロードされて実行されることで、前記ドライバ管理手段によって送信されたメッセージを一旦受信するメッセージ受信手段、前記メッセージの受信情報を前記記憶装置に出力する受信情報出力手段、および、一旦受信された前記メッセージを、前記階層関係においてより下層にロードされた他のドライバに対してそのまま送信されるように、前記ドライバ管理手段を介して転送するメッセージ転送手段、として該情報処理装置を機能させるモニタリング用フィルタドライバ、を保持するモニタリング用フィルタドライバ保持手段と、を備え、
前記ドライバロード情報保持手段は、前記モニタリング用フィルタドライバが、他のドライバとの階層関係において、開発対象のフィルタドライバがロードされるべき位置にロードされるようなドライバロード情報を保持し、
前記ドライバロード手段は、前記ドライバロード情報に従って、前記開発対象のフィルタドライバに代えて、前記モニタリング用フィルタドライバをロードする、
情報処理装置。
【請求項２】
前記受信情報出力手段は、前記一旦受信したメッセージの種類毎に受信数のカウントアップを行うことで、前記受信情報を取得し、前記記憶装置に出力する、
請求項１に記載の情報処理装置。
【請求項３】
前記受信情報出力手段によって出力された前記受信情報を、前記記憶装置から取得して、該情報処理装置に接続されたディスプレイ装置に出力する出力手段を更に備える、
請求項１または２に記載の情報処理装置。
【請求項４】
記憶装置に接続されたコンピュータによって、
複数のドライバが前記記憶装置にロードされた際の各ドライバ間の階層関係を示す、ドライバロード情報を保持するドライバロード情報保持ステップと、
前記複数のドライバが前記ドライバロード情報に示された階層関係となるように、前記複数のドライバを前記記憶装置にロードするドライバロードステップと、
前記ドライバロードステップでロードされた前記ドライバとの間でメッセージを送受信することで、該ドライバを管理するドライバ管理ステップと、
前記ドライバロードステップでロードされて実行されることで、前記ドライバ管理ステップで送信されたメッセージを一旦受信するメッセージ受信手段、前記メッセージの受信情報を前記記憶装置に出力する受信情報出力手段、および、一旦受信された前記メッセージを、前記階層関係においてより下層にロードされた他のドライバに対してそのまま送信されるように、前記ドライバ管理手段を介して転送するメッセージ転送手段、として該情報処理装置を機能させるモニタリング用フィルタドライバ、を保持するモニタリング用フィルタドライバ保持ステップと、が実行され、
前記ドライバロード情報保持ステップでは、前記モニタリング用フィルタドライバが、他のドライバとの階層関係において、開発対象のフィルタドライバがロードされるべき位置にロードされるようなドライバロード情報が保持され、
前記ドライバロードステップでは、前記ドライバロード情報に従って、前記開発対象のフィルタドライバに代えて、前記モニタリング用フィルタドライバがロードされる、
情報処理方法。
【請求項５】
ロードされたドライバとの間でメッセージを送受信することで該ドライバを管理するドライバ管理手段を備えるコンピュータによって、実行されることで、該コンピュータを、
前記ドライバ管理手段によって送信されたメッセージを一旦受信するメッセージ受信手段と、
前記メッセージの受信情報を前記記憶装置に出力する受信情報出力手段と、
前記一旦受信された前記メッセージを、他のドライバとの階層関係においてより下層にロードされた他のドライバに対してそのまま送信されるように転送するメッセージ転送手段と、として機能させ、
前記階層関係において、開発対象のフィルタドライバがロードされるべき位置に、該開発対象のフィルタドライバに代えてロードされる、モニタリング用フィルタドライバとしてのプログラム。
【請求項６】
前記受信情報出力手段は、前記一旦受信したメッセージの種類毎に受信数のカウントアップを行うことで、前記受信情報を取得し、前記記憶装置に出力する、
請求項５に記載の、モニタリング用フィルタドライバとしてのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータによって実行されるドライバに関する。
【背景技術】
【０００２】
開発中のドライバをデバッグするために、開発中のドライバに対する入出力をフィルタリングすることでデバッグ情報を取得する、デバッグ用のフィルタドライバがある（特許文献１を参照）。
【特許文献１】特開２００３−１１４８３４号公報
【特許文献２】特開２００５−３５２５３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）上でアプリケーションを動作させる情報処理装置（コンピュータ）において、例えば文書作成アプリケーション等のアプリケーションと、ハードディスク等のハードウェアとの間で、データの読み出しや書き込み処理を中継するために、ドライバと呼ばれるプログラムが用いられている。そして、このようなドライバのうち、他のドライバがターゲットであるメッセージ（他のドライバに対する指示やデータ等）を、ターゲットに達する前に途中で受信するフィルタドライバがある。なお、ここでメッセージとは、ドライバとの間でデータを送受信するためのパケット等であり、例えば、所謂ＩＲＰ（Ｉ／Ｏ  Ｒｅｑｕｅｓｔ  Ｐａｃｋｅｔ）等がある。フィルタドライバによれば、他のドライバをターゲットとするメッセージを途中で受信することにより、ターゲットが提供する機能を拡張したり置き換えたりすることができる。このため、フィルタドライバは、例えば、入出力情報を監視することで実現されるセキュリティ関連ソフトウェアの機能を実現するために用いられている。
【０００４】
ドライバは、通常のアプリケーションプログラムのサブルーチンと異なり、ＯＳ起動時に、ＯＳが有する所定のドライバロード手段によって、ドライバインストール時に設定された順にロードされるものである。ここでロードされるドライバのうち、フィルタドライバは、他のドライバをターゲットとするメッセージを受信するために、開発者の意図したロード位置（例えば、ドライバＡとドライバＢの間）に正しくロードされる必要がある。しかし、既存ドライバとのバッティング等の発生により、フィルタドライバと他のドライバとのロードの位置関係が開発者の意図した位置関係にならない場合があり、フィルタドライバのロード位置を開発時に確定することは困難である（図７を参照）。
【０００５】
また、開発対象ドライバをシステムにインストールした場合に、ＯＳがハングアップする等の不具合が発生することがある。しかし、上記したような、フィルタドライバ特有の事情により、開発対象ドライバが組み込まれたシステムにおいて不具合が発生する原因には、ドライバのロード／初期化失敗や、開発対象ドライバ自体の不具合、他のドライバとのバッティング等、様々な要因が関係する。このため、フィルタドライバの開発においては、開発対象のプログラムにデバッグルーチンを入れる等の、通常のアプリケーションプログラムの開発で採用されているデバッグ方法のみでは、不具合の原因を特定することが困難である。
【０００６】
なお、従来、開発中のドライバに対する入出力をフィルタリングすることでデバッグ情報を取得するデバッグ用のフィルタドライバが提案されている。しかし、このような技術は、開発中のドライバのロードが成功することを前提として、デバッグ情報取得処理ルー
チンを開発中のドライバ内部から外部へと切り出すことで、デバッグ情報取得用ルーチンを開発中ドライバへ追加および削除する手間を省くものであり、上記したような、開発対象のドライバがフィルタドライバである場合に発生する課題を解決するものではなかった。
【０００７】
本発明は、上記した問題に鑑み、開発対象のフィルタドライバのロード位置を開発時に確定し、且つドライバ開発時の不具合の原因特定を容易にすることを課題とする。
【課題を解決するための手段】
【０００８】
本発明は、上記した課題を解決するために、フィルタドライバを、下層にロードされた他のドライバに対して送信されるメッセージを監視するモニタリング用フィルタドライバとし、更に、開発対象のフィルタドライバがロードされるべき位置に、開発対象のフィルタドライバに代えてロードすることで、開発対象のフィルタドライバのロード位置を開発時に確定し、且つドライバ開発時の不具合の原因特定を容易にすることを可能にした。
【０００９】
詳細には、本発明は、記憶装置に接続された情報処理装置であって、複数のドライバが前記記憶装置にロードされた際の各ドライバ間の階層関係を示す、ドライバロード情報を保持するドライバロード情報保持手段と、前記複数のドライバが前記ドライバロード情報に示された階層関係となるように、前記複数のドライバを前記記憶装置にロードするドライバロード手段と、前記ドライバロード手段によってロードされた前記ドライバとの間でメッセージを送受信することで、該ドライバを管理するドライバ管理手段と、前記ドライバロード手段によってロードされ実行されることで、前記ドライバ管理手段によって送信されたメッセージを一旦受信するメッセージ受信手段、前記メッセージの受信情報を前記記憶装置に出力する受信情報出力手段、および、一旦受信された前記メッセージを、前記階層関係においてより下層にロードされた他のドライバに対してそのまま送信されるように、前記ドライバ管理手段を介して転送するメッセージ転送手段、として該情報処理装置を機能させるモニタリング用フィルタドライバ、を保持するモニタリング用フィルタドライバ保持手段と、を備え、前記ドライバロード情報保持手段は、前記モニタリング用フィルタドライバが、他のドライバとの階層関係において、開発対象のフィルタドライバがロードされるべき位置にロードされるようなドライバロード情報を保持し、前記ドライバロード手段は、前記ドライバロード情報に従って、前記開発対象のフィルタドライバに代えて、前記モニタリング用フィルタドライバをロードする、情報処理装置である。
【００１０】
ドライバは、情報処理装置によって管理されるデバイス（例えば、ハードディスクドライブやプリンタ等）等を、情報処理装置にインストールされたＯＳやアプリケーションから制御するためのプログラムであり、ドライバは、通常のプログラムと同様、読み出されて記憶装置上に展開される（ロードされる）ことで実行可能となる。また、フィルタドライバは、下層にロードされた他のドライバへのメッセージを、該他のドライバへ到達する前に受信するためのドライバである。
【００１１】
即ち、複数のドライバが、Ｉ／Ｏマネージャ等のドライバ管理手段によって管理されている場合、フィルタドライバは、または階層関係においてより上層にロードされたドライバ、または上位のアプリケーションによる要求を受けてドライバ管理手段によって送信されたメッセージを受信し、より下層にロードされた他のドライバに対して送信されるメッセージを受信する。
【００１２】
但し、フィルタドライバがロードおよび実行される位置は、具体的には、システムにおけるドライバの管理方法によって異なるため、システムの構造に応じて最適な方法が採用されることが好ましい。なお、本発明において、ドライバの階層関係は、複数のドライバ間の関係を、情報処理システムを構成するソフトウェアモジュールやハードウェアモジュ
ールの関係を階層モデルで表現した場合の階層構造に倣って表現したものである。階層構造は、通常、アプリケーション層を最上層、物理層を最下層として、ユーザにより近い側がより上層、ハードウェアやデバイスに近い側がより下層に表現される。
【００１３】
本発明は、フィルタドライバの開発において、デバッグ用のコードを含ませた開発対象のドライバをインストールしたり、開発対象のフィルタドライバと共に該開発対象フィルタドライバへのメッセージを受信するデバッグ用コード入りフィルタドライバをインストールしたりするのではなく、モニタリング用フィルタドライバを、開発対象ドライバに代えてインストールすることとしている。このようにすることで、本発明によれば、フィルタドライバのロード位置を開発時に確定することが可能となる。
【００１４】
また、受信したメッセージに変更を加えずにそのまま転送するモニタリング用フィルタドライバを用いることで、ドライバの内部処理や、受信したメッセージに変更が加えられることを原因とする不具合の可能性を格段に低くすることが出来る。本発明は、このようにして、ドライバの内部処理や、受信したメッセージに変更が加えられることを原因とする不具合を排除し、且つモニタリング用フィルタドライバへの入出力をモニタリングすることで、不具合の原因特定を容易とした。
【００１５】
また、前記受信情報出力手段は、前記一旦受信したメッセージの種類毎に受信数のカウントアップを行うことで、前記受信情報を取得し、前記記憶装置に出力してもよい。
【００１６】
受信されたメッセージをその種類ごとにカウントすることで、開発対象のドライバがロードされるべき位置の実行環境を把握し、開発対象のドライバがロードされるべき位置において正常なメッセージ受信が行われているか否かを把握することが可能となる。
【００１７】
また、本発明に係る情報処理装置は、前記受信情報出力手段によって出力された前記受信情報を、前記記憶装置から取得して、該情報処理装置に接続されたユーザインターフェース装置に出力する出力手段を更に備えてもよい。
【００１８】
このような出力手段を備えることで、本発明によれば、ドライバのロード状況や実行環境をディスプレイ装置等のユーザインターフェース装置に出力（ダンプ）し、開発者が容易にドライバのロード状況や実行環境を把握することを可能としている。また、出力に用いられるユーザインターフェース装置は、ユーザが五感を介して出力内容を確認可能なものであればよく、採用可能なものから実施の形態に応じて適宜選択されてよい。既存の周知のユーザインターフェース装置には、例えば、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）、液晶ディスプレイ、プラズマディスプレイ等のディスプレイ装置や、レーザプリンタ、インクジェットプリンタ等のプリンタ装置等がある。
【００１９】
更に、本発明は、コンピュータが実行する方法、又はコンピュータを上記各手段として機能させるためのプログラムとしても把握することが可能である。また、本発明は、そのようなプログラムをコンピュータその他の装置、機械等が読み取り可能な記録媒体に記録したものでもよい。ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。
【００２０】
加えて、本発明は、コンピュータによって実行されるモニタリング用フィルタドライバとしても把握することが可能である。例えば、本発明は、ロードされたドライバとの間でメッセージを送受信することで該ドライバを管理するドライバ管理手段を備えるコンピュータによって、実行されることで、該コンピュータを、前記ドライバ管理手段によって送信されたメッセージを一旦受信するメッセージ受信手段と、前記メッセージの受信情報を
前記記憶装置に出力する受信情報出力手段と、前記一旦受信された前記メッセージを、他のドライバとの階層関係においてより下層にロードされた他のドライバに対してそのまま送信されるように転送するメッセージ転送手段と、として機能させ、前記階層関係において、開発対象のフィルタドライバがロードされるべき位置に、該開発対象のフィルタドライバに代えてロードされる、モニタリング用フィルタドライバとしてのプログラムである。
【発明の効果】
【００２１】
本発明によって、開発対象のフィルタドライバのロード位置を開発時に確定し、且つドライバ開発時の不具合の原因特定を容易にすることが可能となる。
【発明を実施するための最良の形態】
【００２２】
本発明に係る情報処理装置、方法、プログラムおよびモニタリング用フィルタドライバの実施の形態について、図面に基づいて説明する。
【００２３】
図１は、本実施形態に係る情報処理装置１のハードウェア構成の概略を示す図である。情報処理装置は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１２等の主記憶装置、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）１３等の補助記憶装置、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１４、およびＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）１５等のネットワークインターフェース等を有するコンピュータである。なお、本実施形態では、情報処理装置１には、ディスプレイ１６等の出力装置、およびキーボード１７、マウス１８等の入力装置等が接続されている。また、本実施形態における情報処理装置１のＯＳは、Ｉ／Ｏマネージャ（ドライバ管理部）２５によって複数のドライバを管理し、ドライバへのメッセージ（ＩＲＰ（Ｉ／Ｏ  Ｒｅｑｕｅｓｔ  Ｐａｃｋｅｔ））を中継する。
【００２４】
図２は、本実施形態に係る情報処理装置１にインストールされているシステムのドライバ管理階層構造を示す図である。ドライバは、通常のアプリケーションプログラムと異なり、ＯＳによって、後述するドライバロード情報（例えば、所謂レジストリに保持されている）を参照することで決定された階層関係に従って実行されるようにロードされる。また、その実行は、本実施形態におけるＩ／Ｏマネージャ２５によってドライバとその他の構成（ＯＳ、アプリケーション、他のドライバ）との間でメッセージ（本実施形態では、ＩＲＰ）が中継されることで管理される。
【００２５】
Ｉ／Ｏマネージャ２５は、アプリケーションから呼び出されたＯＳのＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）等、上位に位置するシステムサービスからの要求に応じて、ロードされた各ドライバとの間でＩＲＰと呼ばれるパケット（メッセージ）を送受信することで、ドライバの実行状態を制御および管理する。また、Ｉ／Ｏマネージャ２５は、ドライバを階層構造で管理する。図２には、階層構造で管理されるドライバとして、上層に位置することで上位のシステムサービスに対して抽象化されたファイルシステムを見せるためのファイルシステムドライバと、下層に位置することで情報処理装置１に接続されている各種ハードウェアを実際に制御するデバイスドライバと、ファイルシステムドライバとデバイスドライバとの中間層に位置することでファイルシステムドライバからＩ／Ｏマネージャ２５を介して呼び出され、またＩ／Ｏマネージャ２５を介してデバイスドライバを呼び出すことでデバイス固有の機能に対応する中間ドライバと、が例示されている。
【００２６】
また、本実施形態において、Ｉ／Ｏマネージャ２５によって管理されるドライバの下位には、ハードウェアを抽象化することでハードウェア毎の差異を隠蔽するＨＡＬ（Ｈａｒ
ｄｗａｒｅ  Ａｂｓｔｒａｃｔ  Ｌａｙｅｒ）が存在している。但し、ＨＡＬはハードウェア間の相違を吸収するために存在する層（レイヤ）であるため、本発明を実施するにあたって必須ではない。ＨＡＬが存在しないシステムでは、ハードウェアは、デバイスドライバ等、下層に位置するドライバによって直接制御される。
【００２７】
フィルタドライバは、他のドライバやデバイス、ファイルシステム等がターゲットであるＩＲＰを、ターゲットに達する前に途中で受信するためのドライバである。このため、後述するドライバロード情報には、フィルタドライバの階層関係が、所定のドライバやデバイス、ファイルシステム等がターゲットであるＩＲＰを受信できる位置、即ち所定のドライバ等の上層となるように、フィルタドライバをロードするような情報が含まれる。例えば、ドライバロード情報には、フィルタドライバファイル本体の名称、およびロード階層を示す情報が含まれる。
【００２８】
しかし、実際にシステムにドライバがロードされる場合には、ドライバ同士（特に、同一のファイルシステムやドライバへのＩＲＰを受信しようとするフィルタドライバ同士）でのバッティングの発生等の原因により、開発者が望んだ位置にフィルタドライバがインストールされない場合がある。このような事態が発生した場合、開発対象フィルタドライバの機能を提供できないことに留まらず、システム全体が不安定になる、システムがハングする、ドライバのローディングに失敗してシステムが起動しない、等の問題が発生する可能性がある。このため、フィルタドライバを用いたサービスの開発には、他のドライバとの相性問題や、不具合発生時の原因特定が困難となる問題等があった。
【００２９】
なお、開発対象フィルタドライバとしては、例えば、ＨＤＤ１３等の不揮発性記憶装置への書き込みアクセスを横取りし、書き込み先アドレスを、情報処理装置１の起動または終了に際して初期化される一時領域（例えば、ＲＡＭ１２上の領域）内のアドレスへ変換することで、不揮発性記憶装置への書き込みアクセスを一時領域に対する書き込みアクセスへ変更し、不揮発性記憶装置に情報が残ることを防止する機能を実現するための、残留防止用フィルタドライバが挙げられる。このようなフィルタドライバによれば、例えばＮＩＣ１５等を用いて外部からダウンロードした情報が不揮発性記憶装置に残らない情報処理装置を実現することが可能となり、セキュリティ上有用である。
【００３０】
但し、本実施形態に係るモニタリング用フィルタドライバ３０は、どのようなフィルタドライバの開発にも用いることが出来る。例えば、本実施形態に係るモニタリング用フィルタドライバ３０は、マルウェアのスキャンや情報漏洩の監視を行うためのフィルタドライバや、ユーザによるキーボード１７やマウス１８等を用いた入力を横取りして所定の処理を実行するためのフィルタドライバの開発のために用いられてもよい。
【００３１】
図３は、本実施形態に係る情報処理装置１の機能構成の概略を示す図である。図１に示したハードウェア構成を有する情報処理装置１は、ＨＤＤ１３上にインストールされたプログラムをＣＰＵ１１が読み出してＲＡＭ１２に展開し、展開されたプログラムをＣＰＵ１１が解釈および実行することで、ドライバロード情報を保持するドライバロード情報保持部２１と、インストールされている複数のドライバをＲＡＭ１２にロードするドライバロード部２２と、モニタリング用フィルタドライバ３０を保持するモニタリング用フィルタドライバ保持部２３と、モニタリング用フィルタドライバ３０によって出力された受信情報をＲＡＭ１２から取得してディスプレイ１６に出力する出力部２４と、ロードされたドライバを管理するドライバ管理部（Ｉ／Ｏマネージャ）２５と、を備える情報処理装置１として機能する。
【００３２】
また、図１に示したハードウェア構成を有する情報処理装置１は、モニタリング用フィルタドライバ保持部２３によってＨＤＤ１３上に保持されたモニタリング用フィルタドラ
イバ３０としてのプログラムをＲＡＭ１２にロードおよび実行することで、Ｉ／Ｏマネージャ２５から送信されるＩＲＰを受信するメッセージ受信部３１と、受信されたＩＲＰを種類別にカウントする受信情報出力部３２と、受信されたＩＲＰを転送するメッセージ転送部３３と、を備える情報処理装置１として機能する。なお、本実施形態において、上記各部は、ソフトウェアを実行するプロセッサによって実現される機能モジュールであるが、これら機能モジュールには、機能の一部または全部を実行する専用プロセッサが含まれていてもよい。
【００３３】
ドライバロード情報保持部２１によって保持されるドライバロード情報は、複数のドライバがＲＡＭ１２にロードされる際の各ドライバ間の階層関係を示す。また、ドライバロード情報は、ドライバのインストール時に、ＯＳから参照可能な設定情報（例えば、所謂レジストリ）としてＨＤＤ１３に記録される。
【００３４】
本実施形態では、モニタリング用フィルタドライバ３０は、開発対象ドライバと同一のドライバロード情報の設定情報（例えば、所謂「．ｉｎｆ」ファイル）を用いてインストールされる。このため、この設定情報に基づいて生成されたドライバロード情報は、モニタリング用フィルタドライバ３０が、他のドライバとの階層関係において、開発対象のフィルタドライバがロードされるべき位置（図４を参照）にロードされるようなドライバロード情報を保持する。このため、システムが起動すると、モニタリング用フィルタドライバ３０は、仮に開発対象ドライバがインストールされたとしたらこの開発対象ドライバがロードされるであろう位置にロードされる（図５を参照）。なお、モニタリング用フィルタドライバ３０には、開発対象ドライバと同一の設定情報を用いてインストールするために、開発対象ドライバと同一の名称（ファイル名）が付されている。
【００３５】
ドライバロード部２２は、ドライバロード情報を参照することで、システムにインストールされている複数のドライバがドライバロード情報に示された階層関係となるように、ドライバをＲＡＭ１２にロードする。本実施形態では、上記説明したように、モニタリング用フィルタドライバ３０が開発対象ドライバと同一のドライバロード情報の設定情報を用いてインストールされている（モニタリング用フィルタドライバ保持部２３によってＨＤＤ１３上に保持されている）ため、ドライバロード部２２は、開発対象のフィルタドライバに代えて、モニタリング用フィルタドライバ３０をロードする。即ち、本実施形態において、モニタリング用フィルタドライバ３０は、ドライバロード部２２によって、階層関係においてより下層にロードされた他のドライバ（図５に示した例では、デバイスドライバ）に対して送信されるＩＲＰを受信できる位置にロードされ実行される。
【００３６】
出力部２４は、受信情報出力部３２によって出力された受信情報を、ＲＡＭ１２から取得してディスプレイ１６に出力する。より具体的には、出力部２４は、後述するモニタリング用フィルタドライバ３０の受信情報出力部３２によって受信情報が出力されるＲＡＭ１２上の所定領域を監視する（例えば、定期的にポーリング等することで、所定領域に記録されている情報を取得する）ことで、受信情報を取得し、取得された受信情報をディスプレイ１６に出力する。なお、本実施形態では、受信情報はディスプレイ１６に出力されることとしているが、受信情報の出力は、プリンタ等、その他のユーザインターフェース装置に対して行われてもよい。
【００３７】
モニタリング用フィルタドライバ３０のメッセージ受信部３１は、Ｉ／Ｏマネージャ２５から送信された、下層にロードされた他のドライバをターゲットとするＩＲＰを、一旦受信する。上述の通り、本実施形態において、モニタリング用フィルタドライバ３０は、より上層にロードされた他のドライバから、または上位のアプリケーション等からＩ／Ｏマネージャ２５を介して送信されるＩＲＰを受信できる位置にロードされ実行されるため、下層のドライバをターゲットとするＩＲＰを受信することが可能である。
【００３８】
モニタリング用フィルタドライバ３０の受信情報出力部３２は、メッセージ受信部３１によって受信されたＩＲＰの種類毎にカウントアップを行うことで、受信情報を取得し、ＲＡＭ１２に出力する。例えば、開発対象フィルタドライバが上記説明した残留防止用フィルタドライバであり、対象ハードウェアがＨＤＤ１３であり、２７種類のＩＲＰが用いられるとした場合、Ｉ／Ｏマネージャ２５は、上位のアプリケーションまたはドライバから要求される処理の種類に応じて、モニタリング用フィルタドライバから、対応するＩＲＰ処理内部関数（本実施形態では、モニタリング用フィルタドライバ内に、２７種のＩＲＰの夫々に対応するように２７のＩＲＰ処理内部関数が用意される）を呼び出す。このようにして、処理の種類に応じたＩＲＰ処理内部関数がＩ／Ｏマネージャ２５によって呼び出されることで、受信情報出力部３２は、開発対象フィルタドライバがモニタリング用フィルタドライバ３０と同一の位置にロードされた場合に入力されるであろうＩＲＰを受信し、ＩＲＰの種類毎のカウントを行うことが出来る。ここで、ＩＲＰ処理内部関数は、呼び出されると対応するＩＲＰ毎に用意された変数をインクリメントする関数である。取得された情報は、受信情報として、ＲＡＭ１２の所定領域に出力される。
【００３９】
モニタリング用フィルタドライバ３０のメッセージ転送部３３は、メッセージ受信部３１によって一旦受信され、受信情報出力部３２による監視の対象となったＩＲＰを、受信されたＩＲＰに対して変更を加えることなく、下層にロードされた他のドライバに対してそのまま送信されるようにＩ／Ｏマネージャ２５に転送する。
【００４０】
次に、本実施形態に係る処理の流れを、フローチャートを用いて説明する。図６は、本実施形態に係るＩ／Ｏマネージャ２５およびモニタリング用フィルタドライバ３０によって実行されるモニタリング処理を示すフローチャートである。本フローチャートに示された処理は、Ｉ／Ｏマネージャ２５によってＩＲＰが送信されることでモニタリング用フィルタドライバ３０が呼び出され、モニタリング用フィルタドライバ３０のメッセージ受信部３１によってＩＲＰが受信されたことを契機として開始される。ここで、Ｉ／Ｏマネージャ２５からモニタリング用フィルタドライバ３０へ送信されているＩＲＰは、基本的に、より下層に位置するドライバ（本実施形態では、デバイスドライバ）をターゲットとするものである。
【００４１】
ステップＳ１．１では、Ｉ／Ｏマネージャ２５が送信するＩＲＰの種類判定が行われる。Ｉ／Ｏマネージャ２５は、モニタリング用フィルタドライバ３０に送信するＩＲＰの種類を参照し、送信するＩＲＰが所定のＩＲＰであるか否かを判定する。送信するＩＲＰが所定のＩＲＰ（ここでは、ＩＲＰ＿ＣＲＥＡＴＥ）であると判定された場合、処理はステップＳ１．２へ進む。送信するＩＲＰが、所定のＩＲＰではないと判定された場合、処理はステップＳ２．１へ進む。
【００４２】
ステップＳ１．２では、Ｉ／Ｏマネージャ２５とモニタリング用フィルタドライバとの間でＩＲＰが送受信され、ＩＲＰの種類に応じたカウントアップおよびデータ出力が行われる。Ｉ／Ｏマネージャ２５は、ＲＡＭ１２に展開されているモニタリング用フィルタドライバ３０に含まれるＩＲＰ処理内部関数のうち、ステップＳ１．１で判定されたＩＲＰの種類に応じたＩＲＰ処理内部関数（ここでは、ＤｉｓｋＦｕｎｃＣｒｅａｔｅ（）；）を、ＩＲＰを引数として呼び出すことで、ＩＲＰをモニタリング用フィルタドライバに送信する。送信されたＩＲＰは、メッセージ受信部３１によって受信され、受信情報出力部３２は、ＩＲＰのカウントアップまたはデータ出力を行う。ＩＲＰ処理内部関数は、上述の通り、対応するＩＲＰ毎に用意された変数をインクリメントするための関数である。インクリメントされた変数は、受信情報として、ＲＡＭ１２の所定領域に出力される。この所定領域は、出力部２４によってディスプレイ１６に出力される受信情報を記録するための領域である。その後、処理はステップＳ１．３へ進む。
【００４３】
ステップＳ１．３では、ＩＲＰが次のドライバに転送される。メッセージ転送部３３は、ステップＳ１において受信されたＩＲＰを、このＩＲＰに対する変更を加えることなくＩ／Ｏマネージャ２５に送信することで、より下層のドライバ（図５に示した例では、デバイスドライバ）に向けて、ＩＲＰを転送する。その後、処理はＩ／Ｏマネージャ２５に戻り、本フローチャートに示された処理は終了する。
【００４４】
ステップＳ１．１において、送信されるＩＲＰが所定のＩＲＰではないと判定された場合、処理はステップＳ２．１へ進む。本実施形態では、送信されるＩＲＰの種類が２７種類のうちの何れであるかを判定し、判定されたＩＲＰの種類に応じた変数のカウントアップを行うために、ステップＳ１．１からステップＳ２７．３までの処理が行われる。なお、図６に示したフローチャートでは、ポイントで区切られたステップ番号のうち前半部分が２７種類のＩＲＰに対応している。また、図６では、ステップＳ３．１からステップＳ２６．３までの処理が省略されている。
【００４５】
ステップＳ２．１では、判定の対象となるＩＲＰの種類がＩＲＰ＿ＣＲＥＡＴＥではなくＩＲＰ＿ＲＥＡＤであることを除いて、ステップＳ１．１と略同様の処理が行われる。また、ステップＳ２．２においても、送信されるＩＲＰの種類が所定のＩＲＰであった場合に呼び出される関数がＤｉｓｋＦｕｎｃＣｒｅａｔｅ（）；ではなくＤｉｓｋＦｕｎｃＲｅａｄ（）；であることを除いて、ステップＳ２．２と略同様の処理が行われる。以降、ステップＳ３．１からステップＳ２７．３まで同様である。
【００４６】
このようにして、ステップＳ１．１からステップＳ２７．３までの処理では、送信されるＩＲＰが２７種類のＩＲＰのうち何れであるかを判定し、特定されたＩＲＰに応じた変数のカウントアップが行われる。所定領域に保存された、カウントアップされた変数（即ち、ＩＲＰの種類ごとの受信回数）は、出力部２４によって読み出され、ディスプレイ１６に出力される。なお、本実施形態では、ドライバおよびドライバの外にある出力部２４の双方から参照可能な所定領域を介して、受信情報をディスプレイ１６に出力することとしているが、受信情報の出力には、その他の方法が用いられてもよい。例えば、受信情報をＲＡＭ１２上のドライバ用に確保された領域に記録しておき、アプリケーションからの受信情報出力要求を受けたＩ／Ｏマネージャ２５がモニタリング用フィルタドライバ３０に対して受信情報の出力を指示するＩＲＰを送信することで、ドライバからアプリケーションに受信情報を出力する方法が採用されてもよい。これらの処理によって、本実施形態に係るモニタリング用フィルタドライバ３０では、開発対象フィルタドライバがロードされる位置において受信されるＩＲＰ、即ち開発対象フィルタドライバの実行環境を把握することを可能としている。
【００４７】
また、本実施形態では、ＩＲＰの種別カウントについて説明したが、受信情報には、ＩＲＰの受信時刻等、開発対象フィルタドライバの実行環境をより詳細に把握するための情報が含まれていてもよい。例えば、ＩＲＰの種類に加えて受信時刻を取得することで、ＩＲＰの受信順序を把握することが可能となる。また、これらの情報は、上記説明した所定領域等ＲＡＭ１２に出力され一定期間保存されてもよいが、リソースを節約する観点から、情報の取得後すぐに所定のデバッグ用アプリケーションを介してディスプレイ１６に出力し、ＲＡＭ１２上には情報を残さないこととしてもよい。
【００４８】
本実施形態に係るモニタリング用フィルタドライバ３０によれば、受信したＩＲＰへの変更が加えられずにそのままＩＲＰが転送されるため、ドライバの内部処理や、受信したメッセージに変更が加えられることを原因とする不具合の可能性が格段に低くなっている。また、モニタリング用フィルタドライバ３０のロード位置は、ＯＳの起動時に記録されているドライバのロード順序をＲＡＭ１２またはＨＤＤ１３から取得することで把握する
ことが出来る。ドライバのロード位置を確認するための手段としては、従来、デバイスドライバロード状態確認用のソフトウェアが知られており、本実施形態においても、このようなソフトウェアを用いて、モニタリング用フィルタドライバ３０のロード位置を把握することが可能である。
【００４９】
更に、本実施形態に係るモニタリング用フィルタドライバ３０によれば、上記したようにドライバの内部処理や、受信したＩＲＰに変更が加えられることを原因とする不具合の可能性を低減した上で、開発対象フィルタドライバがインストールされるべき位置における実行環境をモニタリングし、把握することを可能としているため、不具合の原因が開発対象ドライバの内部処理に関連する部分にあるのか否かを切り分けることが容易である。
【００５０】
例えば、開発対象フィルタドライバをシステムにインストールして起動した際に、システムがハングアップしたような場合にも、開発対象フィルタドライバのインストール情報を用いて本実施形態に係るモニタリング用フィルタドライバ３０をインストールすることで、ハングアップの原因特定を容易に行うことが出来る。具体的には、デバイスドライバロード状態確認用のソフトウェアを用いて、モニタリング用フィルタドライバ３０が設計どおりの位置にロードされていることが確認できた場合には、ロード状態は正常であると判断出来る。そして、ロードが成功した場合には、出力部２４によって出力される受信情報に基づいて、開発対象ドライバ内部に関連する不具合を特定することが可能である。
【図面の簡単な説明】
【００５１】
【図１】実施形態に係る情報処理装置のハードウェア構成の概略を示す図である。
【図２】実施形態に係る情報処理装置にインストールされているシステムのドライバ管理階層構造を示す図である。
【図３】実施形態に係る情報処理装置の機能構成の概略を示す図である。
【図４】実施形態に係る開発対象のフィルタドライバがロードされるべき位置を示す図である。
【図５】実施形態に係るモニタリング用フィルタドライバがロードされるべき位置を示す図である。
【図６】実施形態に係るＩ／Ｏマネージャおよびモニタリング用フィルタドライバによって実行されるモニタリング処理を示すフローチャートである。
【図７】従来、フィルタドライバのロードの際に発生している問題を示す図である。
【符号の説明】
【００５２】
１  情報処理装置
１１  ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）
１２  ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）
１３  ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）
２１  ドライバロード情報保持部
２２  ドライバロード部
２３  モニタリング用フィルタドライバ保持部
２４  出力部
２５  Ｉ／Ｏマネージャ（ドライバ管理部）
３０  モニタリング用フィルタドライバ
３１  メッセージ受信部
３２  受信情報出力部
３３  メッセージ転送部
【図１】
2010140165.tif 000003
【図２】
2010140165.tif 000004
【図３】
2010140165.tif 000005
【図４】
2010140165.tif 000006
【図５】
2010140165.tif 000007
【図６】
2010140165.tif 000008
【図７】
2010140165.tif 000009