JP2004318524A - デバイスドライバ制御モジュール、デバイスドライバ制御方法、デバイスドライバ制御プログラムおよびデバイスドライバ - Google Patents
デバイスドライバ制御モジュール、デバイスドライバ制御方法、デバイスドライバ制御プログラムおよびデバイスドライバ Download PDFInfo
- Publication number
- JP2004318524A JP2004318524A JP2003111925A JP2003111925A JP2004318524A JP 2004318524 A JP2004318524 A JP 2004318524A JP 2003111925 A JP2003111925 A JP 2003111925A JP 2003111925 A JP2003111925 A JP 2003111925A JP 2004318524 A JP2004318524 A JP 2004318524A
- Authority
- JP
- Japan
- Prior art keywords
- device driver
- argument
- ddi
- function
- module
- 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.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【課題】DDI関数の引数に設定された引数領域がメモリ領域上の確保可能であるか否かを判別することができなかった。
【解決手段】実行モジュール104aがDDI関数103を入力した場合、ラッパーモジュール104bにてそのDDI関数103に設定してある引数領域が必要とされるメモリ領域を確保しているか否かを判別し、確保していない場合に、エラー処理を行い、DDI関数103の処理を停止させることによって、この確保不可能なメモリ領域に対してアクセスするプリンタドライバ104の動作によってホストコンピュータ10がハングアップしてしまうことを防止する。また、かかる状況をメモリオーバーラン情報46に格納することによって、アプリケーション100側に引数設定におけるバグがあることを判別することが可能になる。
【選択図】 図3
【解決手段】実行モジュール104aがDDI関数103を入力した場合、ラッパーモジュール104bにてそのDDI関数103に設定してある引数領域が必要とされるメモリ領域を確保しているか否かを判別し、確保していない場合に、エラー処理を行い、DDI関数103の処理を停止させることによって、この確保不可能なメモリ領域に対してアクセスするプリンタドライバ104の動作によってホストコンピュータ10がハングアップしてしまうことを防止する。また、かかる状況をメモリオーバーラン情報46に格納することによって、アプリケーション100側に引数設定におけるバグがあることを判別することが可能になる。
【選択図】 図3
Description
【0001】
【発明の属する技術分野】
本発明は、デバイスドライバ制御モジュール、デバイスドライバ制御方法、デバイスドライバ制御プログラムおよびデバイスドライバに関し、特に、DDI関数に基づいた処理を実行するデバイスドライバの実行状態を制御するデバイスドライバ制御モジュール、デバイスドライバ制御方法、デバイスドライバ制御プログラムおよびデバイスドライバに関する。
【0002】
従来、この種の装置としては、コンピュータのハードウェアやソフトウェアをデバッグするものが多数知られている(例えば、特許文献1〜4を参照。)。
【0003】
【特許文献1】
特開平2−105234号公報
【特許文献2】
特開平5−151021号公報
【特許文献3】
特開昭64−44552号公報
【特許文献4】
特開平3−248275号公報
【0004】
【発明が解決しようとする課題】
上述した従来の装置においては、DDI関数の引数に設定された引数領域が必要とされるデータサイズ分のメモリ領域を確保しているか否かを判別することができなかった。この引数領域はアプリケーションにて設定されるものであり、アプリケーションが誤ってメモリ領域上に確保できない引数領域を設定してしまった場合、デバイスドライバはこの引数領域に基づいてDDI関数に基づいた処理を実行するため、処理機能が異常停止してしまうという課題があった。
【0005】
本発明は、上記課題にかんがみてなされたもので、アプリケーションが設定した引数領域が必要とされるメモリ領域を確保している場合にDDI関数に基づいた処理を実行させることが可能なデバイスドライバ制御モジュール、デバイスドライバ制御方法、デバイスドライバ制御プログラムおよびデバイスドライバの提供を目的とする。
【0006】
【課題を解決するための手段】
上記目的を達成するため、所定のデバイスを駆動する際に起動されるデバイスドライバを制御するデバイスドライバ制御モジュールであって、アプリケーションが出力する制御アプリケーションインターフェース(API)に基づいて呼び出されたデバイスドライバインターフェース(DDI)関数を検知するDDI関数検知手段と、上記検知されたDDI関数の引数に設定された引数領域を取得する引数領域取得手段と、上記取得した引数領域が必要とされるデータサイズ分のメモリ領域を確保しているか否かを判別するメモリ領域判別手段と、上記メモリ領域を確保していると判別された場合に上記引数を取得し上記DDI関数に基づいた処理を実行する上記デバイスドライバに同引数を出力して同DDI関数に基づいた処理を実行させるDDI関数処理実行制御手段とを具備することを要旨とする。 かかる構成のもと、DDI関数検知手段では、アプリケーションが出力しデバイスドライバに対して入力させられる制御アプリケーションインターフェース(API)に基づいて呼び出されたデバイスドライバインターフェース(DDI)関数を検知する。ここで、引数領域取得手段は、検知されたDDI関数の引数に設定された引数領域を取得し、メモリ領域判別手段は、取得された引数領域が必要とされるデータサイズ分のメモリ領域を確しているか否かを判別する。そして、DDI関数処理実行制御手段は、メモリ領域を確保していると判別された場合に上記引数を取得し上記DDI関数に基づいた処理を実行する上記デバイスドライバに同引数を出力して同DDI関数に基づいた処理を実行させる。これにより、アプリケーションが引数の設定を誤った場合にその状況を把握することが可能となり、不具合についてアプリケーションとデバイスドライバとの切り分けを行うことが可能になる。
【0007】
メモリ領域に引数領域を確保できない場合、この確保できない引数領域に基づいてDDI関数に基づいた処理を実行すると、デバイスドライバの組み込まれたコンピュータがハングアップしてしまう可能性がある。そこで、DDI関数処理実行制御手段は、メモリ領域判別手段にて引数領域をメモリ領域上にて確保していないと判別された場合にデバイスドライバにおけるDDI関数に基づいた処理の実行を停止させる。これにより、上述したハングアップによる不具合を防止することが可能になる。DDI関数に基づいた処理を停止させた場合、どのような理由で停止されたか否かを認識できると好適である。そこで、DDI関数処理実行制御手段は、停止状態通知手段にてDDI関数に基づいた処理の実行を停止させた場合にその旨を通知する。確保していない場合にこの状況をリアルタイムに認識することができると好適である。メモリ領域判別手段は、取得した引数領域をメモリ領域上にて確保していないと判別した場合に、その旨を認識可能な情報を所定の外部モジュールに出力する。これにより、外部モジュールを利用して引数領域をメモリ領域にて確保することが可能か否かを認識することが可能になる。
【0008】
上述した判別処理はオーバーヘッドとなり、デバイスドライバにおける処理速度のスループットが落ちる。ここで、判別する処理を行うか否かの選択を可能とし、状況に応じて適宜切り換えることができると好適である。そこで、第1モードをメモリ領域判別手段にて引数領域が必要とされるデータサイズ分のメモリ領域を確保しているか否かの判別を行わせるモードとし、第2モードを同判別を行わせないモードとした場合、モード設定手段にて何れか一方のモードを設定する。そして、DDI関数処理実行制御手段は、同モード設定手段にて第2モードが設定された場合に、DDI関数検知手段にて検知されたDDI関数に基づいた処理を直にデバイスドライバに実行させる。これにより第2モード時の処理のスループットを向上させることが可能になる。ここで、モード設定の具体的な手法の一例として、モード設定手段は、第1モードもしくは第2モードの何れか一方の設定を異なる処理系統にて動作する外部モジュールの起動状態に基づいて行う。すなわち、外部モジュールの起動を制御して間接的にモードの設定を行う。このとき、外部モジュールに第1モードもしくは第2モードに対応する所定の機能を備えさせておけば、外部モジュールの起動にリンクしてデバイスドライバにて所定のモードにおける処理を実行させることが可能になる。
【0009】
ここで、上述してきたデバイスドライバ制御モジュールは、デバイスドライバを制御する方法としても成立することは言うまでもないし、当該デバイスドライバの制御と同等の機能をコンピュータにて実現可能にするデバイスドライバプログラムとしても発明が成立することは言うまでもない。このとき、このデバイスドライバ制御プログラムの記録媒体としては、フレキシブルディスクやCD−ROM、光磁気ディスク、ICカード、ROMカートリッジ、パンチカード、バーコードなどの符号が印刷された印刷物、コンピュータの内部記憶装置(RAMやROMなどのメモリ)および外部記憶装置などコンピュータが読み取り可能な種々の媒体を利用できる。また、デバイスドライバ制御モジュールを内部モジュールとして組み込んだデバイスドライバとしても発明にかかる技術思想を実現できることは言うまでもない。
【0010】
【発明の実施の形態】
ここでは、下記の順序に従って本発明の実施形態について説明する。
(1)印刷システムの構成:
(2)コンピュータの構成:
(3)プリンタドライバ実行状態監視システムの構成:
(4)プリンタドライバ遠隔監視システムの形態:
(5)本発明との対応:
(6)まとめ:
【0011】
(1)印刷システムの構成:
図1は、本発明のドライバ実行状態監視システムを実現可能な印刷システムの構成を説明するブロック図である。なお、本発明の機能が実行されるのであれば、単体の機器であっても、複数の機器からなるシステムであっても、LAN,WAN等のネットワークを介して接続がなされ処理が行われるシステムであっても本発明を適用できる。
同図において、ホストコンピュータ10は、ROM13のプログラム用ROMあるいは外部メモリ16aに記憶された文書処理プログラム等に基づいて図形、イメージ、文字、表(表計算等を含む)等が混在した文書処理を実行するCPU11を備え、システムバス18に接続される各デバイスをCPU11が総括的に制御可能になっている。
【0012】
また、このROM13のプログラム用ROMあるいは外部メモリ16aには、CPU11の制御プログラムであるオペレーティングシステムプログラム等を記憶し、ROM13のデータ用ROMあるいは外部メモリ16aには文書処理の際に使用するフォントデータ等を記憶し、ROM13のフォント用ROMあるいは外部メモリ16aには上記文書処理等を行う際に使用する各種データを記憶する。RAM12は、CPU11の主メモリ、ワークエリア等として機能する。キーボードコントローラ(KBC)14は、接続されたキーボード14aや、図示しないマウス等のポインティングデバイスからのキー入力を制御する。CRTコントローラ(CRTC)15は、接続されたCRTディスプレイ15aの表示を制御する。ディスクコントローラ(DKC)16では、ブートプログラム、各種のアプリケーションプログラム、フォントデータ、ユーザファイル、編集ファイル、プリンタ制御コマンド生成プログラム(以下、プリンタドライバ)等を記憶するハードディスク、フレキシブルディスク等の外部メモリ16aとのアクセスを制御する。
【0013】
プリンタコントローラ(PRTC)17は、双方向性インターフェース30を介してプリンタ20に接続されて、プリンタ20との通信制御処理を実行可能になっている。なお、CPU11は、例えばRAM12上に設定された表示情報RAMへのアウトラインフォントの展開(ラスタライズ)処理を実行し、CRTディスプレイ15aでのWYSIWYGを可能としている。また、CPU11は、CRTディスプレイ15a上の図示しないマウスカーソル等で指示されたコマンドに基づいて登録された種々のウィンドウを開き、種々のデータ処理を実行する。ユーザは印刷を実行する際、印刷の設定に関するウィンドウを開き、プリンタの設定や、印刷モードの設定を含むプリンタドライバに対する印刷処理方法の設定を行えるようになっている。
【0014】
プリンタ20は、プリンタCPU21により制御される。プリンタCPU21は、ROM23のプログラム用ROMに記録された制御プログラム等あるいは外部メモリ26aに記憶された制御プログラム等に基づいて、システムバス28に接続される印刷部インターフェース25を介して印刷部(プリンタエンジン)25aに出力情報としての画像信号を出力する。また、ROM23のプログラムROMには、CPU21の制御プログラム等を記憶する。ROM23のフォント用ROMには、上記出力情報を生成する際に使用するフォントデータ等が記憶され、ROM23のデータ用ROMには、ハードディスク等の外部メモリ26aがないプリンタの場合に、ホストコンピュータ10上で利用される情報等が記憶されている。CPU21は、入力部24を介してホストコンピュータ10との通信処理が可能となっており、プリンタ20内の情報等をホストコンピュータ10に通知できる。ここで、RAM22は、CPU21の主メモリや、ワークエリア等として機能するRAMで、図示しない増設ポートに接続されるオプションRAMによりメモリ容量を拡張することができるように構成されている。
【0015】
なお、RAM22は、出力情報展開領域、環境データ格納領域、NVRAM等に用いられる。上述したハードディスク、ICカード等の外部メモリ26aは、メモリコントローラ(MC)26によりアクセスを制御される。外部メモリ26aは、オプションとして接続され、フォントデータ、エミュレーションプログラム、フォームデータ等を記憶する。また、操作パネル27は、図示しない操作のためのスイッチやLED表示器等が配設されている。また、上述した外部メモリ26aは、1個に限らず、複数個備えられ、内蔵フォントに加えてオプションカード、言語系の異なるプリンタ制御言語を解釈するプログラムを格納した外部メモリを複数接続できるように構成されていても良い。さらに、図示しないNVRAMを有し、操作パネル27からのプリンタモード設定情報を記憶するようにしても良い。
【0016】
(2)コンピュータの構成:
図2は、プリンタ等の印刷装置が直接接続されているか、あるいはネットワーク経由で接続されているホストコンピュータ10における典型的な印刷処理の処理内容を示したフローチャートである。
同図において、アプリケーション100、WindowsAPI101(Windowsは米マイクロソフト社の登録商標、以下、API101とする。)、グラフィックエンジン102、プリンタドライバ104およびシステムスプーラ105は、外部メモリ16aに保存されたファイルとして存在し、実行される場合にオペレーティングシステムやそのモジュールを利用するモジュールによってRAM12にロードされ実行されるプログラムモジュールである。また、アプリケーション100およびプリンタドライバ104は、外部メモリ16aのフレキシブルディスクや図示しないCD−ROMあるいは図示しないネットワークを経由して当該外部メモリ16aのハードディスクに追加することが可能になっている。外部メモリ16aに保存されているアプリケーション100は、RAM12にロードされ実行可能になっているグラフィックエンジン102を利用して出力(描画)を行う。
【0017】
グラフィックエンジン102は、印刷装置ごとに用意されたプリンタドライバ104を同様に外部メモリ16aからRAM12にロードし、アプリケーション100の出力をプリンタドライバ104に設定する。そして、アプリケーション100からAPI101を受け取り、対応するGDI(グラフィックデバイスインターフェース)関数に変換するとともに、DDI(デバイスドライバインターフェース)関数103に変換して、プリンタドライバ104へDDI関数103を出力する。プリンタドライバ104は、グラフィックエンジン102から受け取ったDDI関数103に基づいて、プリンタ20が認識可能なプリンタ制御コマンド、例えばPDL(ページ記述言語)に変換する。変換されたプリンタ制御コマンドは、オペレーティングシステムによってRAM12にロードされたシステムスプーラ105にて呼び出されるAPI101を経てシリアルもしくはパラレルもしくはネットワークドライバにて構成されるインターフェース20を経由してプリンタ20へ印刷データとして出力される仕組みになっている。このシステムスプーラ105は内部にプリントプロセッサ105aとプリントモニタ105bとを有し、これらの構成を動作させて所定の機能を実現する。
【0018】
ここで、上述したようにアプリケーション100にて印刷を行う際に、当該アプリケーション100からプリンタドライバ104に対して設定が行われる。この設定はAPI101もしくはDDI関数103を通じて行われたり、アプリケーション100から直接プリンタドライバ104に入力されるDEVMODE情報に基づいて行われる。プリンタドライバ104もプログラムであり、コーディングミスやソフトウェア設計不具合により内部にバグを含む場合がある。むろん、アプリケーション100もプログラムであり、内部にバグを含む場合がある。すなわち、アプリケーション100がプリンタドライバ104に対して諸設定等を行う処理にバグが存在すると、これが原因となり、プリンタドライバ104の動作が不安定になることがある。
【0019】
また、アプリケーション100の処理は正常であるが、プリンタドライバ104のバグが原因となり、当該プリンタドライバ104の動作が不安定になることがある。このとき、プリンタドライバ104の実行状態をトレースすることにより、アプリケーション100にバグがあるのか、プリンタドライバ104にバグがあるのかを切り分ける作業を行う。このとき、ホストコンピュータ10にツールプログラムを組み込んだプリンタドライバをインストールしたりする。しかし、このツールプログラムの仕様等に起因してホストコンピュータ10を再立ち上げしなければならない。従って、ホストコンピュータ10は一時的にシャットアウトされ停止する。このため、業務用のアプリケーション100の動作も停止してしまうのため、業務が滞ってしまうという問題があった。
【0020】
そこで、本実施形態では、プリンタドライバ104とは別の処理系統で実行される後述するイベント管理プログラムを起動させるとともに、プリンタドライバ104にてこのイベント管理プログラムの起動を検知可能とするとともに、イベント管理プログラムが起動された場合にプリンタドライバ104から当該プリンタドライバ104の実行状態を示す諸情報をイベント管理プログラムに対して出力し、当該イベント管理プログラムにてプリンタドライバ104の実行状態を監視することを可能にする。これによって、プリンタドライバ104が不安定になる不具合が発生した場合に、イベント管理プログラムを起動するのみで同プリンタドライバ104の実行状態をトレース可能なデバッグモードに移行することができるため、ホストコンピュータ10をシャットダウンする必要がない。従って、ホストコンピュータ10にて実施されている各種業務が停止してしまうことを防止することが可能になる。
【0021】
(3)プリンタドライバ実行状態監視システムの構成:
図3は、プリンタドライバ104の実行状態を監視するプリンタドライバ実行状態監視システムの概略構成をを示した概略構成図である。また、図4は、プリンタドライバ104の概略内部構成を示した構成図であり、図5は、イベント管理プログラム50の概略内部構成を示した構成図である。図において、プリンタドライバ104は共有メモリ40を介してイベント管理プログラム50との各種情報のやり取りを行う。本実施形態において、この各種情報は、起動/停止情報41と、API呼出情報42と、DEVMODE情報43と、DDI情報44と、メモリオーバーラン情報46とから構成されている。各種情報の内容については後述する。プリンタドライバ104は、DDI関数103を入力すると、複数の実行モジュール104aの中からこの入力したDDI関数103に対応する処理を実行可能な実行モジュール104aにてDDI関数103に基づいて処理を実行し、所定の機能を実現する。
【0022】
このとき、実行モジュール104aではこの処理に伴い、API101を呼び出し、このAPI101にて実行された処理結果に基づいてDDI関数103に対応する処理を適宜実行する。本実施形態ではこの呼び出されたAPI101を一旦ラッパーモジュール104bにて受け付ける。このラッパーモジュール104bは、実行モジュール104aがAPI101の呼び出しを行うに際して、起動される。すなわち、実行モジュール104aにて呼び出されて起動される。呼び出されたラッパーモジュール104bは、実行モジュール104aが呼び出したAPI101を横取りする。そして、イベント管理プログラム50が起動しているか否かを判別し、起動している場合には各種情報を共有メモリ40に転送し、イベント管理プログラム50にて取得可能にするとともに、実行モジュール104aが呼び出し一旦横取りしたAPI101を呼び出し、実行モジュール104aにてこのAPI101の処理結果に基づいたDDI関数103の処理を実行可能にする。これを本実施形態ではデバッグモードと言う。このイベント管理プログラム50にて取得可能にする手法を、各種情報のイベント管理プログラム50への転送と呼ぶ。ここで、本実施形態においては、共有メモリ40を介してプリンタドライバ104とイベント管理プログラム50との間における各種情報のやり取りを実現する態様を採用したが、むろん、プロセス間通信等の通信手法に基づいて各種情報をプリンタドライバ40からイベント管理プログラム50に対して出力し、取得可能にする態様を採用しても良い。
【0023】
一方、イベント管理プログラム50が起動していない場合には各種情報の共有メモリ40への転送は行わない。そして、実行モジュール104aが呼び出し一旦横取りしたAPI101を呼び出し、実行モジュール104aにてこのAPI101の処理結果に基づいたDDI関数103の処理を実行可能にする。これを本実施形態では通常モードと言う。
一方、図5に示すようにイベント管理プログラム50は、初期設定モジュール50aと、データ収集モジュール50bと、表示モジュール50cとを有する構成となっている。初期設定モジュール50aはイベント管理プログラム50が起動された際に起動状態を認識可能な情報を共有メモリ40に転送し、停止された際に停止状態を認識可能な情報を共有メモリ40に転送する。データ収集モジュール50bは、共有メモリ40に転送された各種情報を読み出して収集してRAM12もしくは外部メモリ16aに格納する機能を実現し、表示モジュール50cは収集した各種情報を所定の形式に基づいてユーザが視認可能な画面を表示する。
【0024】
ここで、上述した各種情報について説明する。起動/停止情報41は、イベント管理プログラム50の起動状態および停止状態を認識可能な情報が格納されており、プリンタドライバ104は、この起動/停止情報に基づいてイベント管理プログラム50が起動されているか否かを判別可能になっている。API呼出情報42は、実行モジュール104aから呼び出されたAPI101のAPI名称や、当該API101を呼び出した実行モジュール104aを特定可能なモジュール名称や、このAPI101の呼び出しが行われた実行モジュール104aのソースプログラムの実行行や、呼び出し日時や、エラー情報(例えば、NULLポイントが渡ってきた等)等の情報を有している。これらの情報は、API101に基づいて検出可能になっている。また、API呼出情報42は、実行モジュール104aが所定の共有資源を排他的に使用する場合に呼び出すAPI101に関する情報も有している。例えば、“Open”“Close”や、“Alloc”“Free”等の対となる処理を行い、共有資源を排他的にロックして占有するとともに、排他的な処理が終了したらこのロックを解放することを示す情報である。イベント管理プログラム50は、このAPI呼出情報42に基づいて、上述した占有/解放状態を認識可能な情報を作成し、この情報をAPI呼出情報42の一要素として格納し、当該API呼出情報42によって排他的処理の不完全な完了状態を認識することを可能にする。
【0025】
DEVMODE情報43は、印刷時にアプリケーション100からプリンタドライバ104に渡されるDEVMODE構造体に基づいた情報であり、プリンタ20のデバイス名や、バージョン番号や、プリンタドライバ104のバージョン番号や、印刷用紙の方向や、印刷用紙サイズや、印刷用紙の高さおよび幅や、拡大縮小率や、印刷部数および印刷品質(簡易印刷、低品質、高品質等)や、白黒もしくはカラー設定等の情報を有している。DDI情報44は、実行モジュール104aが入力したDDI関数103の関数名称や、この関数に設定された引数もしくはパラメータ等の情報を有している。この情報は実行モジュール104aに問い合わせて取得可能になっている。
【0026】
メモリオーバーラン情報46は、DDI関数103の引数に設定された引数領域がメモリ領域上に確保不可能な場合にその旨を通知する情報である。このDDI関数103の引数領域は、アプリケーション100がグラフィックエンジン102に引き渡すAPI101に設定されている。すなわち、アプリケーション100が出力するAPI101に基づいてDDI関数103の引数領域が構成される。ここで、アプリケーション100のバグによって設定された引数領域をメモリ領域上に確保できない場合、この確保できないメモリ領域に実行モジュール104aがアクセスすると不具合が発生する。従って、このメモリオーバーラン情報46に基づいてアプリケーション100のバグ(引数設定のバグ)を発見することが可能になる。
【0027】
ここで、上述してきた機能を実現する際にプリンタドライバ104にて実行される概略処理内容を図6のフローチャートに示す。
同図において、プリンタドライバ104はグラフィックドライバ102からDDI関数103を入力すると、複数ある実行モジュール104aのうち、当該入力したDDI関数103の処理を実行可能な実行モジュール104aにてDDI関数103の処理を実行する(ステップS100)。そして、このDDI関数103の処理においてAPI101の呼び出しが発生した場合、ラッパーモジュール104bを呼び出す。このラッパーモジュール104bは、イベント管理プログラム50が起動している場合、デバッグモードに移行し上述した各種情報を作成して共有メモリ40に転送するとともに、API101の呼び出しを行う。一方、ラッパーモジュール104bは、イベント管理プログラム50が起動していない場合、通常モードに移行して実行モジュール104aが呼び出したAPI101の呼び出しを行う(ステップS105)。
【0028】
図7は、ラッパーモジュール104bを呼び出す際に実行モジュール104aにて実行される処理内容を示したフローチャートである。
同図において、実行モジュール104aはグラフィックエンジン102からDDI関数103を入力すると(ステップS150)、実行モジュール104aに予め規定されている対応するDDI関数を引き出して、DDI関数103に基づいた処理を実行する(ステップS155)。この処理においてAPI101を呼び出す処理が発生した場合(ステップS160)、ラッパーモジュール104bを呼び出して同ラッパーモジュール104bを動作可能状態にする(ステップS165)。このラッパーモジュール104bの呼び出し方法は特に限定されず、DDI関数103に対応するDDI関数の中に起動コマンドを埋め込んでおいても良いし、ラッパーモジュール104bの呼び出し専用のAPI101を規定しておき、同API101を呼び出すことによってラッパーモジュール104bを呼び出すようにしても良い。
【0029】
図8は、API呼出情報42をイベント管理プログラム50に転送する際にラッパーモジュール104bにて実行される処理内容を示したフローチャートである。
同図において、先ず最初に実行モジュール104aからの呼び出しがあったか否かを判別する(ステップS200)。実行モジュール104aからの呼び出しがあった場合は、共有メモリ40の起動/停止情報41にアクセスする(ステップS205)。そして、この起動/停止情報41にイベント管理プログラム50が起動時に初期設定モジュール50aによって格納する起動情報が存在するか否かを判別する(ステップS210)。起動情報が存在すると判別された場合は、実行モジュール104aが呼び出したAPI101の呼び出しを行うとともに(ステップS211)、デバッグモードに移行し、実行モジュール104aが呼び出したAPI101の戻り値などに基づくAPI呼出情報を取得して(ステップS215)、API呼出情報42として共有メモリ40に転送してセットすることによって、イベント管理プログラム50に転送する(ステップS220)。一方、ステップS210にて起動情報が存在しないと判別された場合は、通常モードに移行し、実行モジュール104aが呼び出したAPI101の呼び出しを行う(ステップS225)。
【0030】
ここで、イベント管理プログラム50の初期設定モジュール50aによって起動/停止情報41を更新する際に実行される処理内容を図9のフローチャートに示す。
同図において、先ず最初にイベント管理プログラム50に対する起動操作が行われたか否かを判別する(ステップS250)。起動操作が行われたと判別した場合は、共有メモリ40にアクセスするとともに、起動/停止情報41に起動情報を格納する(ステップS255)。一方、イベント管理プログラム50に対する停止操作が行われた場合は(ステップS260)、共有メモリ40にアクセスするとともに、起動/停止情報41に停止情報を格納する(ステップS265)。このように、イベント管理プログラム50に対する起動操作もしくは停止操作に基づいて起動/停止情報41を更新することによって、プリンタドライバ104のラッパーモジュール104bはこの起動/停止情報41に格納された情報に基づいてイベント管理プログラム50の状態を判別することが可能になる。むろん、イベント管理プログラム50の状態を判別する手法は上述の手法に限定されるものではなく、イベント管理プログラム50が起動された際に、当該イベント管理プログラム50から起動通知をプリンタドライバ104に対して直接入力させるようにしても良いことは言うまでもない。
【0031】
図10は、DEVMODE情報43をイベント管理プログラム50に転送する際にラッパーモジュール104bにて実行される処理内容を示したフローチャートである。
同図において、先ず最初に実行モジュール104aからの呼び出しがあったか否かを判別する(ステップS300)。実行モジュール104aからの呼び出しがあった場合は、共有メモリ40の起動/停止情報41にアクセスする(ステップS305)。そして、この起動/停止情報41にイベント管理プログラム50が起動時に初期設定モジュール50aによって格納する起動情報が存在するか否かを判別する(ステップS310)。起動情報が存在すると判別された場合は、デバッグモードに移行し、実行モジュール104aに入力されたDDI関数103が特定のDDI関数103(DEVMODE情報が付随するDDI関数)であるか否かを判別する(ステップS315)。特定のDDI関数103であると判別された場合は、API101を呼び出したアプリケーション100からDEVMODE情報を取得し(ステップS320)、所定のデータ構造体にコピーしてこのデータ構造体を共有メモリ40に転送する。これにより、同共有メモリ40に転送したDEVMODE情報43をイベント管理プログラム50に転送する(ステップS325)。一方、ステップS310にて起動情報が存在しないと判別された場合は、通常モードに移行する。
【0032】
図11は、DDI情報44をイベント管理プログラム50に転送する際に実行モジュール104aにて実行されるる処理内容を示したフローチャートである。
同図において、実行モジュール104aはグラフィックエンジン102からDDI関数103を入力すると(ステップS400)、DDI関数103に基づいた処理を開始し(ステップS405)、ラッパーモジュール104bを呼び出して起動させる(ステップS410)。ここで、後述するラッパーモジュール104bの処理にて実行されるDDI情報44のイベント管理プログラム50への転送が完了したか否かを判別し、転送が完了するまで待機する(ステップS415)。そして、DDI関数103に基づいた処理を実行する(ステップS420)。上述したようにDDI関数情報44をイベント管理プログラム50に転送する際には、ラッパーモジュール104bの呼び出しを実行モジュール104aにDDI関数103が入力されたタイミングとする。
【0033】
図12は、DDI情報44をイベント管理プログラム50に転送する際にラッパーモジュール104bにて実行される処理内容を示したフローチャートである。
同図において、先ず最初に実行モジュール104aからの呼び出しがあったか否かを判別する(ステップS450)。実行モジュール104aからの呼び出しがあった場合は、共有メモリ40の起動/停止情報41にアクセスする(ステップS455)。そして、この起動/停止情報41にイベント管理プログラム50が起動時に初期設定モジュール50aによって格納する起動情報が存在するか否かを判別する(ステップS460)。起動情報が存在すると判別された場合は、デバッグモードに移行し、実行モジュール104aに入力されたDDI関数103のDDI関数名称や引数のパラメータを取得し(ステップS465)、所定のデータ構造体にコピーしてこのデータ構造体を共有メモリ40にDDI情報44として格納する。これにより、同共有メモリ40に転送したDDI情報44をイベント管理プログラム50に転送する(ステップS470)。そして、上述した実行モジュール104aのステップS415に対する転送完了通知を同実行モジュール104aに対して出力する(ステップS475)。一方、ステップS310にて起動情報が存在しないと判別された場合は、通常モードに移行する。
【0034】
図13は、メモリオーバーラン情報46をイベント管理プログラム50に転送する際に実行モジュール104aにて実行される処理内容を示したフローチャートである。
同図において、実行モジュール104aはグラフィックエンジン102からDDI関数103を入力すると(ステップS550)、ラッパーモジュール104bを呼び出して起動させる(ステップS555)。ここで、後述するラッパーモジュール104bの処理にて実行されるメモリ領域のチェック結果の応答を入力したか否かを判別し、応答の入力まで待機する(ステップS560)。そして、応答があった場合は、後述するラッパーモジュール104bから入力する情報が引数を設定したパラメータ構造体であるか否かを判別する(ステップS565)。入力した情報が引数を設定したパラメータ構造体であると判別された場合は、この設定された引数に基づいてDDI関数103の処理を実行する(ステップS570)。一方、入力した情報がパラメータ構造体ではないと判別された場合は、メモリ領域のチェックでエラーが発生していることを示すエラー通知であるため、所定のエラー処理を実行する(ステップS575)。このエラー処理は、例えば、DDI関数103に基づく処理を中止して、その旨をユーザに通知する表示を行う等の処理が勘案できる。
【0035】
図14は、メモリオーバーラン情報46をイベント管理プログラム50に転送する際にラッパーモジュール104bにて実行される処理内容を示したフローチャートである。
同図において、先ず最初に実行モジュール104aからの呼び出しがあったか否かを判別する(ステップS600)。実行モジュール104aからの呼び出しがあった場合は、共有メモリ40の起動/停止情報41にアクセスする(ステップS605)。そして、この起動/停止情報41にイベント管理プログラム50が起動時に初期設定モジュール50aによって格納する起動情報が存在するか否かを判別する(ステップS610)。起動情報が存在すると判別された場合は、デバッグモードに移行し、実行モジュール104aが入力したDDI関数103に設定された引数領域を取得する(ステップS615)。
【0036】
この引数領域は、例えば、DDI関数103が“DrvStartDoc”(印刷ドキュメントの転送準備ができたときに、グラフィックエンジン102から呼ばれるDDI関数)である場合、印刷情報に関する構造体へのポイントである“SURFOBJ*pso”であったり、印刷ドキュメント名の文字列へのポインタ“LPWSTR pwszDocName”であったり、ジョブIDを示す“DWORD dwJobId”であったりする。引数領域を取得すると、所定のWindowsの関数を利用してこの引数領域がメモリ領域上に存在しているか否か、すなわち引数領域をメモリ領域上に確保可能であるか否かをチェックする(ステップS620)。このWindowsの関数はチェック後に戻り値をラッパーモジュール104bに返答するので、次にこの戻り値が失敗を示す値、すなわち引数領域がメモリ領域上に確保不可能の場合には、共有メモリ40にメモリオーバーラン情報46を格納することによってイベント管理プログラム50に転送するとともに(ステップS630)、実行モジュール104aに対してエラー通知の応答を行う(ステップS635)。
【0037】
従って、共有メモリ40にメモリオーバーラン情報46が格納されていれば、メモリオーバーランの不具合があったことを認識することが可能になる。一方、Windowsの関数が返答した戻り値が有効を示す値、すなわち引数領域がメモリ領域上に確保可能の場合には、引数領域をパラメータ構造体にコピーするとともに(ステップS640)、実行モジュール104aに転送する(ステップS645)。そして、実行モジュール104aはこの転送されたパラメータ構造体に基づいて上述したステップS570にてDDI関数103に基づいた処理を実行することになる。
【0038】
図15は、各種情報を入力した際にイベント管理プログラム50のデータ収集モジュール50bにて実行される処理内容を示したフローチャートである。
同図において、所定間隔もしくはある規則に基づいて規定された間隔等に基づいて共有メモリ40にアクセスし、ラッパーモジュール104bによって当該共有メモリ40に転送された各種情報42〜46を入力する(ステップS650)。この入力した各種情報42〜46にAPI呼出情報42が含まれるか否かを判別し(ステップS655)、API呼出情報42が含まれていない場合は各種情報43〜46をRAM12もしくは外部メモリ16aに個別に格納する(ステップS690)。API呼出情報42が含まれている場合は、API呼出情報42が有しているAPI101が共有資源を占有、すなわちロックするためのAPI101(例えば、“GlobalAlloc”,“HeapAlloc”,“malloc”等)であるか否かを判別する(ステップS660)。
【0039】
占有APIであれば、ステップS690にてこの情報をAPI呼出情報42としてRAM12もしくは外部メモリ16aに個別に格納する。一方、占有APIでない場合は、判別したAPI101が占有した共有資源を解放するためのAPI101(例えば、“GlobalFree”,“HeapFree”,“free”等)を示す解放API101であるか否かを判別し(ステップS665)、解放APIでないときは、入力したAPI呼出情報42をステップS690にてRAM12もしくは外部メモリ16aに個別に格納する。解放APIであれば、以前確保された占有メモリ領域を検索し(ステップS670)、マッチするメモリ領域が有るか否かを判別する(ステップS675)。この検索は、後述する図17に示した画面構成にて「DataAddress」というカラムがあり、ここに占有したメモリ領域の先頭アドレスが表示されている。従って、解放APIである場合は、その先頭アドレスを検索し、マッチするか否かを判断することになる。マッチするメモリ領域が有る場合は、排他的処理が正常に終了したと判断し、RAM12もしくは外部メモリ16aに格納されている占有時のAPI呼出情報42を削除する(ステップS680)。一方、マッチするメモリ領域が無い場合は、占有していないメモリ領域を解放しようとしているため、エラーと判断し(ステップS685)、その旨をステップS690にてAPI呼出情報42に格納する。
【0040】
図16は、各種情報を表示する際にイベント管理プログラム50の表示モジュール50cにて実行される処理内容を示したフローチャートである。また、図17および図18は、表示モジュール50cによってCRTディスプレイ15aに表示される画面構成の一例を示した画面構成図である。
同図において、CRTディスプレイ15aにイベント管理プログラム50の所定のユーザインターフェース画面が表示されると、表示モジュール15cは、RAM12もしくは外部メモリ16aに格納した各種情報42〜46を視認可能にする画面表示を行う処理の待機状態となる。ここで、このユーザインターフェース画面から所定操作に基づいてAPI呼出情報42の表示要求が行われると(ステップS700)、RAM12もしくは外部メモリ16aからAPI呼出情報42を読み出して(ステップS705)、CRTディスプレイ15aに表示する(ステップS710)。
【0041】
ユーザインターフェース画面から所定操作に基づいてDEVMODE情報43の表示要求が行われると(ステップS715)、RAM12もしくは外部メモリ16aからDEVMODE情報43を読み出して(ステップS720)、CRTディスプレイ15aに表示する(ステップS725)。ユーザインターフェース画面から所定操作に基づいてDDI情報44の表示要求が行われると(ステップS730)、RAM12もしくは外部メモリ16aからDDI情報44を読み出して(ステップS735)、CRTディスプレイ15aに表示する(ステップS740)。ユーザインターフェース画面から所定操作に基づいてメモリオーバーラン情報46の表示要求が行われると(ステップS760)、RAM12もしくは外部メモリ16aからメモリオーバーラン情報46を読み出して(ステップS765)、CRTディスプレイ15aに表示する(ステップS770)。そして、各画面表示において、例えば、引数の表示等に基づいて不具合の解析を行うことが可能になる。
【0042】
(4)プリンタドライバ遠隔監視システムの形態:
上述してきた実施形態においては、プリンタドライバ104が動作するホストコンピュータ10にてプリンタドライバ104とは異なる処理系統にて起動可能なイベント管理プログラム50を起動させて、プリンタドライバ104にてこのイベント管理プログラム50の起動を検知した場合にデバッグモードに移行し、同プリンタドライバ104から各種情報をイベント管理プログラム50に共有メモリ40を介して転送した。一方、イベント管理プログラム50の起動が検知されない場合に通常モードに移行し、実行モジュール104aが呼び出したAPI101に基づいてDDI関数103の処理を実行可能にした。
【0043】
このようにプリンタドライバ104とは別の処理系統にて起動可能なイベント管理プログラム50の起動させることによりデバッグモードに移行できるようにしたため、プリンタドライバ104の実行状態をトレースする際にホストコンピュータ10を再立ち上げする必要がなくなった。そして、イベント管理プログラム50にて収集された各種情報は、メンテナンス部門に引き渡されて解析される。この解析によってバグがプリンタドライバ104側にあるのかアプリケーション100側にあるかを判別する。
【0044】
この場合、メンテナンス要員は、ホストコンピュータ10が設置されている現場に赴き、当該ホストコンピュータ10にイベント管理プログラム50をインストールし、もしくは既にインストールされているイベント管理プログラム50を起動するとともに、収集した各種情報をリムーバブルな記録媒体に記憶して持ち帰る必要があった。この場合、人件費や交通費などの工数がかかり好ましくない。そこで、メンテナンス部門のホストコンピュータと顧客のクライアントとをネットワークにて接続し、適宜イベント管理プログラム50をクライアントに転送して実行させるとともに、同イベント管理プログラム50にて収集した各種情報をネットワークを介してホストコンピュータ10に転送させるようにすれば、メンテナンス要員は現地に赴く必要がなくなり、工数を削減することができるとともに、各種情報に基づいた不具合の解析に直ぐに着手することが可能となり、プリンタドライバ104の実行状態を監視し解析すると言う作業の効率を向上させることが可能となり好適である。
【0045】
図19は、プリンタドライバ遠隔監視システムの概略構成を示したシステム構成図である。
同図において、ホストコンピュータA1はプリンタドライバ104のプリンタドライバ製造会社Aに設置され、インターネットに接続されている。むろん、ホストコンピュータA1はメンテナンス会社に設置しても良く、サービス提供態様に応じて適宜設置場所は変更可能である。プリンタドライバ104を購入した顧客Bは自己のクライアントコンピュータB1〜Bnにプリンタドライバ104をインストールして印刷を行う。このクライアントコンピュータB1〜Bnも同様にインターネットに接続されており、ホストコンピュータA1と相互に通信可能になっている。従って、ホストコンピュータA1からクライアントコンピュータB1〜Bnにデータを送信するとともにクライアントコンピュータB1〜Bnが備えるハードディスク等の外部メモリにこのデータを記憶することもでき、クライアントコンピュータB1〜BnからホストコンピュータA1にデータを送信するとともにホストコンピュータA1が備えるハードディスク等の外部メモリにこのデータを記憶することもできる。
【0046】
図20は、プリンタドライバ遠隔監視システムの業務内容を示した業務フローチャートである。
同図において、プリンタドライバ製造会社Aは顧客Bからプリンタドライバ104の実行環境における不具合の通知を受けると(ステップS800)、不具合が発生したクライアンコンピュータB1〜Bnを特定する相手先データをホストコンピュータA1に入力し(ステップS805)、この相手先データに基づいてホストコンピュータA1から特定したクライアントコンピュータB1〜Bnにイベント管理プログラム50を転送し、当該クライアントコンピュータB1〜Bnの外部メモリに格納する(ステップS810)。次に、イベント管理プログラム50をホストコンピュータA1側もしくはクライアントコンピュータB1〜Bnにて起動させイベント管理プログラム50の処理を実行させる(ステップS815)。そして、このイベント管理プログラム50の処理に基づいてクライアントコンピュータB1〜BnからホストコンピュータA1に転送されてきた各種情報に基づいて不具合の解析作業を行う(ステップS820)。これにより、プリンタドライバ製造会社Aはメンテナンス要員を顧客Bに派遣することなく、不具合の解析作業を行うことが可能となり、メンテナンスに費やされる時間を飛躍的に向上させることが可能となる。
【0047】
図21は、クライアントコンピュータB1〜Bnに転送されたイベント管理プログラム50にて実行される処理内容を示したフローチャートである。
同図において、外部メモリに格納されたイベント管理プログラム50に対して起動操作が行われた否かを判別し(ステップS850)、起動操作が行われた場合はイベント管理プログラム50の機能を起動する(ステップS855)。このとき、初期設定モジュール50aにてクライアントコンピュータB1〜Bnの共有メモリ40の起動/停止情報41に起動情報を格納する(ステップS860)。そして、ラッパーモジュール104bから共有メモリ40を介して各種情報42〜46を入力すると(ステップS865)、外部メモリにログデータとして収集し格納する(ステップS870)。
【0048】
所定データ量のログデータが収集されると、クライアントコンピュータB1〜BnからホストコンピュータA1に対してデータが転送可能な否かを判別する(ステップS880)。むろん、ホストコンピュータA1に転送する際のタイミングは所定データ量が収集されたタイミングに限定されるものではなく、所定周期毎に転送するようにしても良い。転送可能の場合は、各種情報42〜46のログデータをインターネットを介してホストコンピュータA1に転送し同ホストコンピュータA1の外部メモリに格納させる(ステップS885)。ホストコンピュータA1への転送が完了した場合、クライアントコンピュータB1〜Bnの外部メモリに格納されたログデータを削除する(ステップS890)。
【0049】
一方、転送不可能の場合は、未転送データとして外部メモリに保存しておく(ステップS895)。この保存した未転送データは適宜所定周期毎に転送の可否を判断して転送可能であれば順次ホストコンピュータA1に転送するようにすれば良い。以上の操作をイベント管理プログラム50が停止操作されるまで実行する(ステップS896)。なお、イベント管理プログラム50の初期設定モジュール50aは停止操作が行われた際に共有メモリ40の起動/停止情報41に停止情報を格納し、この起動/停止情報41を介してイベント管理プログラム50の停止状態を認識可能にする(ステップS897)。
【0050】
ホストコンピュータA1からクライアントコンピュータB1〜Bnに転送され、同クライアントコンピュータB1〜Bnの外部メモリに格納されたイベント管理プログラム50は、作業終了後に顧客Bの作業員に削除させるようにしても良いし、予めプリンタドライバ104のラッパーモジュール104bに所定条件を検出した際にイベント管理プログラム50を削除する機能を持たせるようにしても良い。
【0051】
図22は、転送されたイベント管理プログラム50を削除する際におけるクライアントコンピュータB1〜B3のプリンタドライバ104が備えるラッパーモジュール104bの処理内容を示したフローチャートである。
同図において、実行モジュール104aによる呼び出しがあった場合、共有メモリ40の起動/停止情報41にアクセスすることによってイベント管理プログラム50の起動状態を取得する(ステップS905)。そして、イベント管理プログラム50が停止状態が停止状態であるか否かを判別し(ステップS910)、停止状態であると判別した場合は、イベント管理プログラム50が格納されているハードディスク等の外部メモリにアクセスし(ステップS915)、イベント管理プログラム50が格納されているか否かを判別する(ステップS920)。ここで、イベント管理プログラム50が格納されていると判別した場合はイベント管理プログラム50のファイルを削除する(ステップS925)。
【0052】
図23は、ホストコンピュータA1の動作内容を示したフローチャートである。同図において、クライアントコンピュータB1〜Bnから各種情報42〜46が転送されて同各種情報42〜46を入力すると(ステップS950)、当該ホストコンピュータA1の外部メモリに格納する(ステップS955)。そして、各種情報42〜46の表示を要求する操作があった場合(ステップS960)、操作に応じて適宜各種情報42〜46の内容を視認可能にホストコンピュータA1のCRTディスプレイに表示する(ステップS965)。これによって、プリンタドライバ製造会社Aでは顧客Bに赴くことなく、顧客BのクライアントコンピュータB1〜Bnに組み込まれたプリンタドライバ104の実行状態を把握し解析することが可能になる。
【0053】
(5)本発明との対応:
ここで、本発明と上述してきた実施形態との対応関係について説明する。本発明にかかるデバイスドライバはプリンタドライバ104に対応する。また、本発明にかかる監視モジュールがイベント管理プログラム50に対応する。そして、ドライバモジュールが有する実行モジュールは実行モジュール104aに対応し、API制御モジュールはラッパーモジュール104bに対応する。
【0054】
(6)まとめ:
このように、プリンタドライバ104において、実行モジュール104aとAPI101との間にラッパーモジュール104bを介在させることによって、イベント管理モジュール50がこのラッパーモジュール104bにて実行モジュール104aが共有資源に対して占有するための占有API101や、この占有を解放するための解放API101の呼び出しを検出し、この検出に基づいてAPI情報45を作成する。従って、このAPI情報45に基づいてプリンタドライバ104の処理にて共有資源に対するデッドロックやリークの不具合が発生した場合に、その不具合の発生状況を把握することが可能になる。
【図面の簡単な説明】
【図1】プリンタ制御システムの構成を説明するブロック図。
【図2】ホストコンピュータの内部構成図。
【図3】監視システムの概略構成図。
【図4】プリンタドライバの概略構成図。
【図5】イベント管理プログラムの概略構成図。
【図6】プリンタドライバの概略フローチャート。
【図7】実行モジュールの動作内容を示したフローチャート。
【図8】ラッパーモジュールの動作内容を示したフローチャート。
【図9】イベント管理プログラムの動作内容を示したフローチャート。
【図10】ラッパーモジュールの動作内容を示したフローチャート。
【図11】実行モジュールの動作内容を示したフローチャート。
【図12】ラッパーモジュールの動作内容を示したフローチャート。
【図13】実行モジュールの動作内容を示したフローチャート。
【図14】ラッパーモジュールの動作内容を示したフローチャート。
【図15】イベント管理プログラムの動作内容を示したフローチャート。
【図16】表示モジュールの動作内容を示したフローチャート。
【図17】表示画面の画面構成を示した画面構成図。
【図18】表示画面の画面構成を示した画面構成図。
【図19】デバイスドライバ遠隔監視システムの概略構成を示したシステム構成図。
【図20】デバイスドライバ遠隔監視システムの業務内容を示した業務フローチャート。
【図21】イベント管理プログラムにて実行される処理内容を示したフローチャート。
【図22】ラッパーモジュールの処理内容を示したフローチャート。
【図23】ホストコンピュータAの動作内容を示したフローチャート。
【符号の説明】
10…ホストコンピュータ
11…CPU
12…RAM
13…ROM
14…KBC
15…CRTC
16…DKC
17…PRTC
18…システムバス
20…プリンタ
21…CPU
22…RAM
23…ROM
24…入力部
25…印刷部I/F
26…MC
30…双方向性インターフェース
40…共有メモリ
50…イベント管理プログラム
50a…初期設定モジュール
50b…データ収集モジュール
50c…表示モジュール
100…アプリケーション
101…API
102…グラフィックエンジン
103…DDI関数
104…プリンタドライバ
104a…実行モジュール
104b…ラッパーモジュール
105…システムスプーラ
【発明の属する技術分野】
本発明は、デバイスドライバ制御モジュール、デバイスドライバ制御方法、デバイスドライバ制御プログラムおよびデバイスドライバに関し、特に、DDI関数に基づいた処理を実行するデバイスドライバの実行状態を制御するデバイスドライバ制御モジュール、デバイスドライバ制御方法、デバイスドライバ制御プログラムおよびデバイスドライバに関する。
【0002】
従来、この種の装置としては、コンピュータのハードウェアやソフトウェアをデバッグするものが多数知られている(例えば、特許文献1〜4を参照。)。
【0003】
【特許文献1】
特開平2−105234号公報
【特許文献2】
特開平5−151021号公報
【特許文献3】
特開昭64−44552号公報
【特許文献4】
特開平3−248275号公報
【0004】
【発明が解決しようとする課題】
上述した従来の装置においては、DDI関数の引数に設定された引数領域が必要とされるデータサイズ分のメモリ領域を確保しているか否かを判別することができなかった。この引数領域はアプリケーションにて設定されるものであり、アプリケーションが誤ってメモリ領域上に確保できない引数領域を設定してしまった場合、デバイスドライバはこの引数領域に基づいてDDI関数に基づいた処理を実行するため、処理機能が異常停止してしまうという課題があった。
【0005】
本発明は、上記課題にかんがみてなされたもので、アプリケーションが設定した引数領域が必要とされるメモリ領域を確保している場合にDDI関数に基づいた処理を実行させることが可能なデバイスドライバ制御モジュール、デバイスドライバ制御方法、デバイスドライバ制御プログラムおよびデバイスドライバの提供を目的とする。
【0006】
【課題を解決するための手段】
上記目的を達成するため、所定のデバイスを駆動する際に起動されるデバイスドライバを制御するデバイスドライバ制御モジュールであって、アプリケーションが出力する制御アプリケーションインターフェース(API)に基づいて呼び出されたデバイスドライバインターフェース(DDI)関数を検知するDDI関数検知手段と、上記検知されたDDI関数の引数に設定された引数領域を取得する引数領域取得手段と、上記取得した引数領域が必要とされるデータサイズ分のメモリ領域を確保しているか否かを判別するメモリ領域判別手段と、上記メモリ領域を確保していると判別された場合に上記引数を取得し上記DDI関数に基づいた処理を実行する上記デバイスドライバに同引数を出力して同DDI関数に基づいた処理を実行させるDDI関数処理実行制御手段とを具備することを要旨とする。 かかる構成のもと、DDI関数検知手段では、アプリケーションが出力しデバイスドライバに対して入力させられる制御アプリケーションインターフェース(API)に基づいて呼び出されたデバイスドライバインターフェース(DDI)関数を検知する。ここで、引数領域取得手段は、検知されたDDI関数の引数に設定された引数領域を取得し、メモリ領域判別手段は、取得された引数領域が必要とされるデータサイズ分のメモリ領域を確しているか否かを判別する。そして、DDI関数処理実行制御手段は、メモリ領域を確保していると判別された場合に上記引数を取得し上記DDI関数に基づいた処理を実行する上記デバイスドライバに同引数を出力して同DDI関数に基づいた処理を実行させる。これにより、アプリケーションが引数の設定を誤った場合にその状況を把握することが可能となり、不具合についてアプリケーションとデバイスドライバとの切り分けを行うことが可能になる。
【0007】
メモリ領域に引数領域を確保できない場合、この確保できない引数領域に基づいてDDI関数に基づいた処理を実行すると、デバイスドライバの組み込まれたコンピュータがハングアップしてしまう可能性がある。そこで、DDI関数処理実行制御手段は、メモリ領域判別手段にて引数領域をメモリ領域上にて確保していないと判別された場合にデバイスドライバにおけるDDI関数に基づいた処理の実行を停止させる。これにより、上述したハングアップによる不具合を防止することが可能になる。DDI関数に基づいた処理を停止させた場合、どのような理由で停止されたか否かを認識できると好適である。そこで、DDI関数処理実行制御手段は、停止状態通知手段にてDDI関数に基づいた処理の実行を停止させた場合にその旨を通知する。確保していない場合にこの状況をリアルタイムに認識することができると好適である。メモリ領域判別手段は、取得した引数領域をメモリ領域上にて確保していないと判別した場合に、その旨を認識可能な情報を所定の外部モジュールに出力する。これにより、外部モジュールを利用して引数領域をメモリ領域にて確保することが可能か否かを認識することが可能になる。
【0008】
上述した判別処理はオーバーヘッドとなり、デバイスドライバにおける処理速度のスループットが落ちる。ここで、判別する処理を行うか否かの選択を可能とし、状況に応じて適宜切り換えることができると好適である。そこで、第1モードをメモリ領域判別手段にて引数領域が必要とされるデータサイズ分のメモリ領域を確保しているか否かの判別を行わせるモードとし、第2モードを同判別を行わせないモードとした場合、モード設定手段にて何れか一方のモードを設定する。そして、DDI関数処理実行制御手段は、同モード設定手段にて第2モードが設定された場合に、DDI関数検知手段にて検知されたDDI関数に基づいた処理を直にデバイスドライバに実行させる。これにより第2モード時の処理のスループットを向上させることが可能になる。ここで、モード設定の具体的な手法の一例として、モード設定手段は、第1モードもしくは第2モードの何れか一方の設定を異なる処理系統にて動作する外部モジュールの起動状態に基づいて行う。すなわち、外部モジュールの起動を制御して間接的にモードの設定を行う。このとき、外部モジュールに第1モードもしくは第2モードに対応する所定の機能を備えさせておけば、外部モジュールの起動にリンクしてデバイスドライバにて所定のモードにおける処理を実行させることが可能になる。
【0009】
ここで、上述してきたデバイスドライバ制御モジュールは、デバイスドライバを制御する方法としても成立することは言うまでもないし、当該デバイスドライバの制御と同等の機能をコンピュータにて実現可能にするデバイスドライバプログラムとしても発明が成立することは言うまでもない。このとき、このデバイスドライバ制御プログラムの記録媒体としては、フレキシブルディスクやCD−ROM、光磁気ディスク、ICカード、ROMカートリッジ、パンチカード、バーコードなどの符号が印刷された印刷物、コンピュータの内部記憶装置(RAMやROMなどのメモリ)および外部記憶装置などコンピュータが読み取り可能な種々の媒体を利用できる。また、デバイスドライバ制御モジュールを内部モジュールとして組み込んだデバイスドライバとしても発明にかかる技術思想を実現できることは言うまでもない。
【0010】
【発明の実施の形態】
ここでは、下記の順序に従って本発明の実施形態について説明する。
(1)印刷システムの構成:
(2)コンピュータの構成:
(3)プリンタドライバ実行状態監視システムの構成:
(4)プリンタドライバ遠隔監視システムの形態:
(5)本発明との対応:
(6)まとめ:
【0011】
(1)印刷システムの構成:
図1は、本発明のドライバ実行状態監視システムを実現可能な印刷システムの構成を説明するブロック図である。なお、本発明の機能が実行されるのであれば、単体の機器であっても、複数の機器からなるシステムであっても、LAN,WAN等のネットワークを介して接続がなされ処理が行われるシステムであっても本発明を適用できる。
同図において、ホストコンピュータ10は、ROM13のプログラム用ROMあるいは外部メモリ16aに記憶された文書処理プログラム等に基づいて図形、イメージ、文字、表(表計算等を含む)等が混在した文書処理を実行するCPU11を備え、システムバス18に接続される各デバイスをCPU11が総括的に制御可能になっている。
【0012】
また、このROM13のプログラム用ROMあるいは外部メモリ16aには、CPU11の制御プログラムであるオペレーティングシステムプログラム等を記憶し、ROM13のデータ用ROMあるいは外部メモリ16aには文書処理の際に使用するフォントデータ等を記憶し、ROM13のフォント用ROMあるいは外部メモリ16aには上記文書処理等を行う際に使用する各種データを記憶する。RAM12は、CPU11の主メモリ、ワークエリア等として機能する。キーボードコントローラ(KBC)14は、接続されたキーボード14aや、図示しないマウス等のポインティングデバイスからのキー入力を制御する。CRTコントローラ(CRTC)15は、接続されたCRTディスプレイ15aの表示を制御する。ディスクコントローラ(DKC)16では、ブートプログラム、各種のアプリケーションプログラム、フォントデータ、ユーザファイル、編集ファイル、プリンタ制御コマンド生成プログラム(以下、プリンタドライバ)等を記憶するハードディスク、フレキシブルディスク等の外部メモリ16aとのアクセスを制御する。
【0013】
プリンタコントローラ(PRTC)17は、双方向性インターフェース30を介してプリンタ20に接続されて、プリンタ20との通信制御処理を実行可能になっている。なお、CPU11は、例えばRAM12上に設定された表示情報RAMへのアウトラインフォントの展開(ラスタライズ)処理を実行し、CRTディスプレイ15aでのWYSIWYGを可能としている。また、CPU11は、CRTディスプレイ15a上の図示しないマウスカーソル等で指示されたコマンドに基づいて登録された種々のウィンドウを開き、種々のデータ処理を実行する。ユーザは印刷を実行する際、印刷の設定に関するウィンドウを開き、プリンタの設定や、印刷モードの設定を含むプリンタドライバに対する印刷処理方法の設定を行えるようになっている。
【0014】
プリンタ20は、プリンタCPU21により制御される。プリンタCPU21は、ROM23のプログラム用ROMに記録された制御プログラム等あるいは外部メモリ26aに記憶された制御プログラム等に基づいて、システムバス28に接続される印刷部インターフェース25を介して印刷部(プリンタエンジン)25aに出力情報としての画像信号を出力する。また、ROM23のプログラムROMには、CPU21の制御プログラム等を記憶する。ROM23のフォント用ROMには、上記出力情報を生成する際に使用するフォントデータ等が記憶され、ROM23のデータ用ROMには、ハードディスク等の外部メモリ26aがないプリンタの場合に、ホストコンピュータ10上で利用される情報等が記憶されている。CPU21は、入力部24を介してホストコンピュータ10との通信処理が可能となっており、プリンタ20内の情報等をホストコンピュータ10に通知できる。ここで、RAM22は、CPU21の主メモリや、ワークエリア等として機能するRAMで、図示しない増設ポートに接続されるオプションRAMによりメモリ容量を拡張することができるように構成されている。
【0015】
なお、RAM22は、出力情報展開領域、環境データ格納領域、NVRAM等に用いられる。上述したハードディスク、ICカード等の外部メモリ26aは、メモリコントローラ(MC)26によりアクセスを制御される。外部メモリ26aは、オプションとして接続され、フォントデータ、エミュレーションプログラム、フォームデータ等を記憶する。また、操作パネル27は、図示しない操作のためのスイッチやLED表示器等が配設されている。また、上述した外部メモリ26aは、1個に限らず、複数個備えられ、内蔵フォントに加えてオプションカード、言語系の異なるプリンタ制御言語を解釈するプログラムを格納した外部メモリを複数接続できるように構成されていても良い。さらに、図示しないNVRAMを有し、操作パネル27からのプリンタモード設定情報を記憶するようにしても良い。
【0016】
(2)コンピュータの構成:
図2は、プリンタ等の印刷装置が直接接続されているか、あるいはネットワーク経由で接続されているホストコンピュータ10における典型的な印刷処理の処理内容を示したフローチャートである。
同図において、アプリケーション100、WindowsAPI101(Windowsは米マイクロソフト社の登録商標、以下、API101とする。)、グラフィックエンジン102、プリンタドライバ104およびシステムスプーラ105は、外部メモリ16aに保存されたファイルとして存在し、実行される場合にオペレーティングシステムやそのモジュールを利用するモジュールによってRAM12にロードされ実行されるプログラムモジュールである。また、アプリケーション100およびプリンタドライバ104は、外部メモリ16aのフレキシブルディスクや図示しないCD−ROMあるいは図示しないネットワークを経由して当該外部メモリ16aのハードディスクに追加することが可能になっている。外部メモリ16aに保存されているアプリケーション100は、RAM12にロードされ実行可能になっているグラフィックエンジン102を利用して出力(描画)を行う。
【0017】
グラフィックエンジン102は、印刷装置ごとに用意されたプリンタドライバ104を同様に外部メモリ16aからRAM12にロードし、アプリケーション100の出力をプリンタドライバ104に設定する。そして、アプリケーション100からAPI101を受け取り、対応するGDI(グラフィックデバイスインターフェース)関数に変換するとともに、DDI(デバイスドライバインターフェース)関数103に変換して、プリンタドライバ104へDDI関数103を出力する。プリンタドライバ104は、グラフィックエンジン102から受け取ったDDI関数103に基づいて、プリンタ20が認識可能なプリンタ制御コマンド、例えばPDL(ページ記述言語)に変換する。変換されたプリンタ制御コマンドは、オペレーティングシステムによってRAM12にロードされたシステムスプーラ105にて呼び出されるAPI101を経てシリアルもしくはパラレルもしくはネットワークドライバにて構成されるインターフェース20を経由してプリンタ20へ印刷データとして出力される仕組みになっている。このシステムスプーラ105は内部にプリントプロセッサ105aとプリントモニタ105bとを有し、これらの構成を動作させて所定の機能を実現する。
【0018】
ここで、上述したようにアプリケーション100にて印刷を行う際に、当該アプリケーション100からプリンタドライバ104に対して設定が行われる。この設定はAPI101もしくはDDI関数103を通じて行われたり、アプリケーション100から直接プリンタドライバ104に入力されるDEVMODE情報に基づいて行われる。プリンタドライバ104もプログラムであり、コーディングミスやソフトウェア設計不具合により内部にバグを含む場合がある。むろん、アプリケーション100もプログラムであり、内部にバグを含む場合がある。すなわち、アプリケーション100がプリンタドライバ104に対して諸設定等を行う処理にバグが存在すると、これが原因となり、プリンタドライバ104の動作が不安定になることがある。
【0019】
また、アプリケーション100の処理は正常であるが、プリンタドライバ104のバグが原因となり、当該プリンタドライバ104の動作が不安定になることがある。このとき、プリンタドライバ104の実行状態をトレースすることにより、アプリケーション100にバグがあるのか、プリンタドライバ104にバグがあるのかを切り分ける作業を行う。このとき、ホストコンピュータ10にツールプログラムを組み込んだプリンタドライバをインストールしたりする。しかし、このツールプログラムの仕様等に起因してホストコンピュータ10を再立ち上げしなければならない。従って、ホストコンピュータ10は一時的にシャットアウトされ停止する。このため、業務用のアプリケーション100の動作も停止してしまうのため、業務が滞ってしまうという問題があった。
【0020】
そこで、本実施形態では、プリンタドライバ104とは別の処理系統で実行される後述するイベント管理プログラムを起動させるとともに、プリンタドライバ104にてこのイベント管理プログラムの起動を検知可能とするとともに、イベント管理プログラムが起動された場合にプリンタドライバ104から当該プリンタドライバ104の実行状態を示す諸情報をイベント管理プログラムに対して出力し、当該イベント管理プログラムにてプリンタドライバ104の実行状態を監視することを可能にする。これによって、プリンタドライバ104が不安定になる不具合が発生した場合に、イベント管理プログラムを起動するのみで同プリンタドライバ104の実行状態をトレース可能なデバッグモードに移行することができるため、ホストコンピュータ10をシャットダウンする必要がない。従って、ホストコンピュータ10にて実施されている各種業務が停止してしまうことを防止することが可能になる。
【0021】
(3)プリンタドライバ実行状態監視システムの構成:
図3は、プリンタドライバ104の実行状態を監視するプリンタドライバ実行状態監視システムの概略構成をを示した概略構成図である。また、図4は、プリンタドライバ104の概略内部構成を示した構成図であり、図5は、イベント管理プログラム50の概略内部構成を示した構成図である。図において、プリンタドライバ104は共有メモリ40を介してイベント管理プログラム50との各種情報のやり取りを行う。本実施形態において、この各種情報は、起動/停止情報41と、API呼出情報42と、DEVMODE情報43と、DDI情報44と、メモリオーバーラン情報46とから構成されている。各種情報の内容については後述する。プリンタドライバ104は、DDI関数103を入力すると、複数の実行モジュール104aの中からこの入力したDDI関数103に対応する処理を実行可能な実行モジュール104aにてDDI関数103に基づいて処理を実行し、所定の機能を実現する。
【0022】
このとき、実行モジュール104aではこの処理に伴い、API101を呼び出し、このAPI101にて実行された処理結果に基づいてDDI関数103に対応する処理を適宜実行する。本実施形態ではこの呼び出されたAPI101を一旦ラッパーモジュール104bにて受け付ける。このラッパーモジュール104bは、実行モジュール104aがAPI101の呼び出しを行うに際して、起動される。すなわち、実行モジュール104aにて呼び出されて起動される。呼び出されたラッパーモジュール104bは、実行モジュール104aが呼び出したAPI101を横取りする。そして、イベント管理プログラム50が起動しているか否かを判別し、起動している場合には各種情報を共有メモリ40に転送し、イベント管理プログラム50にて取得可能にするとともに、実行モジュール104aが呼び出し一旦横取りしたAPI101を呼び出し、実行モジュール104aにてこのAPI101の処理結果に基づいたDDI関数103の処理を実行可能にする。これを本実施形態ではデバッグモードと言う。このイベント管理プログラム50にて取得可能にする手法を、各種情報のイベント管理プログラム50への転送と呼ぶ。ここで、本実施形態においては、共有メモリ40を介してプリンタドライバ104とイベント管理プログラム50との間における各種情報のやり取りを実現する態様を採用したが、むろん、プロセス間通信等の通信手法に基づいて各種情報をプリンタドライバ40からイベント管理プログラム50に対して出力し、取得可能にする態様を採用しても良い。
【0023】
一方、イベント管理プログラム50が起動していない場合には各種情報の共有メモリ40への転送は行わない。そして、実行モジュール104aが呼び出し一旦横取りしたAPI101を呼び出し、実行モジュール104aにてこのAPI101の処理結果に基づいたDDI関数103の処理を実行可能にする。これを本実施形態では通常モードと言う。
一方、図5に示すようにイベント管理プログラム50は、初期設定モジュール50aと、データ収集モジュール50bと、表示モジュール50cとを有する構成となっている。初期設定モジュール50aはイベント管理プログラム50が起動された際に起動状態を認識可能な情報を共有メモリ40に転送し、停止された際に停止状態を認識可能な情報を共有メモリ40に転送する。データ収集モジュール50bは、共有メモリ40に転送された各種情報を読み出して収集してRAM12もしくは外部メモリ16aに格納する機能を実現し、表示モジュール50cは収集した各種情報を所定の形式に基づいてユーザが視認可能な画面を表示する。
【0024】
ここで、上述した各種情報について説明する。起動/停止情報41は、イベント管理プログラム50の起動状態および停止状態を認識可能な情報が格納されており、プリンタドライバ104は、この起動/停止情報に基づいてイベント管理プログラム50が起動されているか否かを判別可能になっている。API呼出情報42は、実行モジュール104aから呼び出されたAPI101のAPI名称や、当該API101を呼び出した実行モジュール104aを特定可能なモジュール名称や、このAPI101の呼び出しが行われた実行モジュール104aのソースプログラムの実行行や、呼び出し日時や、エラー情報(例えば、NULLポイントが渡ってきた等)等の情報を有している。これらの情報は、API101に基づいて検出可能になっている。また、API呼出情報42は、実行モジュール104aが所定の共有資源を排他的に使用する場合に呼び出すAPI101に関する情報も有している。例えば、“Open”“Close”や、“Alloc”“Free”等の対となる処理を行い、共有資源を排他的にロックして占有するとともに、排他的な処理が終了したらこのロックを解放することを示す情報である。イベント管理プログラム50は、このAPI呼出情報42に基づいて、上述した占有/解放状態を認識可能な情報を作成し、この情報をAPI呼出情報42の一要素として格納し、当該API呼出情報42によって排他的処理の不完全な完了状態を認識することを可能にする。
【0025】
DEVMODE情報43は、印刷時にアプリケーション100からプリンタドライバ104に渡されるDEVMODE構造体に基づいた情報であり、プリンタ20のデバイス名や、バージョン番号や、プリンタドライバ104のバージョン番号や、印刷用紙の方向や、印刷用紙サイズや、印刷用紙の高さおよび幅や、拡大縮小率や、印刷部数および印刷品質(簡易印刷、低品質、高品質等)や、白黒もしくはカラー設定等の情報を有している。DDI情報44は、実行モジュール104aが入力したDDI関数103の関数名称や、この関数に設定された引数もしくはパラメータ等の情報を有している。この情報は実行モジュール104aに問い合わせて取得可能になっている。
【0026】
メモリオーバーラン情報46は、DDI関数103の引数に設定された引数領域がメモリ領域上に確保不可能な場合にその旨を通知する情報である。このDDI関数103の引数領域は、アプリケーション100がグラフィックエンジン102に引き渡すAPI101に設定されている。すなわち、アプリケーション100が出力するAPI101に基づいてDDI関数103の引数領域が構成される。ここで、アプリケーション100のバグによって設定された引数領域をメモリ領域上に確保できない場合、この確保できないメモリ領域に実行モジュール104aがアクセスすると不具合が発生する。従って、このメモリオーバーラン情報46に基づいてアプリケーション100のバグ(引数設定のバグ)を発見することが可能になる。
【0027】
ここで、上述してきた機能を実現する際にプリンタドライバ104にて実行される概略処理内容を図6のフローチャートに示す。
同図において、プリンタドライバ104はグラフィックドライバ102からDDI関数103を入力すると、複数ある実行モジュール104aのうち、当該入力したDDI関数103の処理を実行可能な実行モジュール104aにてDDI関数103の処理を実行する(ステップS100)。そして、このDDI関数103の処理においてAPI101の呼び出しが発生した場合、ラッパーモジュール104bを呼び出す。このラッパーモジュール104bは、イベント管理プログラム50が起動している場合、デバッグモードに移行し上述した各種情報を作成して共有メモリ40に転送するとともに、API101の呼び出しを行う。一方、ラッパーモジュール104bは、イベント管理プログラム50が起動していない場合、通常モードに移行して実行モジュール104aが呼び出したAPI101の呼び出しを行う(ステップS105)。
【0028】
図7は、ラッパーモジュール104bを呼び出す際に実行モジュール104aにて実行される処理内容を示したフローチャートである。
同図において、実行モジュール104aはグラフィックエンジン102からDDI関数103を入力すると(ステップS150)、実行モジュール104aに予め規定されている対応するDDI関数を引き出して、DDI関数103に基づいた処理を実行する(ステップS155)。この処理においてAPI101を呼び出す処理が発生した場合(ステップS160)、ラッパーモジュール104bを呼び出して同ラッパーモジュール104bを動作可能状態にする(ステップS165)。このラッパーモジュール104bの呼び出し方法は特に限定されず、DDI関数103に対応するDDI関数の中に起動コマンドを埋め込んでおいても良いし、ラッパーモジュール104bの呼び出し専用のAPI101を規定しておき、同API101を呼び出すことによってラッパーモジュール104bを呼び出すようにしても良い。
【0029】
図8は、API呼出情報42をイベント管理プログラム50に転送する際にラッパーモジュール104bにて実行される処理内容を示したフローチャートである。
同図において、先ず最初に実行モジュール104aからの呼び出しがあったか否かを判別する(ステップS200)。実行モジュール104aからの呼び出しがあった場合は、共有メモリ40の起動/停止情報41にアクセスする(ステップS205)。そして、この起動/停止情報41にイベント管理プログラム50が起動時に初期設定モジュール50aによって格納する起動情報が存在するか否かを判別する(ステップS210)。起動情報が存在すると判別された場合は、実行モジュール104aが呼び出したAPI101の呼び出しを行うとともに(ステップS211)、デバッグモードに移行し、実行モジュール104aが呼び出したAPI101の戻り値などに基づくAPI呼出情報を取得して(ステップS215)、API呼出情報42として共有メモリ40に転送してセットすることによって、イベント管理プログラム50に転送する(ステップS220)。一方、ステップS210にて起動情報が存在しないと判別された場合は、通常モードに移行し、実行モジュール104aが呼び出したAPI101の呼び出しを行う(ステップS225)。
【0030】
ここで、イベント管理プログラム50の初期設定モジュール50aによって起動/停止情報41を更新する際に実行される処理内容を図9のフローチャートに示す。
同図において、先ず最初にイベント管理プログラム50に対する起動操作が行われたか否かを判別する(ステップS250)。起動操作が行われたと判別した場合は、共有メモリ40にアクセスするとともに、起動/停止情報41に起動情報を格納する(ステップS255)。一方、イベント管理プログラム50に対する停止操作が行われた場合は(ステップS260)、共有メモリ40にアクセスするとともに、起動/停止情報41に停止情報を格納する(ステップS265)。このように、イベント管理プログラム50に対する起動操作もしくは停止操作に基づいて起動/停止情報41を更新することによって、プリンタドライバ104のラッパーモジュール104bはこの起動/停止情報41に格納された情報に基づいてイベント管理プログラム50の状態を判別することが可能になる。むろん、イベント管理プログラム50の状態を判別する手法は上述の手法に限定されるものではなく、イベント管理プログラム50が起動された際に、当該イベント管理プログラム50から起動通知をプリンタドライバ104に対して直接入力させるようにしても良いことは言うまでもない。
【0031】
図10は、DEVMODE情報43をイベント管理プログラム50に転送する際にラッパーモジュール104bにて実行される処理内容を示したフローチャートである。
同図において、先ず最初に実行モジュール104aからの呼び出しがあったか否かを判別する(ステップS300)。実行モジュール104aからの呼び出しがあった場合は、共有メモリ40の起動/停止情報41にアクセスする(ステップS305)。そして、この起動/停止情報41にイベント管理プログラム50が起動時に初期設定モジュール50aによって格納する起動情報が存在するか否かを判別する(ステップS310)。起動情報が存在すると判別された場合は、デバッグモードに移行し、実行モジュール104aに入力されたDDI関数103が特定のDDI関数103(DEVMODE情報が付随するDDI関数)であるか否かを判別する(ステップS315)。特定のDDI関数103であると判別された場合は、API101を呼び出したアプリケーション100からDEVMODE情報を取得し(ステップS320)、所定のデータ構造体にコピーしてこのデータ構造体を共有メモリ40に転送する。これにより、同共有メモリ40に転送したDEVMODE情報43をイベント管理プログラム50に転送する(ステップS325)。一方、ステップS310にて起動情報が存在しないと判別された場合は、通常モードに移行する。
【0032】
図11は、DDI情報44をイベント管理プログラム50に転送する際に実行モジュール104aにて実行されるる処理内容を示したフローチャートである。
同図において、実行モジュール104aはグラフィックエンジン102からDDI関数103を入力すると(ステップS400)、DDI関数103に基づいた処理を開始し(ステップS405)、ラッパーモジュール104bを呼び出して起動させる(ステップS410)。ここで、後述するラッパーモジュール104bの処理にて実行されるDDI情報44のイベント管理プログラム50への転送が完了したか否かを判別し、転送が完了するまで待機する(ステップS415)。そして、DDI関数103に基づいた処理を実行する(ステップS420)。上述したようにDDI関数情報44をイベント管理プログラム50に転送する際には、ラッパーモジュール104bの呼び出しを実行モジュール104aにDDI関数103が入力されたタイミングとする。
【0033】
図12は、DDI情報44をイベント管理プログラム50に転送する際にラッパーモジュール104bにて実行される処理内容を示したフローチャートである。
同図において、先ず最初に実行モジュール104aからの呼び出しがあったか否かを判別する(ステップS450)。実行モジュール104aからの呼び出しがあった場合は、共有メモリ40の起動/停止情報41にアクセスする(ステップS455)。そして、この起動/停止情報41にイベント管理プログラム50が起動時に初期設定モジュール50aによって格納する起動情報が存在するか否かを判別する(ステップS460)。起動情報が存在すると判別された場合は、デバッグモードに移行し、実行モジュール104aに入力されたDDI関数103のDDI関数名称や引数のパラメータを取得し(ステップS465)、所定のデータ構造体にコピーしてこのデータ構造体を共有メモリ40にDDI情報44として格納する。これにより、同共有メモリ40に転送したDDI情報44をイベント管理プログラム50に転送する(ステップS470)。そして、上述した実行モジュール104aのステップS415に対する転送完了通知を同実行モジュール104aに対して出力する(ステップS475)。一方、ステップS310にて起動情報が存在しないと判別された場合は、通常モードに移行する。
【0034】
図13は、メモリオーバーラン情報46をイベント管理プログラム50に転送する際に実行モジュール104aにて実行される処理内容を示したフローチャートである。
同図において、実行モジュール104aはグラフィックエンジン102からDDI関数103を入力すると(ステップS550)、ラッパーモジュール104bを呼び出して起動させる(ステップS555)。ここで、後述するラッパーモジュール104bの処理にて実行されるメモリ領域のチェック結果の応答を入力したか否かを判別し、応答の入力まで待機する(ステップS560)。そして、応答があった場合は、後述するラッパーモジュール104bから入力する情報が引数を設定したパラメータ構造体であるか否かを判別する(ステップS565)。入力した情報が引数を設定したパラメータ構造体であると判別された場合は、この設定された引数に基づいてDDI関数103の処理を実行する(ステップS570)。一方、入力した情報がパラメータ構造体ではないと判別された場合は、メモリ領域のチェックでエラーが発生していることを示すエラー通知であるため、所定のエラー処理を実行する(ステップS575)。このエラー処理は、例えば、DDI関数103に基づく処理を中止して、その旨をユーザに通知する表示を行う等の処理が勘案できる。
【0035】
図14は、メモリオーバーラン情報46をイベント管理プログラム50に転送する際にラッパーモジュール104bにて実行される処理内容を示したフローチャートである。
同図において、先ず最初に実行モジュール104aからの呼び出しがあったか否かを判別する(ステップS600)。実行モジュール104aからの呼び出しがあった場合は、共有メモリ40の起動/停止情報41にアクセスする(ステップS605)。そして、この起動/停止情報41にイベント管理プログラム50が起動時に初期設定モジュール50aによって格納する起動情報が存在するか否かを判別する(ステップS610)。起動情報が存在すると判別された場合は、デバッグモードに移行し、実行モジュール104aが入力したDDI関数103に設定された引数領域を取得する(ステップS615)。
【0036】
この引数領域は、例えば、DDI関数103が“DrvStartDoc”(印刷ドキュメントの転送準備ができたときに、グラフィックエンジン102から呼ばれるDDI関数)である場合、印刷情報に関する構造体へのポイントである“SURFOBJ*pso”であったり、印刷ドキュメント名の文字列へのポインタ“LPWSTR pwszDocName”であったり、ジョブIDを示す“DWORD dwJobId”であったりする。引数領域を取得すると、所定のWindowsの関数を利用してこの引数領域がメモリ領域上に存在しているか否か、すなわち引数領域をメモリ領域上に確保可能であるか否かをチェックする(ステップS620)。このWindowsの関数はチェック後に戻り値をラッパーモジュール104bに返答するので、次にこの戻り値が失敗を示す値、すなわち引数領域がメモリ領域上に確保不可能の場合には、共有メモリ40にメモリオーバーラン情報46を格納することによってイベント管理プログラム50に転送するとともに(ステップS630)、実行モジュール104aに対してエラー通知の応答を行う(ステップS635)。
【0037】
従って、共有メモリ40にメモリオーバーラン情報46が格納されていれば、メモリオーバーランの不具合があったことを認識することが可能になる。一方、Windowsの関数が返答した戻り値が有効を示す値、すなわち引数領域がメモリ領域上に確保可能の場合には、引数領域をパラメータ構造体にコピーするとともに(ステップS640)、実行モジュール104aに転送する(ステップS645)。そして、実行モジュール104aはこの転送されたパラメータ構造体に基づいて上述したステップS570にてDDI関数103に基づいた処理を実行することになる。
【0038】
図15は、各種情報を入力した際にイベント管理プログラム50のデータ収集モジュール50bにて実行される処理内容を示したフローチャートである。
同図において、所定間隔もしくはある規則に基づいて規定された間隔等に基づいて共有メモリ40にアクセスし、ラッパーモジュール104bによって当該共有メモリ40に転送された各種情報42〜46を入力する(ステップS650)。この入力した各種情報42〜46にAPI呼出情報42が含まれるか否かを判別し(ステップS655)、API呼出情報42が含まれていない場合は各種情報43〜46をRAM12もしくは外部メモリ16aに個別に格納する(ステップS690)。API呼出情報42が含まれている場合は、API呼出情報42が有しているAPI101が共有資源を占有、すなわちロックするためのAPI101(例えば、“GlobalAlloc”,“HeapAlloc”,“malloc”等)であるか否かを判別する(ステップS660)。
【0039】
占有APIであれば、ステップS690にてこの情報をAPI呼出情報42としてRAM12もしくは外部メモリ16aに個別に格納する。一方、占有APIでない場合は、判別したAPI101が占有した共有資源を解放するためのAPI101(例えば、“GlobalFree”,“HeapFree”,“free”等)を示す解放API101であるか否かを判別し(ステップS665)、解放APIでないときは、入力したAPI呼出情報42をステップS690にてRAM12もしくは外部メモリ16aに個別に格納する。解放APIであれば、以前確保された占有メモリ領域を検索し(ステップS670)、マッチするメモリ領域が有るか否かを判別する(ステップS675)。この検索は、後述する図17に示した画面構成にて「DataAddress」というカラムがあり、ここに占有したメモリ領域の先頭アドレスが表示されている。従って、解放APIである場合は、その先頭アドレスを検索し、マッチするか否かを判断することになる。マッチするメモリ領域が有る場合は、排他的処理が正常に終了したと判断し、RAM12もしくは外部メモリ16aに格納されている占有時のAPI呼出情報42を削除する(ステップS680)。一方、マッチするメモリ領域が無い場合は、占有していないメモリ領域を解放しようとしているため、エラーと判断し(ステップS685)、その旨をステップS690にてAPI呼出情報42に格納する。
【0040】
図16は、各種情報を表示する際にイベント管理プログラム50の表示モジュール50cにて実行される処理内容を示したフローチャートである。また、図17および図18は、表示モジュール50cによってCRTディスプレイ15aに表示される画面構成の一例を示した画面構成図である。
同図において、CRTディスプレイ15aにイベント管理プログラム50の所定のユーザインターフェース画面が表示されると、表示モジュール15cは、RAM12もしくは外部メモリ16aに格納した各種情報42〜46を視認可能にする画面表示を行う処理の待機状態となる。ここで、このユーザインターフェース画面から所定操作に基づいてAPI呼出情報42の表示要求が行われると(ステップS700)、RAM12もしくは外部メモリ16aからAPI呼出情報42を読み出して(ステップS705)、CRTディスプレイ15aに表示する(ステップS710)。
【0041】
ユーザインターフェース画面から所定操作に基づいてDEVMODE情報43の表示要求が行われると(ステップS715)、RAM12もしくは外部メモリ16aからDEVMODE情報43を読み出して(ステップS720)、CRTディスプレイ15aに表示する(ステップS725)。ユーザインターフェース画面から所定操作に基づいてDDI情報44の表示要求が行われると(ステップS730)、RAM12もしくは外部メモリ16aからDDI情報44を読み出して(ステップS735)、CRTディスプレイ15aに表示する(ステップS740)。ユーザインターフェース画面から所定操作に基づいてメモリオーバーラン情報46の表示要求が行われると(ステップS760)、RAM12もしくは外部メモリ16aからメモリオーバーラン情報46を読み出して(ステップS765)、CRTディスプレイ15aに表示する(ステップS770)。そして、各画面表示において、例えば、引数の表示等に基づいて不具合の解析を行うことが可能になる。
【0042】
(4)プリンタドライバ遠隔監視システムの形態:
上述してきた実施形態においては、プリンタドライバ104が動作するホストコンピュータ10にてプリンタドライバ104とは異なる処理系統にて起動可能なイベント管理プログラム50を起動させて、プリンタドライバ104にてこのイベント管理プログラム50の起動を検知した場合にデバッグモードに移行し、同プリンタドライバ104から各種情報をイベント管理プログラム50に共有メモリ40を介して転送した。一方、イベント管理プログラム50の起動が検知されない場合に通常モードに移行し、実行モジュール104aが呼び出したAPI101に基づいてDDI関数103の処理を実行可能にした。
【0043】
このようにプリンタドライバ104とは別の処理系統にて起動可能なイベント管理プログラム50の起動させることによりデバッグモードに移行できるようにしたため、プリンタドライバ104の実行状態をトレースする際にホストコンピュータ10を再立ち上げする必要がなくなった。そして、イベント管理プログラム50にて収集された各種情報は、メンテナンス部門に引き渡されて解析される。この解析によってバグがプリンタドライバ104側にあるのかアプリケーション100側にあるかを判別する。
【0044】
この場合、メンテナンス要員は、ホストコンピュータ10が設置されている現場に赴き、当該ホストコンピュータ10にイベント管理プログラム50をインストールし、もしくは既にインストールされているイベント管理プログラム50を起動するとともに、収集した各種情報をリムーバブルな記録媒体に記憶して持ち帰る必要があった。この場合、人件費や交通費などの工数がかかり好ましくない。そこで、メンテナンス部門のホストコンピュータと顧客のクライアントとをネットワークにて接続し、適宜イベント管理プログラム50をクライアントに転送して実行させるとともに、同イベント管理プログラム50にて収集した各種情報をネットワークを介してホストコンピュータ10に転送させるようにすれば、メンテナンス要員は現地に赴く必要がなくなり、工数を削減することができるとともに、各種情報に基づいた不具合の解析に直ぐに着手することが可能となり、プリンタドライバ104の実行状態を監視し解析すると言う作業の効率を向上させることが可能となり好適である。
【0045】
図19は、プリンタドライバ遠隔監視システムの概略構成を示したシステム構成図である。
同図において、ホストコンピュータA1はプリンタドライバ104のプリンタドライバ製造会社Aに設置され、インターネットに接続されている。むろん、ホストコンピュータA1はメンテナンス会社に設置しても良く、サービス提供態様に応じて適宜設置場所は変更可能である。プリンタドライバ104を購入した顧客Bは自己のクライアントコンピュータB1〜Bnにプリンタドライバ104をインストールして印刷を行う。このクライアントコンピュータB1〜Bnも同様にインターネットに接続されており、ホストコンピュータA1と相互に通信可能になっている。従って、ホストコンピュータA1からクライアントコンピュータB1〜Bnにデータを送信するとともにクライアントコンピュータB1〜Bnが備えるハードディスク等の外部メモリにこのデータを記憶することもでき、クライアントコンピュータB1〜BnからホストコンピュータA1にデータを送信するとともにホストコンピュータA1が備えるハードディスク等の外部メモリにこのデータを記憶することもできる。
【0046】
図20は、プリンタドライバ遠隔監視システムの業務内容を示した業務フローチャートである。
同図において、プリンタドライバ製造会社Aは顧客Bからプリンタドライバ104の実行環境における不具合の通知を受けると(ステップS800)、不具合が発生したクライアンコンピュータB1〜Bnを特定する相手先データをホストコンピュータA1に入力し(ステップS805)、この相手先データに基づいてホストコンピュータA1から特定したクライアントコンピュータB1〜Bnにイベント管理プログラム50を転送し、当該クライアントコンピュータB1〜Bnの外部メモリに格納する(ステップS810)。次に、イベント管理プログラム50をホストコンピュータA1側もしくはクライアントコンピュータB1〜Bnにて起動させイベント管理プログラム50の処理を実行させる(ステップS815)。そして、このイベント管理プログラム50の処理に基づいてクライアントコンピュータB1〜BnからホストコンピュータA1に転送されてきた各種情報に基づいて不具合の解析作業を行う(ステップS820)。これにより、プリンタドライバ製造会社Aはメンテナンス要員を顧客Bに派遣することなく、不具合の解析作業を行うことが可能となり、メンテナンスに費やされる時間を飛躍的に向上させることが可能となる。
【0047】
図21は、クライアントコンピュータB1〜Bnに転送されたイベント管理プログラム50にて実行される処理内容を示したフローチャートである。
同図において、外部メモリに格納されたイベント管理プログラム50に対して起動操作が行われた否かを判別し(ステップS850)、起動操作が行われた場合はイベント管理プログラム50の機能を起動する(ステップS855)。このとき、初期設定モジュール50aにてクライアントコンピュータB1〜Bnの共有メモリ40の起動/停止情報41に起動情報を格納する(ステップS860)。そして、ラッパーモジュール104bから共有メモリ40を介して各種情報42〜46を入力すると(ステップS865)、外部メモリにログデータとして収集し格納する(ステップS870)。
【0048】
所定データ量のログデータが収集されると、クライアントコンピュータB1〜BnからホストコンピュータA1に対してデータが転送可能な否かを判別する(ステップS880)。むろん、ホストコンピュータA1に転送する際のタイミングは所定データ量が収集されたタイミングに限定されるものではなく、所定周期毎に転送するようにしても良い。転送可能の場合は、各種情報42〜46のログデータをインターネットを介してホストコンピュータA1に転送し同ホストコンピュータA1の外部メモリに格納させる(ステップS885)。ホストコンピュータA1への転送が完了した場合、クライアントコンピュータB1〜Bnの外部メモリに格納されたログデータを削除する(ステップS890)。
【0049】
一方、転送不可能の場合は、未転送データとして外部メモリに保存しておく(ステップS895)。この保存した未転送データは適宜所定周期毎に転送の可否を判断して転送可能であれば順次ホストコンピュータA1に転送するようにすれば良い。以上の操作をイベント管理プログラム50が停止操作されるまで実行する(ステップS896)。なお、イベント管理プログラム50の初期設定モジュール50aは停止操作が行われた際に共有メモリ40の起動/停止情報41に停止情報を格納し、この起動/停止情報41を介してイベント管理プログラム50の停止状態を認識可能にする(ステップS897)。
【0050】
ホストコンピュータA1からクライアントコンピュータB1〜Bnに転送され、同クライアントコンピュータB1〜Bnの外部メモリに格納されたイベント管理プログラム50は、作業終了後に顧客Bの作業員に削除させるようにしても良いし、予めプリンタドライバ104のラッパーモジュール104bに所定条件を検出した際にイベント管理プログラム50を削除する機能を持たせるようにしても良い。
【0051】
図22は、転送されたイベント管理プログラム50を削除する際におけるクライアントコンピュータB1〜B3のプリンタドライバ104が備えるラッパーモジュール104bの処理内容を示したフローチャートである。
同図において、実行モジュール104aによる呼び出しがあった場合、共有メモリ40の起動/停止情報41にアクセスすることによってイベント管理プログラム50の起動状態を取得する(ステップS905)。そして、イベント管理プログラム50が停止状態が停止状態であるか否かを判別し(ステップS910)、停止状態であると判別した場合は、イベント管理プログラム50が格納されているハードディスク等の外部メモリにアクセスし(ステップS915)、イベント管理プログラム50が格納されているか否かを判別する(ステップS920)。ここで、イベント管理プログラム50が格納されていると判別した場合はイベント管理プログラム50のファイルを削除する(ステップS925)。
【0052】
図23は、ホストコンピュータA1の動作内容を示したフローチャートである。同図において、クライアントコンピュータB1〜Bnから各種情報42〜46が転送されて同各種情報42〜46を入力すると(ステップS950)、当該ホストコンピュータA1の外部メモリに格納する(ステップS955)。そして、各種情報42〜46の表示を要求する操作があった場合(ステップS960)、操作に応じて適宜各種情報42〜46の内容を視認可能にホストコンピュータA1のCRTディスプレイに表示する(ステップS965)。これによって、プリンタドライバ製造会社Aでは顧客Bに赴くことなく、顧客BのクライアントコンピュータB1〜Bnに組み込まれたプリンタドライバ104の実行状態を把握し解析することが可能になる。
【0053】
(5)本発明との対応:
ここで、本発明と上述してきた実施形態との対応関係について説明する。本発明にかかるデバイスドライバはプリンタドライバ104に対応する。また、本発明にかかる監視モジュールがイベント管理プログラム50に対応する。そして、ドライバモジュールが有する実行モジュールは実行モジュール104aに対応し、API制御モジュールはラッパーモジュール104bに対応する。
【0054】
(6)まとめ:
このように、プリンタドライバ104において、実行モジュール104aとAPI101との間にラッパーモジュール104bを介在させることによって、イベント管理モジュール50がこのラッパーモジュール104bにて実行モジュール104aが共有資源に対して占有するための占有API101や、この占有を解放するための解放API101の呼び出しを検出し、この検出に基づいてAPI情報45を作成する。従って、このAPI情報45に基づいてプリンタドライバ104の処理にて共有資源に対するデッドロックやリークの不具合が発生した場合に、その不具合の発生状況を把握することが可能になる。
【図面の簡単な説明】
【図1】プリンタ制御システムの構成を説明するブロック図。
【図2】ホストコンピュータの内部構成図。
【図3】監視システムの概略構成図。
【図4】プリンタドライバの概略構成図。
【図5】イベント管理プログラムの概略構成図。
【図6】プリンタドライバの概略フローチャート。
【図7】実行モジュールの動作内容を示したフローチャート。
【図8】ラッパーモジュールの動作内容を示したフローチャート。
【図9】イベント管理プログラムの動作内容を示したフローチャート。
【図10】ラッパーモジュールの動作内容を示したフローチャート。
【図11】実行モジュールの動作内容を示したフローチャート。
【図12】ラッパーモジュールの動作内容を示したフローチャート。
【図13】実行モジュールの動作内容を示したフローチャート。
【図14】ラッパーモジュールの動作内容を示したフローチャート。
【図15】イベント管理プログラムの動作内容を示したフローチャート。
【図16】表示モジュールの動作内容を示したフローチャート。
【図17】表示画面の画面構成を示した画面構成図。
【図18】表示画面の画面構成を示した画面構成図。
【図19】デバイスドライバ遠隔監視システムの概略構成を示したシステム構成図。
【図20】デバイスドライバ遠隔監視システムの業務内容を示した業務フローチャート。
【図21】イベント管理プログラムにて実行される処理内容を示したフローチャート。
【図22】ラッパーモジュールの処理内容を示したフローチャート。
【図23】ホストコンピュータAの動作内容を示したフローチャート。
【符号の説明】
10…ホストコンピュータ
11…CPU
12…RAM
13…ROM
14…KBC
15…CRTC
16…DKC
17…PRTC
18…システムバス
20…プリンタ
21…CPU
22…RAM
23…ROM
24…入力部
25…印刷部I/F
26…MC
30…双方向性インターフェース
40…共有メモリ
50…イベント管理プログラム
50a…初期設定モジュール
50b…データ収集モジュール
50c…表示モジュール
100…アプリケーション
101…API
102…グラフィックエンジン
103…DDI関数
104…プリンタドライバ
104a…実行モジュール
104b…ラッパーモジュール
105…システムスプーラ
Claims (12)
- 所定のデバイスを駆動する際に起動されるデバイスドライバを制御するデバイスドライバ制御モジュールであって、
アプリケーションが出力する制御アプリケーションインターフェース(API)に基づいて呼び出されたデバイスドライバインターフェース(DDI)関数を検知するDDI関数検知手段と、
上記検知されたDDI関数の引数に設定された引数領域を取得する引数領域取得手段と、
上記取得した引数領域が必要とされるデータサイズ分のメモリ領域を確保しているか否かを判別するメモリ領域判別手段と、
上記メモリ領域を確保している判別された場合に上記引数を取得し上記DDI関数に基づいた処理を実行する上記デバイスドライバに同引数を出力して同DDI関数に基づいた処理を実行させるDDI関数処理実行制御手段とを具備することを特徴とするデバイスドライバ制御モジュール。 - 上記DDI関数処理実行制御手段は、上記メモリ領域判別手段にて上記引数領域をメモリ領域上にて確保していないと判別された場合に上記デバイスドライバにおける上記DDI関数に基づいた処理の実行を停止させることを特徴とする上記請求項1に記載のデバイスドライバ制御モジュール。
- 上記DDI関数処理実行制御手段は、上記DDI関数に基づいた処理の実行を停止させた場合にその旨を通知する停止状態通知手段を有することを特徴とする上記請求項2に記載のデバイスドライバ制御モジュール。
- 上記メモリ領域判別手段は、上記取得した引数領域をメモリ領域上にて確保していないと判別した場合にその旨を認識可能な情報を所定の外部モジュールに出力することを特徴とする上記請求項1〜請求項3のいずれかに記載のデバイスドライバ制御モジュール。
- 上記メモリ領域判別手段にて上記引数領域が必要とされるデータサイズ分のメモリ領域を確保しているか否かの判別を行わせる第1モードと、同判別を行わせない第2モードとの何れか一方を設定するモード設定手段を有し、上記DDI関数処理実行制御手段は、同モード設定手段にて上記第2モードが設定された場合に上記DDI関数検知手段にて検知されたDDI関数に基づいた処理を直に上記デバイスドライバに実行させることを特徴とする上記請求項1〜請求項4のいずれかに記載のデバイスドライバ制御モジュール。
- 上記モード設定手段は、上記第1モードもしくは第2モードの何れか一方の設定を異なる処理系統にて動作する外部モジュールの起動状態に基づいて設定することを特徴とする上記請求項5に記載のデバイスドライバ制御モジュール。
- 所定のデバイスを駆動する際に起動されるデバイスドライバを制御するデバイスドライバ制御方法であって、
アプリケーションが出力する制御アプリケーションインターフェース(API)に基づいて呼び出されたデバイスドライバインターフェース(DDI)関数を検知するDDI関数検知工程と、
上記検知されたDDI関数の引数に設定された引数領域を取得する引数領域取得工程と、
上記取得した引数領域が必要とされるデータサイズ分のメモリ領域を確保しているか否かを判別するメモリ領域判別工程と、
上記メモリ領域を確保している判別された場合に上記引数を取得し上記DDI関数に基づいた処理を実行する上記デバイスドライバに同引数を出力して同DDI関数に基づいた処理を実行させるDDI関数処理実行制御工程とを具備することを特徴とするデバイスドライバ制御方法。 - 所定のデバイスを駆動する際に起動されるデバイスドライバを制御する機能をコンピュータにて実現可能にするデバイスドライバ制御プログラムであって、
アプリケーションが出力する制御アプリケーションインターフェース(API)に基づいて呼び出されたデバイスドライバインターフェース(DDI)関数を検知するDDI関数検知機能と、
上記検知されたDDI関数の引数に設定された引数領域を取得する引数領域取得機能と、
上記取得した引数領域が必要とされるデータサイズ分のメモリ領域を確保しているか否かを判別するメモリ領域判別機能と、
上記メモリ領域を確保していると判別された場合に上記引数を取得し上記DDI関数に基づいた処理を実行する上記デバイスドライバに同引数を出力して同DDI関数に基づいた処理を実行させるDDI関数処理実行制御機能とを具備することを特徴とするデバイスドライバ制御プログラム。 - 所定のデバイスを駆動する際に起動されるデバイスドライバであって、
DDI関数に基づいて所定の機能を実行可能な実行モジュールと、
アプリケーションが出力する制御アプリケーションインターフェース(API)に基づいて呼び出されたデバイスドライバインターフェース(DDI)関数を検知するDDI関数検知手段と、上記検知されたDDI関数の引数に設定された引数領域を取得する引数領域取得手段と、上記取得した引数領域が必要とされるデータサイズ分のメモリ領域を確保しているか否かを判別するメモリ領域判別手段と、上記メモリ領域を確保していると判別された場合に上記引数を取得し上記実行モジュールに引き渡し同DDI関数に基づいた処理を実行させるDDI関数処理実行制御手段とを有するラッパーモジュールとを具備することを特徴とするデバイスドライバ。 - 上記ラッパーモジュールは、異なる処理系統にて動作する監視モジュールに対して上記メモリ領域判別手段にて上記引数領域をメモリ領域上に確保していないと判別された場合にその旨を認識可能な所定の監視情報を出力することを特徴とする上記請求項9に記載のデバイスドライバ。
- 上記ラッパーモジュールは、上記監視モジュールが起動されているか否かを判別する起動状態判別手段を有し、同起動状態判別手段にて監視モジュールが起動していると判別された場合に上記監視情報を出力することを特徴とする上記請求項10のいずれかに記載のデバイスドライバ。
- 上記DDI関数処理実行手段は、上記メモリ領域判別手段にて上記引数領域をメモリ領域上にて確保していないと判別された場合に上記実行モジュールにて実行される上記DDI関数に基づいた処理を停止させることを特徴とする上記請求項9〜請求項11のいずれかに記載のデバイスドライバ。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003111925A JP2004318524A (ja) | 2003-04-16 | 2003-04-16 | デバイスドライバ制御モジュール、デバイスドライバ制御方法、デバイスドライバ制御プログラムおよびデバイスドライバ |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003111925A JP2004318524A (ja) | 2003-04-16 | 2003-04-16 | デバイスドライバ制御モジュール、デバイスドライバ制御方法、デバイスドライバ制御プログラムおよびデバイスドライバ |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004318524A true JP2004318524A (ja) | 2004-11-11 |
Family
ID=33472350
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003111925A Pending JP2004318524A (ja) | 2003-04-16 | 2003-04-16 | デバイスドライバ制御モジュール、デバイスドライバ制御方法、デバイスドライバ制御プログラムおよびデバイスドライバ |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004318524A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006172206A (ja) * | 2004-12-16 | 2006-06-29 | Canon Inc | 情報処理装置及びその制御方法、コンピュータプログラム及び記憶媒体 |
JP2006172205A (ja) * | 2004-12-16 | 2006-06-29 | Canon Inc | 情報処理装置及びその制御方法、コンピュータプログラム及び記憶媒体 |
-
2003
- 2003-04-16 JP JP2003111925A patent/JP2004318524A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006172206A (ja) * | 2004-12-16 | 2006-06-29 | Canon Inc | 情報処理装置及びその制御方法、コンピュータプログラム及び記憶媒体 |
JP2006172205A (ja) * | 2004-12-16 | 2006-06-29 | Canon Inc | 情報処理装置及びその制御方法、コンピュータプログラム及び記憶媒体 |
US7886279B2 (en) | 2004-12-16 | 2011-02-08 | Canon Kabushiki Kaisha | Information processing apparatus, control method therefor, computer program, and storage medium |
JP4681868B2 (ja) * | 2004-12-16 | 2011-05-11 | キヤノン株式会社 | 情報処理装置及びその制御方法、コンピュータプログラム及び記憶媒体 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7199890B2 (en) | Print control method and apparatus | |
US7916330B2 (en) | Driver selection for printer drawing conversion | |
US7426046B2 (en) | Information processing apparatus, information processing method, information processing program, and storage medium | |
US7180619B2 (en) | Methods and systems for recovering a failed print job | |
US7707325B2 (en) | Job status monitoring system, job status monitoring method, program, and storage medium | |
US8797561B2 (en) | Printing control program and program recording media | |
JPH10333846A (ja) | 出力制御方法及び装置 | |
US8625144B2 (en) | Apparatuses and methods for switching between printing apparatuses | |
US20110026079A1 (en) | Information processing apparatus, information processing method, and storage medium | |
JP2007323191A (ja) | 印刷システム、情報処理装置、印刷ログ情報抽出方法、及びプログラム | |
KR100720922B1 (ko) | 인쇄 제어 프로그램을 격납한 전자계산기, 및 인쇄 제어용 프로그램을 기록한 전자계산기로 읽을 수 있는 저장매체 | |
US20070263252A1 (en) | Multiple-port print device | |
US20070124462A1 (en) | State Information Acquisition Processing Program, State Information Acquisition Apparatus, and State Information Acquisition System | |
JP2004318524A (ja) | デバイスドライバ制御モジュール、デバイスドライバ制御方法、デバイスドライバ制御プログラムおよびデバイスドライバ | |
JP4037079B2 (ja) | 画像形成装置、プロセス監視方法およびこの方法をコンピュータに実行させるプログラム | |
JP2004318522A (ja) | ドライバ実行状態監視システム、ドライバ実行状態監視方法およびドライバ実行状態監視プログラム | |
JP2004318523A (ja) | デバイスドライバ、デバイスドライバの制御方法およびデバイスドライバプログラム | |
JP2004295248A (ja) | デバイスドライバ遠隔監視システム | |
US5778170A (en) | Data processing system with integral diagnostic procedure | |
JP5014461B2 (ja) | ジョブ状態監視システム、ジョブ状態監視方法、プログラム及び記憶媒体 | |
JP2000099221A (ja) | 複合画像処理装置および複合画像処理装置のデータ処理方法およびコンピュータが読み出し可能なプログラムを格納した記憶媒体 | |
JP6839389B2 (ja) | 画像処理及びエラー対処システム並びにリニアライズド及び非リニアライズド・ポータブル・ドキュメント・フォーマット(Pdf)ファイルの印刷方法 | |
JP2003263286A (ja) | 計算機,プリントサーバ,プリンタ及びそれらを用いた印刷システム。 | |
JP2002248840A (ja) | 印刷制御装置およびデータ処理方法および記憶媒体 | |
CN100380309C (zh) | 数据处理装置、打印设定处理方法 |