JP2004318523A - デバイスドライバ、デバイスドライバの制御方法およびデバイスドライバプログラム - Google Patents
デバイスドライバ、デバイスドライバの制御方法およびデバイスドライバプログラム Download PDFInfo
- Publication number
- JP2004318523A JP2004318523A JP2003111924A JP2003111924A JP2004318523A JP 2004318523 A JP2004318523 A JP 2004318523A JP 2003111924 A JP2003111924 A JP 2003111924A JP 2003111924 A JP2003111924 A JP 2003111924A JP 2004318523 A JP2004318523 A JP 2004318523A
- Authority
- JP
- Japan
- Prior art keywords
- api
- information
- module
- execution
- device driver
- 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
【課題】デバイスドライバにおける内部処理の実行状態を把握することができないという課題があった。
【解決手段】プリンタドライバ104において、実行モジュール104aとAPI101との間にラッパーモジュール104bを介在させることによって、イベント管理モジュール50がこのラッパーモジュール104bにて実行モジュール104aが共有資源に対して占有するための占有API101や、この占有を解放するための解放API101の呼び出しを検出し、この検出に基づいてAPI情報45を作成する。従って、このAPI情報45に基づいてプリンタドライバ104の処理にて共有資源に対するデッドロックやリークの不具合が発生した場合に、その不具合の発生状況を把握することが可能になる。
【選択図】 図3
【解決手段】プリンタドライバ104において、実行モジュール104aとAPI101との間にラッパーモジュール104bを介在させることによって、イベント管理モジュール50がこのラッパーモジュール104bにて実行モジュール104aが共有資源に対して占有するための占有API101や、この占有を解放するための解放API101の呼び出しを検出し、この検出に基づいてAPI情報45を作成する。従って、このAPI情報45に基づいてプリンタドライバ104の処理にて共有資源に対するデッドロックやリークの不具合が発生した場合に、その不具合の発生状況を把握することが可能になる。
【選択図】 図3
Description
【0001】
【発明の属する技術分野】
本発明は、デバイスドライバ、デバイスドライバの制御方法およびデバイスドライバプログラムに関し、特に、APIを呼び出しつつ所定の機能を実行するデバイスドライバ、デバイスドライバの制御方法およびデバイスドライバプログラムに関する。
【0002】
【従来の技術】
従来、この種の装置としては、コンピュータのハードウェアやソフトウェアをデバッグするものが多数知られている(例えば、特許文献1〜4を参照。)。
【0003】
【特許文献1】
特開平2−105234号公報
【特許文献2】
特開平5−151021号公報
【特許文献3】
特開昭64−44552号公報
【特許文献4】
特開平3−248275号公報
【0004】
【発明が解決しようとする課題】
上述した従来の装置においては、デバイスドライバにおける内部処理の実行状態を把握することができないという課題があった。
【0005】
本発明は、上記課題にかんがみてなされたもので、デバイスドライバにてAPIに関する関連情報を出力することによって同関連情報を認識可能にすることができるデバイスドライバ、デバイスドライバの制御方法およびデバイスドライバプログラムの提供を目的とする。
【0006】
【課題を解決するための手段】
上記目的を達成するため、所定のデバイスを駆動する際に起動されるデバイスドライバであって、上記デバイスを駆動する際に、オペレーティングシステムに対して制御アプリケーションプログラミングインターフェース(API)の呼び出しを行いつつ、同APIに基づいた所定の機能を実行可能な実行モジュールと、上記オペレーティングシステムと上記実行モジュールとの間に介在し、同実行モジュールが呼び出しを行うAPIを取得し、同取得したAPIに関する所定の関連情報を出力可能であるとともに、上記取得したAPIについて上記オペレーティングシステムに対する呼び出しを行い、上記機能を実行させるAPI制御モジュールとを具備することを要旨とする。
【0007】
かかる構成のもと、デバイスドライバは実行モジュールと、API制御モジュールとを有し、実行モジュールでは所定のデバイスを駆動する際に、実行モジュールが動作する。この実行モジュールの動作は、例えば、デバイスドライバインターフェース(DDI関数)に基づいて実行される。ここで、実行モジュールは、かかる動作にあたり、オペレーティングシステムに対して制御アプリケーションプログラミングインターフェース(API)の呼び出しを行いつつ、このAPIに基づいて所定の機能を実行する。このとき、API制御モジュールをオペレーティングシステムと実行モジュールとの間に介在させて配置する。ここで、API制御モジュールは、実行モジュールが呼び出しを行うAPIを取得し、この取得したAPIに関する所定の関連情報を出力する。そして、取得したAPIについてオペレーティングシステムに対する呼び出しを行い実行モジュールにおいて所定の機能を実行可能にする。このように実行モジュールが呼び出すAPIを取得してこの取得したAPIに関する関連情報を出力することによって、関連情報を認識可能になり、この出力された関連情報に基づいてデバイスドライバの内部処理の実行状態を把握することが可能になる。
【0008】
処理系統が異なるモジュールにて出力された関連情報を入力し、当該関連情報に基づいた監視を行うと、この監視動作をデバイスドライバの実質的な処理と区別できるため、監視動作の影響(例えば、不具合による影響)を実行モジュール等に及ぼすことがなくなり好ましい。そこで、実行モジュールおよびAPI制御モジュールとは異なる処理系統にて実行可能な監視モジュールを組み込み、この監視モジュールにて出力された関連情報を入力する。そして、この入力した関連情報を所定の記憶領域に格納させて、同関連情報に基づいた実行モジュールの実行状態の監視を可能にする。監視する際に関連情報を視認可能に表示すれば、視覚的にデバイスドライバの実行状態を把握することができて好適である。そこで、監視モジュールに関連情報表示手段を備えさせ、この関連情報表示手段にて関連情報を表示する。関連情報の一例として、デバイスを駆動する際に所定の機能毎に動作する複数の実行モジュールを有した場合、API制御モジュールは、APIの呼び出しを行った実行モジュールを特定可能な関連情報を出力する。これにより関連情報が何れの実行モジュールに関する情報であるかを判別することが可能になる。
【0009】
関連情報の他の一例として、API制御モジュールは、取得したAPIに基づいて実行モジュールが動作するソースプログラムの実行行を取得し、同取得した実行行を特定可能な関連情報を出力する。これにより実行行レベルでデバイスドライバの実行状態を把握することが可能になる。また、関連情報の他の一例として、API制御モジュールは、取得したAPIに基づいて実行モジュールが実行する共有資源に対する排他処理に関する所定コマンドに関するコマンド情報を取得可能であるとともに、同取得したコマンド情報を有する関連情報を出力する。共有資源に対する排他処理は実行モジュール間の排他を取るために行われるものであり、この排他処理に異常があると、ファイルロック等の不具合が発生する。そこで、このような排他処理に関連するコマンド情報を監視することによって、排他処理にて発生し得る異常を把握することが可能になる。関連情報の他の一例として、API制御モジュールは、アプリケーションプログラムが出力するDEVMODE情報を取得可能であるとともに、同取得したDEVMODE情報を有する関連情報を出力する。これによって、監視モジュールにてDEVMODE情報を把握することが可能になる。
【0010】
関連情報の他の一例として、API制御モジュールは、取得したAPIに基づいて実行モジュールが動作時に入力するデバイスドライバインターフェース(DDI)情報を判別するとともに、同判別したDDI情報を有する関連情報を出力する。これによって、監視モジュールにてDDI情報を把握することが可能になる。さらに関連情報の他の一例として、API制御モジュールは、判別したDDI情報に基づいて実行モジュールが動作する際に必要とするデータサイズ分のメモリ領域が確保されているか否かを判別するメモリ領域判別手段を有し、同メモリ領域判別手段にてメモリ領域が確保されていないと判別された場合にその旨の有する関連情報を出力する。DDI関数はアプリケーションが出力するAPIに基づいて構成される。例えば、アプリケーションが出力したAPIの引数に基づいてDDI関数の引数が構成される。このとき、この引数に設定された領域がメモリ領域上に確保できない場合、この確保できないメモリ領域にアクセスすることにより不具合が発生する。そこで、このような状況を関連情報として取得可能にすることによって、アプリケーションに起因する不具合を把握することが可能になる。
【0011】
ここで、上述してきたデバイスドライバは、デバイスドライバの制御方法としても成立することは言うまでもないし、当該デバイスドライバと同等の機能をコンピュータにて実現可能にするデバイスドライバプログラムとしても発明が成立することは言うまでもない。このとき、このデバイスドライバプログラムの記録媒体としては、フレキシブルディスクやCD−ROM、光磁気ディスク、ICカード、ROMカートリッジ、パンチカード、バーコードなどの符号が印刷された印刷物、コンピュータの内部記憶装置(RAMやROMなどのメモリ)および外部記憶装置などコンピュータが読み取り可能な種々の媒体を利用できる。
【0012】
【発明の実施の形態】
ここでは、下記の順序に従って本発明の実施形態について説明する。
(1)印刷システムの構成:
(2)コンピュータの構成:
(3)プリンタドライバ実行状態監視システムの構成:
(4)プリンタドライバ遠隔監視システムの形態:
(5)本発明との対応:
(6)まとめ:
【0013】
(1)印刷システムの構成:
図1は、本発明のドライバ実行状態監視システムを実現可能な印刷システムの構成を説明するブロック図である。なお、本発明の機能が実行されるのであれば、単体の機器であっても、複数の機器からなるシステムであっても、LAN,WAN等のネットワークを介して接続がなされ処理が行われるシステムであっても本発明を適用できる。
同図において、ホストコンピュータ10は、ROM13のプログラム用ROMあるいは外部メモリ16aに記憶された文書処理プログラム等に基づいて図形、イメージ、文字、表(表計算等を含む)等が混在した文書処理を実行するCPU11を備え、システムバス18に接続される各デバイスをCPU11が総括的に制御可能になっている。
【0014】
また、このROM13のプログラム用ROMあるいは外部メモリ16aには、CPU11の制御プログラムであるオペレーティングシステムプログラム等を記憶し、ROM13のデータ用ROMあるいは外部メモリ16aには文書処理の際に使用するフォントデータ等を記憶し、ROM13のフォント用ROMあるいは外部メモリ16aには上記文書処理等を行う際に使用する各種データを記憶する。RAM12は、CPU11の主メモリ、ワークエリア等として機能する。キーボードコントローラ(KBC)14は、接続されたキーボード14aや、図示しないマウス等のポインティングデバイスからのキー入力を制御する。CRTコントローラ(CRTC)15は、接続されたCRTディスプレイ15aの表示を制御する。ディスクコントローラ(DKC)16では、ブートプログラム、各種のアプリケーションプログラム、フォントデータ、ユーザファイル、編集ファイル、プリンタ制御コマンド生成プログラム(以下、プリンタドライバ)等を記憶するハードディスク、フレキシブルディスク等の外部メモリ16aとのアクセスを制御する。
【0015】
プリンタコントローラ(PRTC)17は、双方向性インターフェース30を介してプリンタ20に接続されて、プリンタ20との通信制御処理を実行可能になっている。なお、CPU11は、例えばRAM12上に設定された表示情報RAMへのアウトラインフォントの展開(ラスタライズ)処理を実行し、CRTディスプレイ15aでのWYSIWYGを可能としている。また、CPU11は、CRTディスプレイ15a上の図示しないマウスカーソル等で指示されたコマンドに基づいて登録された種々のウィンドウを開き、種々のデータ処理を実行する。ユーザは印刷を実行する際、印刷の設定に関するウィンドウを開き、プリンタの設定や、印刷モードの設定を含むプリンタドライバに対する印刷処理方法の設定を行えるようになっている。
【0016】
プリンタ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によりメモリ容量を拡張することができるように構成されている。
【0017】
なお、RAM22は、出力情報展開領域、環境データ格納領域、NVRAM等に用いられる。上述したハードディスク、ICカード等の外部メモリ26aは、メモリコントローラ(MC)26によりアクセスを制御される。外部メモリ26aは、オプションとして接続され、フォントデータ、エミュレーションプログラム、フォームデータ等を記憶する。また、操作パネル27は、図示しない操作のためのスイッチやLED表示器等が配設されている。また、上述した外部メモリ26aは、1個に限らず、複数個備えられ、内蔵フォントに加えてオプションカード、言語系の異なるプリンタ制御言語を解釈するプログラムを格納した外部メモリを複数接続できるように構成されていても良い。さらに、図示しないNVRAMを有し、操作パネル27からのプリンタモード設定情報を記憶するようにしても良い。
【0018】
(2)コンピュータの構成:
図2は、プリンタ等の印刷装置が直接接続されているか、あるいはネットワーク経由で接続されているホストコンピュータ10における典型的な印刷処理の処理内容を示したフローチャートである。
同図において、アプリケーション100、WindowsAPI101(Windowsは米マイクロソフト社の登録商標、以下、API101とする。)、グラフィックエンジン102、プリンタドライバ104およびシステムスプーラ105は、外部メモリ16aに保存されたファイルとして存在し、実行される場合にオペレーティングシステムやそのモジュールを利用するモジュールによってRAM12にロードされ実行されるプログラムモジュールである。また、アプリケーション100およびプリンタドライバ104は、外部メモリ16aのフレキシブルディスクや図示しないCD−ROMあるいは図示しないネットワークを経由して当該外部メモリ16aのハードディスクに追加することが可能になっている。外部メモリ16aに保存されているアプリケーション100は、RAM12にロードされ実行可能になっているグラフィックエンジン102を利用して出力(描画)を行う。
【0019】
グラフィックエンジン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とを有し、これらの構成を動作させて所定の機能を実現する。
【0020】
ここで、上述したようにアプリケーション100にて印刷を行う際に、当該アプリケーション100からプリンタドライバ104に対して設定が行われる。この設定はAPI101もしくはDDI関数103を通じて行われたり、アプリケーション100から直接プリンタドライバ104に入力されるDEVMODE情報に基づいて行われる。プリンタドライバ104もプログラムであり、コーディングミスやソフトウェア設計不具合により内部にバグを含む場合がある。むろん、アプリケーション100もプログラムであり、内部にバグを含む場合がある。すなわち、アプリケーション100がプリンタドライバ104に対して諸設定等を行う処理にバグが存在すると、これが原因となり、プリンタドライバ104の動作が不安定になることがある。
【0021】
また、アプリケーション100の処理は正常であるが、プリンタドライバ104のバグが原因となり、当該プリンタドライバ104の動作が不安定になることがある。このとき、プリンタドライバ104の実行状態をトレースすることにより、アプリケーション100にバグがあるのか、プリンタドライバ104にバグがあるのかを切り分ける作業を行う。このとき、ホストコンピュータ10にツールプログラムを組み込んだプリンタドライバをインストールしたりする。しかし、このツールプログラムの仕様等に起因してホストコンピュータ10を再立ち上げしなければならない。従って、ホストコンピュータ10は一時的にシャットアウトされ停止する。このため、業務用のアプリケーション100の動作も停止してしまうのため、業務が滞ってしまうという問題があった。
【0022】
そこで、本実施形態では、プリンタドライバ104とは別の処理系統で実行される後述するイベント管理プログラムを起動させるとともに、プリンタドライバ104にてこのイベント管理プログラムの起動を検知可能とするとともに、イベント管理プログラムが起動された場合にプリンタドライバ104から当該プリンタドライバ104の実行状態を示す諸情報をイベント管理プログラムに対して出力し、当該イベント管理プログラムにてプリンタドライバ104の実行状態を監視することを可能にする。これによって、プリンタドライバ104が不安定になる不具合が発生した場合に、イベント管理プログラムを起動するのみで同プリンタドライバ104の実行状態をトレース可能なデバッグモードに移行することができるため、ホストコンピュータ10をシャットダウンする必要がない。従って、ホストコンピュータ10にて実施されている各種業務が停止してしまうことを防止することが可能になる。
【0023】
(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に基づいて処理を実行し、所定の機能を実現する。
【0024】
このとき、実行モジュール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に対して出力し、取得可能にする態様を採用しても良い。
【0025】
一方、イベント管理プログラム50が起動していない場合には各種情報の共有メモリ40への転送は行わない。そして、実行モジュール104aが呼び出し一旦横取りしたAPI101を呼び出し、実行モジュール104aにてこのAPI101の処理結果に基づいたDDI関数103の処理を実行可能にする。これを本実施形態では通常モードと言う。
一方、図5に示すようにイベント管理プログラム50は、初期設定モジュール50aと、データ収集モジュール50bと、表示モジュール50cとを有する構成となっている。初期設定モジュール50aはイベント管理プログラム50が起動された際に起動状態を認識可能な情報を共有メモリ40に転送し、停止された際に停止状態を認識可能な情報を共有メモリ40に転送する。データ収集モジュール50bは、共有メモリ40に転送された各種情報を読み出して収集してRAM12もしくは外部メモリ16aに格納する機能を実現し、表示モジュール50cは収集した各種情報を所定の形式に基づいてユーザが視認可能な画面を表示する。
【0026】
ここで、上述した各種情報について説明する。起動/停止情報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によって排他的処理の不完全な完了状態を認識することを可能にする。
【0027】
DEVMODE情報43は、印刷時にアプリケーション100からプリンタドライバ104に渡されるDEVMODE構造体に基づいた情報であり、プリンタ20のデバイス名や、バージョン番号や、プリンタドライバ104のバージョン番号や、印刷用紙の方向や、印刷用紙サイズや、印刷用紙の高さおよび幅や、拡大縮小率や、印刷部数および印刷品質(簡易印刷、低品質、高品質等)や、白黒もしくはカラー設定等の情報を有している。DDI情報44は、実行モジュール104aが入力したDDI関数103の関数名称や、この関数に設定された引数もしくはパラメータ等の情報を有している。この情報は実行モジュール104aに問い合わせて取得可能になっている。
【0028】
メモリオーバーラン情報46は、DDI関数103の引数に設定された引数領域がメモリ領域上に確保不可能な場合にその旨を通知する情報である。このDDI関数103の引数領域は、アプリケーション100がグラフィックエンジン102に引き渡すAPI101に設定されている。すなわち、アプリケーション100が出力するAPI101に基づいてDDI関数103の引数領域が構成される。ここで、アプリケーション100のバグによって設定された引数領域をメモリ領域上に確保できない場合、この確保できないメモリ領域に実行モジュール104aがアクセスすると不具合が発生する。従って、このメモリオーバーラン情報46に基づいてアプリケーション100のバグ(引数設定のバグ)を発見することが可能になる。
【0029】
ここで、上述してきた機能を実現する際にプリンタドライバ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)。
【0030】
図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を呼び出すようにしても良い。
【0031】
図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)。
【0032】
ここで、イベント管理プログラム50の初期設定モジュール50aによって起動/停止情報41を更新する際に実行される処理内容を図9のフローチャートに示す。
同図において、先ず最初にイベント管理プログラム50に対する起動操作が行われたか否かを判別する(ステップS250)。起動操作が行われたと判別した場合は、共有メモリ40にアクセスするとともに、起動/停止情報41に起動情報を格納する(ステップS255)。一方、イベント管理プログラム50に対する停止操作が行われた場合は(ステップS260)、共有メモリ40にアクセスするとともに、起動/停止情報41に停止情報を格納する(ステップS265)。このように、イベント管理プログラム50に対する起動操作もしくは停止操作に基づいて起動/停止情報41を更新することによって、プリンタドライバ104のラッパーモジュール104bはこの起動/停止情報41に格納された情報に基づいてイベント管理プログラム50の状態を判別することが可能になる。むろん、イベント管理プログラム50の状態を判別する手法は上述の手法に限定されるものではなく、イベント管理プログラム50が起動された際に、当該イベント管理プログラム50から起動通知をプリンタドライバ104に対して直接入力させるようにしても良いことは言うまでもない。
【0033】
図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にて起動情報が存在しないと判別された場合は、通常モードに移行する。
【0034】
図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が入力されたタイミングとする。
【0035】
図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にて起動情報が存在しないと判別された場合は、通常モードに移行する。
【0036】
図13は、メモリオーバーラン情報46をイベント管理プログラム50に転送する際に実行モジュール104aにて実行される処理内容を示したフローチャートである。
同図において、実行モジュール104aはグラフィックエンジン102からDDI関数103を入力すると(ステップS550)、ラッパーモジュール104bを呼び出して起動させる(ステップS555)。ここで、後述するラッパーモジュール104bの処理にて実行されるメモリ領域のチェック結果の応答を入力したか否かを判別し、応答の入力まで待機する(ステップS560)。そして、応答があった場合は、後述するラッパーモジュール104bから入力する情報が引数を設定したパラメータ構造体であるか否かを判別する(ステップS565)。入力した情報が引数を設定したパラメータ構造体であると判別された場合は、この設定された引数に基づいてDDI関数103の処理を実行する(ステップS570)。一方、入力した情報がパラメータ構造体ではないと判別された場合は、メモリ領域のチェックでエラーが発生していることを示すエラー通知であるため、所定のエラー処理を実行する(ステップS575)。このエラー処理は、例えば、DDI関数103に基づく処理を中止して、その旨をユーザに通知する表示を行う等の処理が勘案できる。
【0037】
図14は、メモリオーバーラン情報46をイベント管理プログラム50に転送する際にラッパーモジュール104bにて実行される処理内容を示したフローチャートである。
同図において、先ず最初に実行モジュール104aからの呼び出しがあったか否かを判別する(ステップS600)。実行モジュール104aからの呼び出しがあった場合は、共有メモリ40の起動/停止情報41にアクセスする(ステップS605)。そして、この起動/停止情報41にイベント管理プログラム50が起動時に初期設定モジュール50aによって格納する起動情報が存在するか否かを判別する(ステップS610)。起動情報が存在すると判別された場合は、デバッグモードに移行し、実行モジュール104aが入力したDDI関数103に設定された引数領域を取得する(ステップS615)。
【0038】
この引数領域は、例えば、DDI関数103が“DrvStartDoc”(印刷ドキュメントの転送準備ができたときに、グラフィックエンジン102から呼ばれるDDI関数)である場合、印刷情報に関する構造体へのポイントである“SURFOBJ*pso”であったり、印刷ドキュメント名の文字列へのポインタ“LPWSTR pwszDocName”であったり、ジョブIDを示す“DWORD dwJobId”であったりする。引数領域を取得すると、所定のWindowsの関数を利用してこの引数領域がメモリ領域上に存在しているか否か、すなわち引数領域をメモリ領域上に確保可能であるか否かをチェックする(ステップS620)。このWindowsの関数はチェック後に戻り値をラッパーモジュール104bに返答するので、次にこの戻り値が失敗を示す値、すなわち引数領域がメモリ領域上に確保不可能の場合には、共有メモリ40にメモリオーバーラン情報46を格納することによってイベント管理プログラム50に転送するとともに(ステップS630)、実行モジュール104aに対してエラー通知の応答を行う(ステップS635)。
【0039】
従って、共有メモリ40にメモリオーバーラン情報46が格納されていれば、メモリオーバーランの不具合があったことを認識することが可能になる。一方、Windowsの関数が返答した戻り値が有効を示す値、すなわち引数領域がメモリ領域上に確保可能の場合には、引数領域をパラメータ構造体にコピーするとともに(ステップS640)、実行モジュール104aに転送する(ステップS645)。そして、実行モジュール104aはこの転送されたパラメータ構造体に基づいて上述したステップS570にてDDI関数103に基づいた処理を実行することになる。
【0040】
図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)。
【0041】
占有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に格納する。
【0042】
図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)。
【0043】
ユーザインターフェース画面から所定操作に基づいて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)。そして、各画面表示において、例えば、引数の表示等に基づいて不具合の解析を行うことが可能になる。
【0044】
(4)プリンタドライバ遠隔監視システムの形態:
上述してきた実施形態においては、プリンタドライバ104が動作するホストコンピュータ10にてプリンタドライバ104とは異なる処理系統にて起動可能なイベント管理プログラム50を起動させて、プリンタドライバ104にてこのイベント管理プログラム50の起動を検知した場合にデバッグモードに移行し、同プリンタドライバ104から各種情報をイベント管理プログラム50に共有メモリ40を介して転送した。一方、イベント管理プログラム50の起動が検知されない場合に通常モードに移行し、実行モジュール104aが呼び出したAPI101に基づいてDDI関数103の処理を実行可能にした。
【0045】
このようにプリンタドライバ104とは別の処理系統にて起動可能なイベント管理プログラム50の起動させることによりデバッグモードに移行できるようにしたため、プリンタドライバ104の実行状態をトレースする際にホストコンピュータ10を再立ち上げする必要がなくなった。そして、イベント管理プログラム50にて収集された各種情報は、メンテナンス部門に引き渡されて解析される。この解析によってバグがプリンタドライバ104側にあるのかアプリケーション100側にあるかを判別する。
【0046】
この場合、メンテナンス要員は、ホストコンピュータ10が設置されている現場に赴き、当該ホストコンピュータ10にイベント管理プログラム50をインストールし、もしくは既にインストールされているイベント管理プログラム50を起動するとともに、収集した各種情報をリムーバブルな記録媒体に記憶して持ち帰る必要があった。この場合、人件費や交通費などの工数がかかり好ましくない。そこで、メンテナンス部門のホストコンピュータと顧客のクライアントとをネットワークにて接続し、適宜イベント管理プログラム50をクライアントに転送して実行させるとともに、同イベント管理プログラム50にて収集した各種情報をネットワークを介してホストコンピュータ10に転送させるようにすれば、メンテナンス要員は現地に赴く必要がなくなり、工数を削減することができるとともに、各種情報に基づいた不具合の解析に直ぐに着手することが可能となり、プリンタドライバ104の実行状態を監視し解析すると言う作業の効率を向上させることが可能となり好適である。
【0047】
図19は、プリンタドライバ遠隔監視システムの概略構成を示したシステム構成図である。
同図において、ホストコンピュータA1はプリンタドライバ104のプリンタドライバ製造会社Aに設置され、インターネットに接続されている。むろん、ホストコンピュータA1はメンテナンス会社に設置しても良く、サービス提供態様に応じて適宜設置場所は変更可能である。プリンタドライバ104を購入した顧客Bは自己のクライアントコンピュータB1〜Bnにプリンタドライバ104をインストールして印刷を行う。このクライアントコンピュータB1〜Bnも同様にインターネットに接続されており、ホストコンピュータA1と相互に通信可能になっている。従って、ホストコンピュータA1からクライアントコンピュータB1〜Bnにデータを送信するとともにクライアントコンピュータB1〜Bnが備えるハードディスク等の外部メモリにこのデータを記憶することもでき、クライアントコンピュータB1〜BnからホストコンピュータA1にデータを送信するとともにホストコンピュータA1が備えるハードディスク等の外部メモリにこのデータを記憶することもできる。
【0048】
図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に派遣することなく、不具合の解析作業を行うことが可能となり、メンテナンスに費やされる時間を飛躍的に向上させることが可能となる。
【0049】
図21は、クライアントコンピュータB1〜Bnに転送されたイベント管理プログラム50にて実行される処理内容を示したフローチャートである。
同図において、外部メモリに格納されたイベント管理プログラム50に対して起動操作が行われた否かを判別し(ステップS850)、起動操作が行われた場合はイベント管理プログラム50の機能を起動する(ステップS855)。このとき、初期設定モジュール50aにてクライアントコンピュータB1〜Bnの共有メモリ40の起動/停止情報41に起動情報を格納する(ステップS860)。そして、ラッパーモジュール104bから共有メモリ40を介して各種情報42〜46を入力すると(ステップS865)、外部メモリにログデータとして収集し格納する(ステップS870)。
【0050】
所定データ量のログデータが収集されると、クライアントコンピュータB1〜BnからホストコンピュータA1に対してデータが転送可能な否かを判別する(ステップS880)。むろん、ホストコンピュータA1に転送する際のタイミングは所定データ量が収集されたタイミングに限定されるものではなく、所定周期毎に転送するようにしても良い。転送可能の場合は、各種情報42〜46のログデータをインターネットを介してホストコンピュータA1に転送し同ホストコンピュータA1の外部メモリに格納させる(ステップS885)。ホストコンピュータA1への転送が完了した場合、クライアントコンピュータB1〜Bnの外部メモリに格納されたログデータを削除する(ステップS890)。
【0051】
一方、転送不可能の場合は、未転送データとして外部メモリに保存しておく(ステップS895)。この保存した未転送データは適宜所定周期毎に転送の可否を判断して転送可能であれば順次ホストコンピュータA1に転送するようにすれば良い。以上の操作をイベント管理プログラム50が停止操作されるまで実行する(ステップS896)。なお、イベント管理プログラム50の初期設定モジュール50aは停止操作が行われた際に共有メモリ40の起動/停止情報41に停止情報を格納し、この起動/停止情報41を介してイベント管理プログラム50の停止状態を認識可能にする(ステップS897)。
【0052】
ホストコンピュータA1からクライアントコンピュータB1〜Bnに転送され、同クライアントコンピュータB1〜Bnの外部メモリに格納されたイベント管理プログラム50は、作業終了後に顧客Bの作業員に削除させるようにしても良いし、予めプリンタドライバ104のラッパーモジュール104bに所定条件を検出した際にイベント管理プログラム50を削除する機能を持たせるようにしても良い。
【0053】
図22は、転送されたイベント管理プログラム50を削除する際におけるクライアントコンピュータB1〜B3のプリンタドライバ104が備えるラッパーモジュール104bの処理内容を示したフローチャートである。
同図において、実行モジュール104aによる呼び出しがあった場合、共有メモリ40の起動/停止情報41にアクセスすることによってイベント管理プログラム50の起動状態を取得する(ステップS905)。そして、イベント管理プログラム50が停止状態が停止状態であるか否かを判別し(ステップS910)、停止状態であると判別した場合は、イベント管理プログラム50が格納されているハードディスク等の外部メモリにアクセスし(ステップS915)、イベント管理プログラム50が格納されているか否かを判別する(ステップS920)。ここで、イベント管理プログラム50が格納されていると判別した場合はイベント管理プログラム50のファイルを削除する(ステップS925)。
【0054】
図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の実行状態を把握し解析することが可能になる。
【0055】
(5)本発明との対応:
ここで、本発明と上述してきた実施形態との対応関係について説明する。本発明にかかるデバイスドライバはプリンタドライバ104に対応する。また、本発明にかかる監視モジュールがイベント管理プログラム50に対応する。そして、ドライバモジュールが有する実行モジュールは実行モジュール104aに対応し、API制御モジュールはラッパーモジュール104bに対応する。
【0056】
(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…システムスプーラ
【発明の属する技術分野】
本発明は、デバイスドライバ、デバイスドライバの制御方法およびデバイスドライバプログラムに関し、特に、APIを呼び出しつつ所定の機能を実行するデバイスドライバ、デバイスドライバの制御方法およびデバイスドライバプログラムに関する。
【0002】
【従来の技術】
従来、この種の装置としては、コンピュータのハードウェアやソフトウェアをデバッグするものが多数知られている(例えば、特許文献1〜4を参照。)。
【0003】
【特許文献1】
特開平2−105234号公報
【特許文献2】
特開平5−151021号公報
【特許文献3】
特開昭64−44552号公報
【特許文献4】
特開平3−248275号公報
【0004】
【発明が解決しようとする課題】
上述した従来の装置においては、デバイスドライバにおける内部処理の実行状態を把握することができないという課題があった。
【0005】
本発明は、上記課題にかんがみてなされたもので、デバイスドライバにてAPIに関する関連情報を出力することによって同関連情報を認識可能にすることができるデバイスドライバ、デバイスドライバの制御方法およびデバイスドライバプログラムの提供を目的とする。
【0006】
【課題を解決するための手段】
上記目的を達成するため、所定のデバイスを駆動する際に起動されるデバイスドライバであって、上記デバイスを駆動する際に、オペレーティングシステムに対して制御アプリケーションプログラミングインターフェース(API)の呼び出しを行いつつ、同APIに基づいた所定の機能を実行可能な実行モジュールと、上記オペレーティングシステムと上記実行モジュールとの間に介在し、同実行モジュールが呼び出しを行うAPIを取得し、同取得したAPIに関する所定の関連情報を出力可能であるとともに、上記取得したAPIについて上記オペレーティングシステムに対する呼び出しを行い、上記機能を実行させるAPI制御モジュールとを具備することを要旨とする。
【0007】
かかる構成のもと、デバイスドライバは実行モジュールと、API制御モジュールとを有し、実行モジュールでは所定のデバイスを駆動する際に、実行モジュールが動作する。この実行モジュールの動作は、例えば、デバイスドライバインターフェース(DDI関数)に基づいて実行される。ここで、実行モジュールは、かかる動作にあたり、オペレーティングシステムに対して制御アプリケーションプログラミングインターフェース(API)の呼び出しを行いつつ、このAPIに基づいて所定の機能を実行する。このとき、API制御モジュールをオペレーティングシステムと実行モジュールとの間に介在させて配置する。ここで、API制御モジュールは、実行モジュールが呼び出しを行うAPIを取得し、この取得したAPIに関する所定の関連情報を出力する。そして、取得したAPIについてオペレーティングシステムに対する呼び出しを行い実行モジュールにおいて所定の機能を実行可能にする。このように実行モジュールが呼び出すAPIを取得してこの取得したAPIに関する関連情報を出力することによって、関連情報を認識可能になり、この出力された関連情報に基づいてデバイスドライバの内部処理の実行状態を把握することが可能になる。
【0008】
処理系統が異なるモジュールにて出力された関連情報を入力し、当該関連情報に基づいた監視を行うと、この監視動作をデバイスドライバの実質的な処理と区別できるため、監視動作の影響(例えば、不具合による影響)を実行モジュール等に及ぼすことがなくなり好ましい。そこで、実行モジュールおよびAPI制御モジュールとは異なる処理系統にて実行可能な監視モジュールを組み込み、この監視モジュールにて出力された関連情報を入力する。そして、この入力した関連情報を所定の記憶領域に格納させて、同関連情報に基づいた実行モジュールの実行状態の監視を可能にする。監視する際に関連情報を視認可能に表示すれば、視覚的にデバイスドライバの実行状態を把握することができて好適である。そこで、監視モジュールに関連情報表示手段を備えさせ、この関連情報表示手段にて関連情報を表示する。関連情報の一例として、デバイスを駆動する際に所定の機能毎に動作する複数の実行モジュールを有した場合、API制御モジュールは、APIの呼び出しを行った実行モジュールを特定可能な関連情報を出力する。これにより関連情報が何れの実行モジュールに関する情報であるかを判別することが可能になる。
【0009】
関連情報の他の一例として、API制御モジュールは、取得したAPIに基づいて実行モジュールが動作するソースプログラムの実行行を取得し、同取得した実行行を特定可能な関連情報を出力する。これにより実行行レベルでデバイスドライバの実行状態を把握することが可能になる。また、関連情報の他の一例として、API制御モジュールは、取得したAPIに基づいて実行モジュールが実行する共有資源に対する排他処理に関する所定コマンドに関するコマンド情報を取得可能であるとともに、同取得したコマンド情報を有する関連情報を出力する。共有資源に対する排他処理は実行モジュール間の排他を取るために行われるものであり、この排他処理に異常があると、ファイルロック等の不具合が発生する。そこで、このような排他処理に関連するコマンド情報を監視することによって、排他処理にて発生し得る異常を把握することが可能になる。関連情報の他の一例として、API制御モジュールは、アプリケーションプログラムが出力するDEVMODE情報を取得可能であるとともに、同取得したDEVMODE情報を有する関連情報を出力する。これによって、監視モジュールにてDEVMODE情報を把握することが可能になる。
【0010】
関連情報の他の一例として、API制御モジュールは、取得したAPIに基づいて実行モジュールが動作時に入力するデバイスドライバインターフェース(DDI)情報を判別するとともに、同判別したDDI情報を有する関連情報を出力する。これによって、監視モジュールにてDDI情報を把握することが可能になる。さらに関連情報の他の一例として、API制御モジュールは、判別したDDI情報に基づいて実行モジュールが動作する際に必要とするデータサイズ分のメモリ領域が確保されているか否かを判別するメモリ領域判別手段を有し、同メモリ領域判別手段にてメモリ領域が確保されていないと判別された場合にその旨の有する関連情報を出力する。DDI関数はアプリケーションが出力するAPIに基づいて構成される。例えば、アプリケーションが出力したAPIの引数に基づいてDDI関数の引数が構成される。このとき、この引数に設定された領域がメモリ領域上に確保できない場合、この確保できないメモリ領域にアクセスすることにより不具合が発生する。そこで、このような状況を関連情報として取得可能にすることによって、アプリケーションに起因する不具合を把握することが可能になる。
【0011】
ここで、上述してきたデバイスドライバは、デバイスドライバの制御方法としても成立することは言うまでもないし、当該デバイスドライバと同等の機能をコンピュータにて実現可能にするデバイスドライバプログラムとしても発明が成立することは言うまでもない。このとき、このデバイスドライバプログラムの記録媒体としては、フレキシブルディスクやCD−ROM、光磁気ディスク、ICカード、ROMカートリッジ、パンチカード、バーコードなどの符号が印刷された印刷物、コンピュータの内部記憶装置(RAMやROMなどのメモリ)および外部記憶装置などコンピュータが読み取り可能な種々の媒体を利用できる。
【0012】
【発明の実施の形態】
ここでは、下記の順序に従って本発明の実施形態について説明する。
(1)印刷システムの構成:
(2)コンピュータの構成:
(3)プリンタドライバ実行状態監視システムの構成:
(4)プリンタドライバ遠隔監視システムの形態:
(5)本発明との対応:
(6)まとめ:
【0013】
(1)印刷システムの構成:
図1は、本発明のドライバ実行状態監視システムを実現可能な印刷システムの構成を説明するブロック図である。なお、本発明の機能が実行されるのであれば、単体の機器であっても、複数の機器からなるシステムであっても、LAN,WAN等のネットワークを介して接続がなされ処理が行われるシステムであっても本発明を適用できる。
同図において、ホストコンピュータ10は、ROM13のプログラム用ROMあるいは外部メモリ16aに記憶された文書処理プログラム等に基づいて図形、イメージ、文字、表(表計算等を含む)等が混在した文書処理を実行するCPU11を備え、システムバス18に接続される各デバイスをCPU11が総括的に制御可能になっている。
【0014】
また、このROM13のプログラム用ROMあるいは外部メモリ16aには、CPU11の制御プログラムであるオペレーティングシステムプログラム等を記憶し、ROM13のデータ用ROMあるいは外部メモリ16aには文書処理の際に使用するフォントデータ等を記憶し、ROM13のフォント用ROMあるいは外部メモリ16aには上記文書処理等を行う際に使用する各種データを記憶する。RAM12は、CPU11の主メモリ、ワークエリア等として機能する。キーボードコントローラ(KBC)14は、接続されたキーボード14aや、図示しないマウス等のポインティングデバイスからのキー入力を制御する。CRTコントローラ(CRTC)15は、接続されたCRTディスプレイ15aの表示を制御する。ディスクコントローラ(DKC)16では、ブートプログラム、各種のアプリケーションプログラム、フォントデータ、ユーザファイル、編集ファイル、プリンタ制御コマンド生成プログラム(以下、プリンタドライバ)等を記憶するハードディスク、フレキシブルディスク等の外部メモリ16aとのアクセスを制御する。
【0015】
プリンタコントローラ(PRTC)17は、双方向性インターフェース30を介してプリンタ20に接続されて、プリンタ20との通信制御処理を実行可能になっている。なお、CPU11は、例えばRAM12上に設定された表示情報RAMへのアウトラインフォントの展開(ラスタライズ)処理を実行し、CRTディスプレイ15aでのWYSIWYGを可能としている。また、CPU11は、CRTディスプレイ15a上の図示しないマウスカーソル等で指示されたコマンドに基づいて登録された種々のウィンドウを開き、種々のデータ処理を実行する。ユーザは印刷を実行する際、印刷の設定に関するウィンドウを開き、プリンタの設定や、印刷モードの設定を含むプリンタドライバに対する印刷処理方法の設定を行えるようになっている。
【0016】
プリンタ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によりメモリ容量を拡張することができるように構成されている。
【0017】
なお、RAM22は、出力情報展開領域、環境データ格納領域、NVRAM等に用いられる。上述したハードディスク、ICカード等の外部メモリ26aは、メモリコントローラ(MC)26によりアクセスを制御される。外部メモリ26aは、オプションとして接続され、フォントデータ、エミュレーションプログラム、フォームデータ等を記憶する。また、操作パネル27は、図示しない操作のためのスイッチやLED表示器等が配設されている。また、上述した外部メモリ26aは、1個に限らず、複数個備えられ、内蔵フォントに加えてオプションカード、言語系の異なるプリンタ制御言語を解釈するプログラムを格納した外部メモリを複数接続できるように構成されていても良い。さらに、図示しないNVRAMを有し、操作パネル27からのプリンタモード設定情報を記憶するようにしても良い。
【0018】
(2)コンピュータの構成:
図2は、プリンタ等の印刷装置が直接接続されているか、あるいはネットワーク経由で接続されているホストコンピュータ10における典型的な印刷処理の処理内容を示したフローチャートである。
同図において、アプリケーション100、WindowsAPI101(Windowsは米マイクロソフト社の登録商標、以下、API101とする。)、グラフィックエンジン102、プリンタドライバ104およびシステムスプーラ105は、外部メモリ16aに保存されたファイルとして存在し、実行される場合にオペレーティングシステムやそのモジュールを利用するモジュールによってRAM12にロードされ実行されるプログラムモジュールである。また、アプリケーション100およびプリンタドライバ104は、外部メモリ16aのフレキシブルディスクや図示しないCD−ROMあるいは図示しないネットワークを経由して当該外部メモリ16aのハードディスクに追加することが可能になっている。外部メモリ16aに保存されているアプリケーション100は、RAM12にロードされ実行可能になっているグラフィックエンジン102を利用して出力(描画)を行う。
【0019】
グラフィックエンジン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とを有し、これらの構成を動作させて所定の機能を実現する。
【0020】
ここで、上述したようにアプリケーション100にて印刷を行う際に、当該アプリケーション100からプリンタドライバ104に対して設定が行われる。この設定はAPI101もしくはDDI関数103を通じて行われたり、アプリケーション100から直接プリンタドライバ104に入力されるDEVMODE情報に基づいて行われる。プリンタドライバ104もプログラムであり、コーディングミスやソフトウェア設計不具合により内部にバグを含む場合がある。むろん、アプリケーション100もプログラムであり、内部にバグを含む場合がある。すなわち、アプリケーション100がプリンタドライバ104に対して諸設定等を行う処理にバグが存在すると、これが原因となり、プリンタドライバ104の動作が不安定になることがある。
【0021】
また、アプリケーション100の処理は正常であるが、プリンタドライバ104のバグが原因となり、当該プリンタドライバ104の動作が不安定になることがある。このとき、プリンタドライバ104の実行状態をトレースすることにより、アプリケーション100にバグがあるのか、プリンタドライバ104にバグがあるのかを切り分ける作業を行う。このとき、ホストコンピュータ10にツールプログラムを組み込んだプリンタドライバをインストールしたりする。しかし、このツールプログラムの仕様等に起因してホストコンピュータ10を再立ち上げしなければならない。従って、ホストコンピュータ10は一時的にシャットアウトされ停止する。このため、業務用のアプリケーション100の動作も停止してしまうのため、業務が滞ってしまうという問題があった。
【0022】
そこで、本実施形態では、プリンタドライバ104とは別の処理系統で実行される後述するイベント管理プログラムを起動させるとともに、プリンタドライバ104にてこのイベント管理プログラムの起動を検知可能とするとともに、イベント管理プログラムが起動された場合にプリンタドライバ104から当該プリンタドライバ104の実行状態を示す諸情報をイベント管理プログラムに対して出力し、当該イベント管理プログラムにてプリンタドライバ104の実行状態を監視することを可能にする。これによって、プリンタドライバ104が不安定になる不具合が発生した場合に、イベント管理プログラムを起動するのみで同プリンタドライバ104の実行状態をトレース可能なデバッグモードに移行することができるため、ホストコンピュータ10をシャットダウンする必要がない。従って、ホストコンピュータ10にて実施されている各種業務が停止してしまうことを防止することが可能になる。
【0023】
(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に基づいて処理を実行し、所定の機能を実現する。
【0024】
このとき、実行モジュール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に対して出力し、取得可能にする態様を採用しても良い。
【0025】
一方、イベント管理プログラム50が起動していない場合には各種情報の共有メモリ40への転送は行わない。そして、実行モジュール104aが呼び出し一旦横取りしたAPI101を呼び出し、実行モジュール104aにてこのAPI101の処理結果に基づいたDDI関数103の処理を実行可能にする。これを本実施形態では通常モードと言う。
一方、図5に示すようにイベント管理プログラム50は、初期設定モジュール50aと、データ収集モジュール50bと、表示モジュール50cとを有する構成となっている。初期設定モジュール50aはイベント管理プログラム50が起動された際に起動状態を認識可能な情報を共有メモリ40に転送し、停止された際に停止状態を認識可能な情報を共有メモリ40に転送する。データ収集モジュール50bは、共有メモリ40に転送された各種情報を読み出して収集してRAM12もしくは外部メモリ16aに格納する機能を実現し、表示モジュール50cは収集した各種情報を所定の形式に基づいてユーザが視認可能な画面を表示する。
【0026】
ここで、上述した各種情報について説明する。起動/停止情報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によって排他的処理の不完全な完了状態を認識することを可能にする。
【0027】
DEVMODE情報43は、印刷時にアプリケーション100からプリンタドライバ104に渡されるDEVMODE構造体に基づいた情報であり、プリンタ20のデバイス名や、バージョン番号や、プリンタドライバ104のバージョン番号や、印刷用紙の方向や、印刷用紙サイズや、印刷用紙の高さおよび幅や、拡大縮小率や、印刷部数および印刷品質(簡易印刷、低品質、高品質等)や、白黒もしくはカラー設定等の情報を有している。DDI情報44は、実行モジュール104aが入力したDDI関数103の関数名称や、この関数に設定された引数もしくはパラメータ等の情報を有している。この情報は実行モジュール104aに問い合わせて取得可能になっている。
【0028】
メモリオーバーラン情報46は、DDI関数103の引数に設定された引数領域がメモリ領域上に確保不可能な場合にその旨を通知する情報である。このDDI関数103の引数領域は、アプリケーション100がグラフィックエンジン102に引き渡すAPI101に設定されている。すなわち、アプリケーション100が出力するAPI101に基づいてDDI関数103の引数領域が構成される。ここで、アプリケーション100のバグによって設定された引数領域をメモリ領域上に確保できない場合、この確保できないメモリ領域に実行モジュール104aがアクセスすると不具合が発生する。従って、このメモリオーバーラン情報46に基づいてアプリケーション100のバグ(引数設定のバグ)を発見することが可能になる。
【0029】
ここで、上述してきた機能を実現する際にプリンタドライバ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)。
【0030】
図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を呼び出すようにしても良い。
【0031】
図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)。
【0032】
ここで、イベント管理プログラム50の初期設定モジュール50aによって起動/停止情報41を更新する際に実行される処理内容を図9のフローチャートに示す。
同図において、先ず最初にイベント管理プログラム50に対する起動操作が行われたか否かを判別する(ステップS250)。起動操作が行われたと判別した場合は、共有メモリ40にアクセスするとともに、起動/停止情報41に起動情報を格納する(ステップS255)。一方、イベント管理プログラム50に対する停止操作が行われた場合は(ステップS260)、共有メモリ40にアクセスするとともに、起動/停止情報41に停止情報を格納する(ステップS265)。このように、イベント管理プログラム50に対する起動操作もしくは停止操作に基づいて起動/停止情報41を更新することによって、プリンタドライバ104のラッパーモジュール104bはこの起動/停止情報41に格納された情報に基づいてイベント管理プログラム50の状態を判別することが可能になる。むろん、イベント管理プログラム50の状態を判別する手法は上述の手法に限定されるものではなく、イベント管理プログラム50が起動された際に、当該イベント管理プログラム50から起動通知をプリンタドライバ104に対して直接入力させるようにしても良いことは言うまでもない。
【0033】
図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にて起動情報が存在しないと判別された場合は、通常モードに移行する。
【0034】
図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が入力されたタイミングとする。
【0035】
図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にて起動情報が存在しないと判別された場合は、通常モードに移行する。
【0036】
図13は、メモリオーバーラン情報46をイベント管理プログラム50に転送する際に実行モジュール104aにて実行される処理内容を示したフローチャートである。
同図において、実行モジュール104aはグラフィックエンジン102からDDI関数103を入力すると(ステップS550)、ラッパーモジュール104bを呼び出して起動させる(ステップS555)。ここで、後述するラッパーモジュール104bの処理にて実行されるメモリ領域のチェック結果の応答を入力したか否かを判別し、応答の入力まで待機する(ステップS560)。そして、応答があった場合は、後述するラッパーモジュール104bから入力する情報が引数を設定したパラメータ構造体であるか否かを判別する(ステップS565)。入力した情報が引数を設定したパラメータ構造体であると判別された場合は、この設定された引数に基づいてDDI関数103の処理を実行する(ステップS570)。一方、入力した情報がパラメータ構造体ではないと判別された場合は、メモリ領域のチェックでエラーが発生していることを示すエラー通知であるため、所定のエラー処理を実行する(ステップS575)。このエラー処理は、例えば、DDI関数103に基づく処理を中止して、その旨をユーザに通知する表示を行う等の処理が勘案できる。
【0037】
図14は、メモリオーバーラン情報46をイベント管理プログラム50に転送する際にラッパーモジュール104bにて実行される処理内容を示したフローチャートである。
同図において、先ず最初に実行モジュール104aからの呼び出しがあったか否かを判別する(ステップS600)。実行モジュール104aからの呼び出しがあった場合は、共有メモリ40の起動/停止情報41にアクセスする(ステップS605)。そして、この起動/停止情報41にイベント管理プログラム50が起動時に初期設定モジュール50aによって格納する起動情報が存在するか否かを判別する(ステップS610)。起動情報が存在すると判別された場合は、デバッグモードに移行し、実行モジュール104aが入力したDDI関数103に設定された引数領域を取得する(ステップS615)。
【0038】
この引数領域は、例えば、DDI関数103が“DrvStartDoc”(印刷ドキュメントの転送準備ができたときに、グラフィックエンジン102から呼ばれるDDI関数)である場合、印刷情報に関する構造体へのポイントである“SURFOBJ*pso”であったり、印刷ドキュメント名の文字列へのポインタ“LPWSTR pwszDocName”であったり、ジョブIDを示す“DWORD dwJobId”であったりする。引数領域を取得すると、所定のWindowsの関数を利用してこの引数領域がメモリ領域上に存在しているか否か、すなわち引数領域をメモリ領域上に確保可能であるか否かをチェックする(ステップS620)。このWindowsの関数はチェック後に戻り値をラッパーモジュール104bに返答するので、次にこの戻り値が失敗を示す値、すなわち引数領域がメモリ領域上に確保不可能の場合には、共有メモリ40にメモリオーバーラン情報46を格納することによってイベント管理プログラム50に転送するとともに(ステップS630)、実行モジュール104aに対してエラー通知の応答を行う(ステップS635)。
【0039】
従って、共有メモリ40にメモリオーバーラン情報46が格納されていれば、メモリオーバーランの不具合があったことを認識することが可能になる。一方、Windowsの関数が返答した戻り値が有効を示す値、すなわち引数領域がメモリ領域上に確保可能の場合には、引数領域をパラメータ構造体にコピーするとともに(ステップS640)、実行モジュール104aに転送する(ステップS645)。そして、実行モジュール104aはこの転送されたパラメータ構造体に基づいて上述したステップS570にてDDI関数103に基づいた処理を実行することになる。
【0040】
図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)。
【0041】
占有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に格納する。
【0042】
図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)。
【0043】
ユーザインターフェース画面から所定操作に基づいて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)。そして、各画面表示において、例えば、引数の表示等に基づいて不具合の解析を行うことが可能になる。
【0044】
(4)プリンタドライバ遠隔監視システムの形態:
上述してきた実施形態においては、プリンタドライバ104が動作するホストコンピュータ10にてプリンタドライバ104とは異なる処理系統にて起動可能なイベント管理プログラム50を起動させて、プリンタドライバ104にてこのイベント管理プログラム50の起動を検知した場合にデバッグモードに移行し、同プリンタドライバ104から各種情報をイベント管理プログラム50に共有メモリ40を介して転送した。一方、イベント管理プログラム50の起動が検知されない場合に通常モードに移行し、実行モジュール104aが呼び出したAPI101に基づいてDDI関数103の処理を実行可能にした。
【0045】
このようにプリンタドライバ104とは別の処理系統にて起動可能なイベント管理プログラム50の起動させることによりデバッグモードに移行できるようにしたため、プリンタドライバ104の実行状態をトレースする際にホストコンピュータ10を再立ち上げする必要がなくなった。そして、イベント管理プログラム50にて収集された各種情報は、メンテナンス部門に引き渡されて解析される。この解析によってバグがプリンタドライバ104側にあるのかアプリケーション100側にあるかを判別する。
【0046】
この場合、メンテナンス要員は、ホストコンピュータ10が設置されている現場に赴き、当該ホストコンピュータ10にイベント管理プログラム50をインストールし、もしくは既にインストールされているイベント管理プログラム50を起動するとともに、収集した各種情報をリムーバブルな記録媒体に記憶して持ち帰る必要があった。この場合、人件費や交通費などの工数がかかり好ましくない。そこで、メンテナンス部門のホストコンピュータと顧客のクライアントとをネットワークにて接続し、適宜イベント管理プログラム50をクライアントに転送して実行させるとともに、同イベント管理プログラム50にて収集した各種情報をネットワークを介してホストコンピュータ10に転送させるようにすれば、メンテナンス要員は現地に赴く必要がなくなり、工数を削減することができるとともに、各種情報に基づいた不具合の解析に直ぐに着手することが可能となり、プリンタドライバ104の実行状態を監視し解析すると言う作業の効率を向上させることが可能となり好適である。
【0047】
図19は、プリンタドライバ遠隔監視システムの概略構成を示したシステム構成図である。
同図において、ホストコンピュータA1はプリンタドライバ104のプリンタドライバ製造会社Aに設置され、インターネットに接続されている。むろん、ホストコンピュータA1はメンテナンス会社に設置しても良く、サービス提供態様に応じて適宜設置場所は変更可能である。プリンタドライバ104を購入した顧客Bは自己のクライアントコンピュータB1〜Bnにプリンタドライバ104をインストールして印刷を行う。このクライアントコンピュータB1〜Bnも同様にインターネットに接続されており、ホストコンピュータA1と相互に通信可能になっている。従って、ホストコンピュータA1からクライアントコンピュータB1〜Bnにデータを送信するとともにクライアントコンピュータB1〜Bnが備えるハードディスク等の外部メモリにこのデータを記憶することもでき、クライアントコンピュータB1〜BnからホストコンピュータA1にデータを送信するとともにホストコンピュータA1が備えるハードディスク等の外部メモリにこのデータを記憶することもできる。
【0048】
図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に派遣することなく、不具合の解析作業を行うことが可能となり、メンテナンスに費やされる時間を飛躍的に向上させることが可能となる。
【0049】
図21は、クライアントコンピュータB1〜Bnに転送されたイベント管理プログラム50にて実行される処理内容を示したフローチャートである。
同図において、外部メモリに格納されたイベント管理プログラム50に対して起動操作が行われた否かを判別し(ステップS850)、起動操作が行われた場合はイベント管理プログラム50の機能を起動する(ステップS855)。このとき、初期設定モジュール50aにてクライアントコンピュータB1〜Bnの共有メモリ40の起動/停止情報41に起動情報を格納する(ステップS860)。そして、ラッパーモジュール104bから共有メモリ40を介して各種情報42〜46を入力すると(ステップS865)、外部メモリにログデータとして収集し格納する(ステップS870)。
【0050】
所定データ量のログデータが収集されると、クライアントコンピュータB1〜BnからホストコンピュータA1に対してデータが転送可能な否かを判別する(ステップS880)。むろん、ホストコンピュータA1に転送する際のタイミングは所定データ量が収集されたタイミングに限定されるものではなく、所定周期毎に転送するようにしても良い。転送可能の場合は、各種情報42〜46のログデータをインターネットを介してホストコンピュータA1に転送し同ホストコンピュータA1の外部メモリに格納させる(ステップS885)。ホストコンピュータA1への転送が完了した場合、クライアントコンピュータB1〜Bnの外部メモリに格納されたログデータを削除する(ステップS890)。
【0051】
一方、転送不可能の場合は、未転送データとして外部メモリに保存しておく(ステップS895)。この保存した未転送データは適宜所定周期毎に転送の可否を判断して転送可能であれば順次ホストコンピュータA1に転送するようにすれば良い。以上の操作をイベント管理プログラム50が停止操作されるまで実行する(ステップS896)。なお、イベント管理プログラム50の初期設定モジュール50aは停止操作が行われた際に共有メモリ40の起動/停止情報41に停止情報を格納し、この起動/停止情報41を介してイベント管理プログラム50の停止状態を認識可能にする(ステップS897)。
【0052】
ホストコンピュータA1からクライアントコンピュータB1〜Bnに転送され、同クライアントコンピュータB1〜Bnの外部メモリに格納されたイベント管理プログラム50は、作業終了後に顧客Bの作業員に削除させるようにしても良いし、予めプリンタドライバ104のラッパーモジュール104bに所定条件を検出した際にイベント管理プログラム50を削除する機能を持たせるようにしても良い。
【0053】
図22は、転送されたイベント管理プログラム50を削除する際におけるクライアントコンピュータB1〜B3のプリンタドライバ104が備えるラッパーモジュール104bの処理内容を示したフローチャートである。
同図において、実行モジュール104aによる呼び出しがあった場合、共有メモリ40の起動/停止情報41にアクセスすることによってイベント管理プログラム50の起動状態を取得する(ステップS905)。そして、イベント管理プログラム50が停止状態が停止状態であるか否かを判別し(ステップS910)、停止状態であると判別した場合は、イベント管理プログラム50が格納されているハードディスク等の外部メモリにアクセスし(ステップS915)、イベント管理プログラム50が格納されているか否かを判別する(ステップS920)。ここで、イベント管理プログラム50が格納されていると判別した場合はイベント管理プログラム50のファイルを削除する(ステップS925)。
【0054】
図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の実行状態を把握し解析することが可能になる。
【0055】
(5)本発明との対応:
ここで、本発明と上述してきた実施形態との対応関係について説明する。本発明にかかるデバイスドライバはプリンタドライバ104に対応する。また、本発明にかかる監視モジュールがイベント管理プログラム50に対応する。そして、ドライバモジュールが有する実行モジュールは実行モジュール104aに対応し、API制御モジュールはラッパーモジュール104bに対応する。
【0056】
(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 (11)
- 所定のデバイスを駆動する際に起動されるデバイスドライバであって、
上記デバイスを駆動する際に、オペレーティングシステムに対して制御アプリケーションプログラミングインターフェース(API)の呼び出しを行いつつ、同APIに基づいた所定の機能を実行可能な実行モジュールと、
上記オペレーティングシステムと上記実行モジュールとの間に介在し、同実行モジュールが呼び出しを行うAPIを取得し、同取得したAPIに関する所定の関連情報を出力可能であるとともに、上記取得したAPIについて上記オペレーティングシステムに対する呼び出しを行い、上記機能を実行させるAPI制御モジュールとを具備することを特徴とするデバイスドライバ。 - 上記実行モジュールおよびAPI制御モジュールとは異なる処理系統にて実行可能であるとともに、上記出力された関連情報を入力し、同入力した関連情報を所定の記憶領域に格納させつつ同関連情報に基づいた上記実行モジュールの実行状態の監視を可能にする監視モジュールを有することを特徴とする上記請求項1に記載のデバイスドライバ。
- 上記監視モジュールは、上記関連情報を表示する関連情報表示手段を有することを特徴とする上記請求項2に記載のデバイスドライバ。
- 上記実行モジュールは、上記デバイスを駆動する際に所定の機能毎に動作する複数の実行モジュールを有し、上記API制御モジュールは、上記APIの呼び出しを行った実行モジュールを特定可能な上記関連情報を出力することを特徴とする上記請求項1〜請求項3のいずれかに記載のデバイスドライバ。
- 上記API制御モジュールは、上記取得したAPIに基づいて上記実行モジュールが動作するソースプログラムの実行行を取得可能であるとともに、同取得した実行行を特定可能な上記関連情報を出力することを特徴とする上記請求項1〜請求項4のいずれかに記載のデバイスドライバ。
- 上記API制御モジュールは、上記取得したAPIに基づいて上記実行モジュールが実行する共有資源に対する排他処理に関する所定コマンドに関するコマンド情報を取得可能であるとともに、同取得したコマンド情報を有する上記関連情報を出力することを特徴とする上記請求項1〜請求項5のいずれかに記載のデバイスドライバ。
- 上記API制御モジュールは、アプリケーションプログラムが出力するDEVMODE情報を取得可能であるとともに、同取得したDEVMODE情報を有する上記関連情報を出力することを特徴とする上記請求項1〜請求項6のいずれかに記載のデバイスドライバ。
- 上記API制御モジュールは、上記取得したAPIに基づいて上記実行モジュールが動作時に入力するデバイスドライバインターフェース(DDI)関数を検知するとともに、同検知したDDI関数に関する上記関連情報を出力することを特徴とする上記請求項1〜請求項7のいずれかに記載のデバイスドライバ。
- 上記API制御モジュールは、上記検知したDDI関数の引数に設定された引数領域を取得する引数領域取得手段と、同取得した引数領域が必要とされるデータサイズ分のメモリ領域を確保しているか否かを判別するメモリ領域判別手段とを有するとともに、上記引数領域を上記メモリ領域上にて確保しているか否かを認識可能な上記関連情報を出力することを特徴とする上記請求項8に記載のデバイスドライバ。
- 所定のデバイスを駆動する際に起動され、実行モジュールにてオペレーティングシステムに対して制御アプリケーションプログラミングインターフェース(API)の呼び出しを行いつつ、同APIに基づいた所定の機能を実行するデバイスドライバの制御方法であって、
上記実行モジュールが上記オペレーティングシステムに対して呼び出しを行うAPIを取得し、同取得したAPIをに関する関連情報を作成するとともに、上記取得したAPIについて上記オペレーティングシステムに対する呼び出しを行い、上記機能を実行させるAPI制御工程を具備することを特徴とするデバイスドライバの制御方法。 - 所定のデバイスを駆動する際にコンピュータにて起動されるデバイスドライバプログラムであって、
上記デバイスを駆動する際に、オペレーティングシステムに対して制御アプリケーションプログラミングインターフェース(API)の呼び出しを行いつつ、同APIに基づいた所定の機能を実行可能な実行機能と、
上記オペレーティングシステムと上記実行機能との間に介在し、同実行機能にて呼び出しを行うAPIを取得し、同取得したAPIをに関する関連情報を作成するとともに、上記取得したAPIについて上記オペレーティングシステムに対する呼び出しを行い、上記機能を実行させるAPI制御機能とを具備することを特徴とするデバイスドライバプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003111924A JP2004318523A (ja) | 2003-04-16 | 2003-04-16 | デバイスドライバ、デバイスドライバの制御方法およびデバイスドライバプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003111924A JP2004318523A (ja) | 2003-04-16 | 2003-04-16 | デバイスドライバ、デバイスドライバの制御方法およびデバイスドライバプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004318523A true JP2004318523A (ja) | 2004-11-11 |
Family
ID=33472349
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003111924A Pending JP2004318523A (ja) | 2003-04-16 | 2003-04-16 | デバイスドライバ、デバイスドライバの制御方法およびデバイスドライバプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004318523A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9110615B2 (en) | 2011-08-03 | 2015-08-18 | Seiko Epson Corporation | Point of sale control device, control method, and storage medium storing a program for a point of sale device |
-
2003
- 2003-04-16 JP JP2003111924A patent/JP2004318523A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9110615B2 (en) | 2011-08-03 | 2015-08-18 | Seiko Epson Corporation | Point of sale control device, control method, and storage medium storing a program for a point of sale device |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7426046B2 (en) | Information processing apparatus, information processing method, information processing program, and storage medium | |
US7199890B2 (en) | Print control method and apparatus | |
US7916330B2 (en) | Driver selection for printer drawing conversion | |
KR100838871B1 (ko) | 정보 처리 장치, 정보 처리 방법, 및 기억 매체 | |
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 | |
US8112793B2 (en) | Image forming apparatus and image forming system | |
JP4540708B2 (ja) | 印刷制御プログラム及びプログラムの記録媒体 | |
JPH10333846A (ja) | 出力制御方法及び装置 | |
US20100195132A1 (en) | Print control apparatus, print control method, and storage medium | |
US8699045B2 (en) | Information processing apparatus, information processing method, and storage medium | |
JP2007323191A (ja) | 印刷システム、情報処理装置、印刷ログ情報抽出方法、及びプログラム | |
US8085424B2 (en) | Multiple-port print device | |
JP2001256007A (ja) | 印刷装置、印刷方法、印刷システム、及び印刷装置に適用可能なコンピュータ読取り可能な媒体 | |
KR100720922B1 (ko) | 인쇄 제어 프로그램을 격납한 전자계산기, 및 인쇄 제어용 프로그램을 기록한 전자계산기로 읽을 수 있는 저장매체 | |
JP2001188663A (ja) | プリント管理方法,プリンタシステムとそのユーザ用及び管理者用ホストコンピュータ,並びに記録媒体 | |
US20070124462A1 (en) | State Information Acquisition Processing Program, State Information Acquisition Apparatus, and State Information Acquisition System | |
JP2004318522A (ja) | ドライバ実行状態監視システム、ドライバ実行状態監視方法およびドライバ実行状態監視プログラム | |
JP2004318524A (ja) | デバイスドライバ制御モジュール、デバイスドライバ制御方法、デバイスドライバ制御プログラムおよびデバイスドライバ | |
JP2004318523A (ja) | デバイスドライバ、デバイスドライバの制御方法およびデバイスドライバプログラム | |
JP2004295248A (ja) | デバイスドライバ遠隔監視システム | |
JP5338965B1 (ja) | 印刷制御装置、画像形成システムおよびプログラム | |
US5778170A (en) | Data processing system with integral diagnostic procedure | |
JP6839389B2 (ja) | 画像処理及びエラー対処システム並びにリニアライズド及び非リニアライズド・ポータブル・ドキュメント・フォーマット(Pdf)ファイルの印刷方法 | |
JP5014461B2 (ja) | ジョブ状態監視システム、ジョブ状態監視方法、プログラム及び記憶媒体 |