(57)【要約】【課題】アプリケーション・プログラムからメモリマップドＩ／Ｏ（ＭＭＩＯ）領域を具体的に指定すること、当該領域の書き換え指示及び参照指示をアプリケーション・プログラムからデバイスドライバに対して直接的に行うことを可能とする。【解決手段】デバイスドライバ２１からアプリケーション２２にＭＭＩＯの物理アドレスを通知させる。アプリケーション２２は、ＭＭＩＯの物理アドレスの指定を含むＭＭＩＯに対するWrite要求（又はRead要求）をデバイスドライバ２１に行なう。デバイスドライバ２１は、Write要求（又はRead要求）に応じて、指定された物理アドレスに対する書込み（又は読み出し）を行なった結果をアプリケーション２２に通知する。【選択図】図３
2010039644.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに接続された周辺デバイスの動作検証方法であって、
前記コンピュータに、前記周辺デバイスのメモリマップドＩ／Ｏに対するアクセスが許可された第１のプログラム実行モードにてデバイスドライバ・プログラムを実行させることによって、前記メモリマップドＩ／Ｏ領域へのアクセスが禁止された第２のプログラム実行モードで実行されるアプリケーション・プログラムに対して、前記メモリマップドＩ／Ｏ領域を示す物理アドレスを通知するステップ（ａ）と、
前記コンピュータに前記アプリケーション・プログラムを実行させることによって、前記物理アドレスの指定を含むライト要求又はリード要求を前記デバイスドライバ・プログラムに供給するステップ（ｂ）と、
前記コンピュータに前記デバイスドライバ・プログラムを実行させることによって、前記ライト要求又はリード要求にて指定された物理アドレスに対応する前記メモリマップドＩ／Ｏ領域へのライト処理又はリード処理を実行するステップ（ｃ）と、
前記コンピュータに前記デバイスドライバ・プログラムを実行させることによって、前記ライト処理又はリード処理の処理結果を前記アプリケーション・プログラムに通知するステップ（ｄ）と、
前記コンピュータに前記アプリケーション・プログラムを実行させることによって、前記処理結果を前記デバイスドライバ・プログラムから受信するステップ（ｅ）と、
を含む、周辺デバイスの動作検証方法。
【請求項２】
前記ステップ（ａ）における前記物理アドレスの通知は、前記アプリケーション・プログラムからの通知要求に応じて行なわれ、
前記通知要求は、前記周辺デバイスを識別するための識別情報を含み、
前記ステップ（ａ）は、前記識別情報に基づいて、前記メモリマップドＩ／Ｏ領域を示す物理アドレスを取得すべきデバイスを特定することをさらに含む、
請求項１に記載の周辺デバイスの動作検証方法。
【請求項３】
コンピュータに接続された周辺デバイスのメモリマップドＩ／Ｏ領域に対するアクセスが許可された第１のプログラム実行モードで実行され、前記周辺デバイスの動作検証のために使用されるデバイスドライバ・プログラムであって、
前記メモリマップドＩ／Ｏ領域へのアクセスが禁止された第２のプログラム実行モードで実行されるアプリケーション・プログラムに対して、前記メモリマップドＩ／Ｏ領域を示す物理アドレスを通知する第１の処理と、
前記アプリケーション・プログラムからなされるとともに前記物理アドレスの指定を含むライト要求又はリード要求に基づいて、指定された物理アドレスに対応する前記メモリマップドＩ／Ｏ領域へのライト処理又はリード処理を実行する第２の処理と、
前記ライト処理又はリード処理の処理結果を前記アプリケーション・プログラムに通知する第３の処理と、
を前記コンピュータに実行させる、デバイスドライバ・プログラム。
【請求項４】
前記第１の処理における前記物理アドレスの通知は、前記アプリケーション・プログラムからの通知要求に応じて行なわれ、
前記通知要求は、前記周辺デバイスを識別するための識別情報を含み、
前記第１の処理は、前記識別情報に基づいて、前記メモリマップドＩ／Ｏ領域を示す物理アドレスを取得すべきデバイスを特定する処理をさらに含む、
請求項２に記載のデバイスドライバ・プログラム。
【請求項５】
コンピュータに接続された周辺デバイスのメモリマップドＩ／Ｏ領域に対するアクセスが禁止されたユーザーモードで実行され、前記周辺デバイスの動作検証のために使用されるアプリケーション・プログラムであって、
前記メモリマップドＩ／Ｏ領域へのアクセスが許可されたカーネルモードで実行されるデバイスドライバ・プログラムに対して、前記メモリマップドＩ／Ｏ領域を示す物理アドレスを要求する処理と、
前記デバイスドライバ・プログラムから通知された前記物理アドレスを参照し、前記物理アドレスの指定を含むライト要求又はリード要求を前記デバイスドライバ・プログラムに供給する処理と、
前記ライト要求又はリード要求に応じて前記デバイスドライバ・プログラムが実行されることにより発生した前記メモリマップドＩ／Ｏ領域へのライト処理又はリード処理の結果を、前記デバイスドライバ・プログラムから受信する処理と、
を前記コンピュータに実行させる、アプリケーション・プログラム。
【請求項６】
前記物理アドレスの要求は、前記周辺デバイスを識別するための識別情報を含む、請求項５に記載のアプリケーション・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータに接続される周辺デバイスの動作検証方法、及び周辺デバイスの動作検証に使用されるデバイスドライバ・プログラム及びアプリケーション・プログラムに関する。
【背景技術】
【０００２】
Windows XP（登録商標）、UNIX（登録商標）等のメモリ保護機能を有するＯＳは、アプリケーション・プログラムの実行を開始するに際して、実行中のプログラムがアクセス可能な仮想メモリ空間をユーザー空間に制限し、カーネル空間へのアクセスを禁止する。本明細書では、アクセス可能な仮想メモリ空間がユーザー空間に制限されたプログラム実行モードは、"ユーザーモード"と呼ぶ。一方、カーネル空間へのアクセスが可能なプログラム実行モードを"カーネルモード"と呼ぶ。
【０００３】
ここで、カーネル空間とは、ＯＳや、周辺デバイスのメモリマップドＩ／Ｏ領域等が配置されるメモリ空間である。周辺デバイスとは、ＰＣＩ（Peripheral Components Interconnect）バス等を介してコンピュータシステムに接続されるハードディスクドライブ、ＤＶＤプレーヤ等の装置である。また、メモリマップドＩ／Ｏとは、周辺デバイスが有するデータレジスタ及び制御レジスタ等をコンピュータが有する物理メモリ（つまりＲＡＭ）上にマッピングし、物理メモリへの書込み処理及び読み出し処理によって、周辺デバイスへのアクセスを可能とする方式である。
【０００４】
メモリ保護機能を有するＯＳ（Operating System）を使用しているコンピュータシステムでは、ユーザーモードで実行されるアプリケーション・プログラムは、カーネルに対して周辺デバイスへのアクセスを要求する。通常、アプリケーション・プログラムによる周辺デバイスへのアクセス要求は、周辺デバイスへのアクセスのために用意された汎用的なＡＰＩ（Application Program Interface）関数を使用して行なわれる。汎用的なＡＰＩ関数は、例えばライブラリとしてアプリケーション・プログラムに提供される。アプリケーション・プログラムから周辺デバイスへのアクセス要求がＡＰＩ関数を利用して行なわれると、ＯＳ（具体的には、Windows XP（登録商標）であればＩ／Ｏマネージャ）がそれをカーネルモードで実行されるデバイスドライバに送信する。そして、デバイスドライバによって周辺デバイスの制御が実行される。なお、上述したように、メモリマップドＩ／Ｏ方式での周辺デバイスの制御は、周辺デバイスがマッピングされている物理メモリへのアクセスによって実現される。
【０００５】
特許文献１には、ユーザーモードで実行されるアプリケーション・プログラムがカーネルモードで行われるべき処理を記述したスクリプトを生成し、カーネルモードで実行されるデバイスドライバが当該スクリプトを解読して周辺デバイスの制御を実行する技術が開示されている。この技術によって、アプリケーション・プログラムは、ユーザーモードで許可されていない処理をカーネルモードで動作するデバイスドライバに実行させることができる。また、デバイスドライバの更新を行なうことなく複数の周辺デバイス制御をデバイスドライバに実行させることができる。
【０００６】
上述したように、デバイスドライバは、カーネルモードで実行されることが一般的である。しかしながら、コンピュータシステムの信頼性向上のために、周辺デバイス制御に関する処理の中からユーザーモードで実行可能な処理を分離し、これらの処理をユーザーモードで実行されるデバイスドライバ（ユーザーモード・ドライバと呼ばれる）に行なわせる技術も知られている（例えば、非特許文献１を参照）。
【特許文献１】特開２００６−１８５３８７号公報
【非特許文献１】"Introduction to the WDF User-Mode Driver Framework"、[online]、平成20年6月25日検索、インターネット<http://www.microsoft.com/whdc/driver/wdf/UMDF_intro.mspx>
【発明の開示】
【発明が解決しようとする課題】
【０００７】
従来のコンピュータシステムでは、デバイスドライバによる周辺デバイスの制御内容をアプリケーション・プログラムから詳細に指定することが困難である。よって、従来のデバイスドライバを用いた周辺デバイスの制御は、周辺デバイスの動作を検証する用途に適していないという問題がある。当該問題について以下に詳しく述べる。
【０００８】
周辺デバイスの開発段階においては、コンピュータシステムに接続された周辺デバイスがＯＳによって正常に認識されていることや、周辺デバイスの動作が正常に行われていることを、アプリケーション・プログラムを使用して詳細に検証することが求められる。そのためには、アプリケーション・プログラムが、周辺デバイスの入出力用に物理メモリ上に確保されているメモリマップドＩ／Ｏ領域を具体的に指定でき、当該領域の書き換え指示及び参照指示をアプリケーション・プログラムからデバイスドライバに対して直接的に行えることが望ましい。しかしながら、メモリマップドＩ／Ｏ領域は、カーネル空間に存在し、アプリケーション・プログラムがアクセスできる仮想アドレス空間からは隠蔽されている。このため、従来のアプリケーション・プログラムは、メモリマップドＩ／Ｏ領域を具体的に指定し、メモリマップドＩ／Ｏ領域の書き換え指示及び参照指示を直接的に行うことは困難である。
【課題を解決するための手段】
【０００９】
本発明の第１の態様は、コンピュータに接続された周辺デバイスの動作検証方法である。当該方法は、以下に示す（ａ）〜（ｅ）の処理ステップを含む。
（ａ）前記コンピュータに、前記周辺デバイスのメモリマップドＩ／Ｏ領域に対するアクセスが許可された第１のプログラム実行モードにてデバイスドライバ・プログラムを実行させることによって、前記メモリマップドＩ／Ｏ領域へのアクセスが禁止された第２のプログラム実行モードで実行されるアプリケーション・プログラムに対して、前記メモリマップドＩ／Ｏ領域を示す物理アドレスを通知すること、
（ｂ）前記コンピュータに前記アプリケーション・プログラムを実行させることによって、前記物理アドレスの指定を含むライト要求又はリード要求を前記デバイスドライバ・プログラムに供給すること、
（ｃ）前記コンピュータに前記デバイスドライバ・プログラムを実行させることによって、前記ライト要求又はリード要求にて指定された物理アドレスに対応する前記メモリマップドＩ／Ｏ領域へのライト処理又はリード処理を実行すること、
（ｄ）前記コンピュータに前記デバイスドライバ・プログラムを実行させることによって、前記ライト処理又はリード処理の処理結果を前記アプリケーション・プログラムに通知すること、及び
（ｅ）前記コンピュータに前記アプリケーション・プログラムを実行させることによって、前記処理結果を前記デバイスドライバ・プログラムから受信すること。
【００１０】
このような検証方法によって、アプリケーション・プログラムからメモリマップドＩ／Ｏ領域を具体的に指定でき、当該領域の書き換え指示及び参照指示をアプリケーション・プログラムからデバイスドライバに対して直接的に行うことができる。
【００１１】
本発明の第２の態様にかかるデバイスドライバ・プログラムは、コンピュータに接続された周辺デバイスのメモリマップドＩ／Ｏ領域に対するアクセスが許可された第１のプログラム実行モードで実行され、前記周辺デバイスの動作検証のために使用される。当該プログラムは、以下に示す処理（ａ）〜（ｃ）をコンピュータに実行させる。
（ａ）前記メモリマップドＩ／Ｏ領域へのアクセスが禁止された第２のプログラム実行モードで実行されるアプリケーション・プログラムに対して、前記メモリマップドＩ／Ｏ領域を示す物理アドレスを通知する処理、
（ｂ）前記アプリケーション・プログラムからなされるとともに前記物理アドレスの指定を含むライト要求又はリード要求に基づいて、指定された物理アドレスに対応する前記メモリマップドＩ／Ｏ領域へのライト処理又はリード処理を実行する処理、及び
（ｃ）前記ライト処理又はリード処理の処理結果を前記アプリケーション・プログラムに通知する処理。
【００１２】
本発明の第３の態様にかかるアプリケーション・プログラムは、コンピュータに接続された周辺デバイスのメモリマップドＩ／Ｏ領域に対するアクセスが禁止されたユーザーモードで実行され、前記周辺デバイスの動作検証のために使用される。当該プログラムは、以下に示す処理（ａ）〜（ｃ）をコンピュータに実行させる。
（ａ）前記メモリマップドＩ／Ｏ領域へのアクセスが許可されたカーネルモードで実行されるデバイスドライバ・プログラムに対して、前記メモリマップドＩ／Ｏ領域を示す物理アドレスを要求する処理、
（ｂ）前記デバイスドライバ・プログラムから通知された前記物理アドレスを参照し、前記物理アドレスの指定を含むライト要求又はリード要求を前記デバイスドライバ・プログラムに供給する処理、及び
（ｃ）前記ライト要求又はリード要求に応じて前記デバイスドライバ・プログラムが実行されることにより発生した前記メモリマップドＩ／Ｏ領域へのライト処理又はリード処理の結果を、前記デバイスドライバ・プログラムから受信する処理。
【００１３】
本発明の第２及び第３の態様にかかるデバイスドライバ・プログラム及びアプリケーション・プログラムを使用することによって、アプリケーション・プログラムからメモリマップドＩ／Ｏ領域を具体的に指定でき、当該領域の書き換え指示及び参照指示をアプリケーション・プログラムからデバイスドライバ・プログラムに対して直接的に行うことができる。
【発明の効果】
【００１４】
本発明の第１の態様にかかる方法によって、デバイスドライバによる周辺デバイスの制御内容をアプリケーション・プログラムから詳細に指定することが可能となる。また、本発明の第２及び第３の態様にかかるコンピュータ・プログラムによって、コンピュータに接続される周辺デバイスの動作検証に適したデバイスドライバ・プログラム及びアプリケーション・プログラムを提供できる。
【発明を実施するための最良の形態】
【００１５】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
【００１６】
図１は、本発明の実施の形態にかかるデバイスドライバ・プログラム２１及びアプリケーション・プログラム２２が実行されるコンピュータの構成例を示すブロック図である。図１に示すコンピュータ１は、周辺デバイス５０を接続可能であり、デバイスドライバ・プログラム２１及びアプリケーション・プログラム２２をＣＰＵ（Central Processing Unit）１１で実行することにより、周辺デバイス５０の検証を行なう。以下、図１に示されている各要素について順に説明する。なお、以下では、デバイスドライバ・プログラム２１を、単にデバイスドライバ２１と呼ぶ場合がある。同様に、アプリケーション・プログラム２２を、単にアプリケーション２２と呼ぶ場合がある。
【００１７】
ＣＰＵ１１は、不揮発性記憶装置１５からＲＡＭ（Random Access Memory）１２にロードされたＯＳ２０、デバイスドライバ２１及びアプリケーション２２を実行する。
【００１８】
ＲＡＭ１２は、ＣＰＵ１１に読み出されて実行されるＯＳ２０、デバイスドライバ２１並びにアプリケーション２２の格納領域、及びこれらのプログラムによって使用されるデータの格納領域として使用される。また、ＲＡＭ１２の一部は、周辺デバイス５０にアクセスするためのメモリマップドＩ／Ｏ（以下、ＭＭＩＯと呼ぶ）として利用される。
【００１９】
入力デバイス１３は、利用者による操作入力を電気信号に変換するデバイスである。例えば、入力デバイス１３は、マウス、キーボード、タッチパネル等である。
【００２０】
表示デバイス１４は、コンピュータ１による処理結果等を利用者が視認可能に表示するデバイスである。例えば、表示デバイス１４は、ＬＣＤ（Liquid Crystal Display）、ＣＲＴ（Cathode Ray Tube）ディスプレイ等である。
【００２１】
不揮発性記憶装置１５は、例えば、マスクＲＯＭ、ＥＰＲＯＭ、フラッシュメモリ若しくはハードディスクドライブ、又はこれらの組合せである。
【００２２】
デバイス・インタフェース（Ｉ／Ｆ）１６は、コンピュータ１と周辺デバイス５０の間を物理的及び電気的に接続するためのコネクタと、周辺デバイス５０のデータ転送を制御するコントローラを含む。一例として、周辺デバイスがＰＣＩ（Peripheral Components Interconnect bus）バスに接続されるＰＣＩデバイスである場合、デバイスＩ／Ｆ１６は、ＰＣＩカードを差し込むためのＰＣＩスロットや、ＰＣＩバスマスタとして機能するコントローラ等を含む。
【００２３】
ＯＳ２０は、ＣＰＵ１１、ＲＡＭ１２等のハードウェア資源を利用して、タスク管理、タスク間通信管理、メモリ管理等を実行する。これらの機能は、従来のＯＳが標準的に備える機能であるため、各機能の概略のみを以下に示す。
【００２４】
タスク管理は、タスク状態の管理、タスクに与えられた優先度の管理、起動可能な状態にあるタスクの実行順序のスケジューリング、コンテキストの保存等を行うことによって、タスクの生成、起動、終了、及び削除を行う手段を提供する。ここでタスクとは、ＯＳ２０により実現されるマルチタスク環境において並列実行されるプログラム単位を意味する。
【００２５】
タスク間通信管理は、メールボックス、セマフォ等を利用して、タスク間での通信及びタスク間の処理の同期を提供する。
【００２６】
メモリ管理は、仮想記憶の管理、タスク間通信等に用いられる共有メモリ領域の管理を含む。
【００２７】
デバイスドライバ２１は、ＯＳ２０によって提供されるカーネルモード上で実行されるプログラムである。デバイスドライバ２１は、アプリケーション２２によって指定された周辺デバイスのアクセス制御を行う。より具体的に述べると、デバイスドライバ２１は、アプリケーション２２からの要求に応じて、ＲＡＭ１２に配置された周辺デバイス５０のＭＭＩＯ領域の書き込み及び読み出しを行う。
【００２８】
ところで、ＯＳ２０によるデバイスドライバ２１の設定は、従来のデバイスドライバと同様に、周辺デバイス５０とデバイスドライバ２１との対応関係が記述された構成情報ファイル（不図示）に基づいて行えばよい。構成情報ファイルは、周辺デバイス５０を特定可能な識別情報とデバイスドライバ２１を特定可能な識別情報を含む。周辺デバイス５０がＰＣＩデバイスである場合、周辺デバイス５０を特定可能な識別情報は、Vendor ID及びDevice IDとすればよい。Vendor IDは、また、デバイスドライバ２１を特定可能な識別情報は、デバイスドライバ２１のファイル名とすればよい。
【００２９】
アプリケーション２２は、ＯＳ２０によって提供されるユーザーモード上で実行されるプログラムである。アプリケーション２２は、周辺デバイス５０に対するアクセスをデバイスドライバ２１に要求する。より具体的に述べると、アプリケーション２２は、周辺デバイス５０のＭＭＩＯが配置されているＲＡＭ１２の物理アドレスの情報をデバイスドライバ２１から取得する。そして、アプリケーション２２は、ＭＭＩＯの物理アドレスの指定を含む書込み要求（Write要求）及び読み出し要求（Read要求）をデバイスドライバ２１に対して行なうことによって、デバイスドライバ２１にＭＭＩＯの書き込み及び読み出しを実行させる。ＭＭＩＯの書き込み及び読み出しの詳細手順については後述する。
【００３０】
アプリケーション２２による周辺デバイスの指定は、例えば、アプリケーション・プログラム２２自体に周辺デバイスの識別情報を直接記述することで行えばよい。また、アプリケーション２２は、アクセス対象とする周辺デバイスを指定するために、周辺デバイスの識別情報が記述されたスクリプトファイルを参照するように記述されてもよい。同様に、周辺デバイスに対して複数のアクセス要求を実行する手順に関しても、アプリケーション・プログラム２２は、アクセス要求の手順が記述されたスクリプトファイルを参照するように記述されてもよい。
【００３１】
図２は、コンピュータ１のソフトウェア構造を示す階層図である。図２において、ＡＰＩライブラリは、デバイスドライバ２１の呼び出しのためにアプリケーション２２によって利用されるＡＰＩ関数群である。ＡＰＩ関数群の具体例は、デバイスドライバ２１のオープンを指示するためのCreateFile関数（open関数）、デバイスドライバ２１のクローズを指示するためのCloseHandle関数（close関数）、周辺デバイス５０のレジスタの書き込みを指示するためのWriteFile関数（write関数）、周辺デバイス５０のレジスタの読み出しを指示するためのReadFile関数（read関数）、及びデバイスドライバ２１に対して予め定義された特定動作を要求するためのDeviceIoControl関数（ioctl関数）である。
【００３２】
図２に示すように、ユーザーモードで実行されるアプリケーション２２は、ＡＰＩ関数を呼び出すことによって、ＭＭＩＯのWrite要求及びRead要求をデバイスドライバ２１に対して行なう。ＭＭＩＯのWrite要求及びRead要求を行なうためのＡＰＩ関数は、WriteFile関数（write関数）及びReadFile関数（read関数）を用いてもよいし、DeviceIoControl関数（ioctl関数）を使用してもよい。
【００３３】
続いて以下では、物理アドレス指定を含むアプリケーション２２からの要求に基づいて、デバイスドライバ２１が周辺デバイス５０のＭＭＩＯへアクセスする手順について詳しく説明する。図３は、周辺デバイス５０のＭＭＩＯに割り当てられた物理メモリ領域の書込み処理手順の具体例を示している。また、図４は、周辺デバイス５０のＭＭＩＯに割り当てられた物理メモリ領域の読み出し処理手順の具体例を示している。
【００３４】
図３において、ステップＳ１０１では、アプリケーション２２がCreateFile関数（open関数）を呼び出し、デバイスドライバ２１のオープンを要求する。デバイスドライバ２１が正常にオープンされた場合、アプリケーション２２は、周辺デバイス５０のＭＭＩＯの物理アドレスの通知をデバイスドライバ２１に対して要求する（ステップＳ１０２）。この要求は、例えば、DeviceIoControl関数（ioctl関数）を使って行えばよい。また、デバイスドライバ２１を複数の周辺デバイス５０の制御のために汎用的に使用可能とするため、アプリケーション２２からデバイスドライバ２１に対して行なう物理アドレスの通知要求には、対象とする周辺デバイス５０の識別情報を含めるとよい。
【００３５】
ステップＳ１０３では、デバイスドライバ２１は、アプリケーション２２によって指定された周辺デバイス５０のＭＭＩＯの物理アドレスを取得する。具体的には、ＭＭＩＯの先頭アドレスを示すベースアドレスを取得すればよい。ステップＳ１０４では、デバイスドライバ２１は、取得したＭＭＩＯの物理アドレスをアプリケーション２２に通知する。
【００３６】
ステップＳ１０５では、アプリケーション２２は、更新を求めるＭＭＩＯの物理アドレスの指定を含むＭＭＩＯの書込み要求（Write要求）をデバイスドライバ２１に対して行なう。この要求は、例えば、WriteFile関数（write関数）又はDeviceIoControl関数（ioctl関数）を使って行えばよい。なお、更新を求めるＭＭＩＯの物理アドレスの指定は、物理アドレスを直接デバイスドライバ２１に引き渡すことで行なってもよいし、ベースアドレスからのアドレスオフセットを引き渡すことにより行ってもよい。
【００３７】
ステップＳ１０６では、デバイスドライバ２１は、アプリケーション２２により指定されたＭＭＩＯへのWrite処理を実行する。これに応じて、周辺デバイス５０は、ＭＭＩＯの書込みに応じた動作を実行する（ステップＳ１０７）。
【００３８】
ステップＳ１０８では、デバイスドライバ２１は、アプリケーション２２からのWrite要求に基づくＭＭＩＯの書込み処理が正常に完了したか否かを示すWrite結果をアプリケーション２２に通知する。
【００３９】
最後に、ステップＳ１０９では、アプリケーション２２は、デバイスドライバ２１から通知されたWrite結果を取得する。
【００４０】
次に、図４を参照して、ＭＭＩＯのRead要求手順について説明する。図４に示すステップＳ１０１〜Ｓ１０４での処理内容は、図３に示した同一符号のステップ群と同様である。これらのステップＳ１０１〜Ｓ１０４は、他のWrite要求又はRead要求のために既にＭＭＩＯの物理アドレスがアプリケーション２２によって取得されている場合には、省略可能である。
【００４１】
ステップＳ２０５では、アプリケーション２２は、読み出しを求めるＭＭＩＯの物理アドレスの指定を含むＭＭＩＯの読み出し要求（Read要求）をデバイスドライバ２１に対して行なう。この要求は、例えば、ReadFile関数（read関数）又はDeviceIoControl関数（ioctl関数）を使って行えばよい。なお、読み出しを求めるＭＭＩＯの物理アドレスの指定は、物理アドレスを直接デバイスドライバ２１に引き渡すことで行なってもよいし、ベースアドレスからのアドレスオフセットを引き渡すことにより行ってもよい。
【００４２】
ステップＳ２０６では、デバイスドライバ２１は、アプリケーション２２により指定されたＭＭＩＯへのRead処理を実行する。
【００４３】
ステップＳ２０７では、デバイスドライバ２１は、ＭＭＩＯの読み出し処理が正常に完了したか否かと、正常である場合には読み出したデータ内容とを含むRead結果を、アプリケーション２２に通知する。
【００４４】
最後に、ステップＳ２０８では、アプリケーション２２は、デバイスドライバ２１から通知されたRead結果を取得する。
【００４５】
図３及び図４を用いて説明したようなＭＭＩＯのWrite要求及びRead要求を組み合わせて行なうことにより、周辺デバイス５０のアクセス制御の各過程をアプリケーション２２から詳細に検証することができる。この点について、従来技術との対比に基づいて詳しく説明する。
【００４６】
図５（ｂ）は、特許文献１に開示されたアプリケーション及びデバイスドライバによる周辺デバイスへのアクセス動作を概念的に示したタイミングチャートである。特許文献１に開示されたアクセス動作では、アプリケーションからデバイスドライバにスクリプトが送信される。当該スクリプトは、デバイスドライバが実行すべき複数の処理が記述されている。このため、図５（ｂ）に示すように、スクリプトに記述された複数の処理、すなわちＭＭＩＯへのWrite処理（Ｓ３２）及びRead処理（Ｓ３７）のデバイスドライバにおける実行が完了したのちに、アプリケーションに実行結果が通知される（Ｓ４２及びＳ４３）。つまり、周辺デバイス５０へのアクセスを要求したアプリケーションに処理が戻るのは、スクリプトの実行結果の通知（Ｓ４３）の時点である。
【００４７】
これに対して、本実施の形態では、図５（ａ）に示すようになる。すなわち、アプリケーション２２からのWrite要求（Ｓ３１）及びRead要求（s３６）の各々に対してデバイスドライバ２１から結果通知（Ｓ３３及びＳ３８）が行なわれる。したがって、本実施の形態にかかるアプリケーション２２及びデバイスドライバ２１を用いることによって、任意の値（つまり、通常は禁止された不正な値をも含む）をＭＭＩＯに書き込むことができ、さらにこの任意の値の書込みに起因して発生する周辺デバイス５０の動作を、従来に比べて細分化された処理単位で検証することができる。
【００４８】
また、デバイスドライバ２１は、アプリケーション２２から周辺デバイスの指定を受け、指定された周辺デバイス５０に選択的にアクセスできる。さらに、デバイスドライバ２１が行なう処理は、ＭＭＩＯの物理アドレス取得と、ＭＭＩＯに対する書込み及び読み出しに限定されている。これらの処理は、メモリマップドＩ／Ｏを利用する周辺デバイスに汎用的に適用可能である。このため、検証対象とする周辺デバイスが頻繁に変更される場合であっても、デバイスドライバ２１を変更することなく、アプリケーション２２の修正によって容易に対応することができる。ユーザーモードで実行されるアプリケーションの修正及び検証は、カーネルモードで実行されるデバイスドライバのそれに比べて相対的に容易である。つまり、本実施の形態のデバイスドライバ２１及びアプリケーション２２によれば、周辺デバイス５０の検証に要する作業負担を軽減することができる。
【００４９】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【図面の簡単な説明】
【００５０】
【図１】本発明の実施の形態にかかるアプリケーション及びデバイスドライバが実行されるコンピュータの構成例を示すブロック図である。
【図２】図１のコンピュータのソフトウェア構造を示す階層図である。
【図３】本発明の実施の形態にかかるアプリケーション及びデバイスドライバによるＭＭＩＯの書込み処理手順を示す図である。
【図４】本発明の実施の形態にかかるアプリケーション及びデバイスドライバによるＭＭＩＯの読み出し処理手順を示す図である。
【図５】図５（ａ）は、本発明の実施の形態にかかるアプリケーション及びデバイスドライバによる周辺デバイスへのアクセスを示すタイミングチャートである。図５（ｂ）は、従来のアプリケーション及びデバイスドライバによる周辺デバイスへのアクセスを示すタイミングチャートである。
【符号の説明】
【００５１】
１  コンピュータ
１１  ＣＰＵ（Central Processing Unit）
１２  ＲＡＭ（Random Access Memory）
１３  入力デバイス
１４  表意デバイス
１５  不揮発性記憶装置
１６  デバイス・インタフェース
２０  オペレーティングシステム（ＯＳ）
２１  デバイスドライバ・プログラム
２２  アプリケーション・プログラム
２０１  ＡＰＩ（Application Program Interface）ライブラリ
５０  周辺デバイス
【図１】
2010039644.tif 000003
【図２】
2010039644.tif 000004
【図３】
2010039644.tif 000005
【図４】
2010039644.tif 000006
【図５】
2010039644.tif 000007