(57)【要約】【課題】遠隔のコンピュータにて稼働しているデバイスドライバを停止させることなく、その実行状態を監視することができないという課題があった。【解決手段】ホストコンピュータＡ１からインターネットを介してイベント管理プログラム５０を監視が必要なクライアントコンピュータＢ１〜Ｂｎに転送する。そして、このイベント管理プログラム５０をホストコンピュータＡ１から起動することによって、プリンタドライバ１０４はデバッグモードに移行し、各種情報を収集しつつ、ホストコンピュータＡ１にインターネットを介して転送する。そして、ホストコンピュータＡ１ではこの転送された各種情報を格納しつつ表示することによって、当該ホストコンピュータＡ１にてプリンタドライバ１０４の実行状態を遠隔監視することが可能になる。【選択図】  図２１
2004295248.tif 000002
【特許請求の範囲】
【請求項１】
所定のデバイスを駆動する際に起動されるデバイスドライバを備えるクライアントコンピュータと、同クライアントコンピュータと相互通信可能なネットワークに接続されたホストコンピュータとを備え、同ホストコンピュータにて同クライアントコンピュータにて動作するデバイスドライバの実行状態を監視可能な所定の監視情報を収集するデバイスドライバ遠隔監視システムであって、
上記ホストコンピュータは、
上記クライアントコンピュータにて上記デバイスドライバとは異なる処理系統で動作可能な監視プログラムを上記ネットワークを介して同クライアントコンピュータに転送する監視プログラム転送手段と、
上記監視プログラムが上記クライアントコンピュータにて動作した際に転送する上記監視情報を入力するとともに所定の記憶領域に格納する監視情報格納手段とを有し、
上記クライアントコンピュータは、
上記転送された監視プログラムを格納する監視プログラム格納手段を有し、
上記クライアントコンピュータにて動作するデバイスドライバは、
上記格納された監視プログラムの起動を検知する起動状態検知手段と、
上記起動を検知した場合に上記デバイスを駆動する際の実行状態を示す上記監視情報を取得するとともに上記起動された監視プログラムに対して同取得した監視情報を出力する監視情報出力手段とを有し、
上記クライアントコンピュータにて動作する監視プログラムは、
上記デバイスドライバが出力する上記監視情報を入力する監視情報入力手段と、
上記入力した監視情報を上記ネットワークを介して上記ホストコンピュータに転送する監視情報転送手段とを有することを特徴とするデバイスドライバ遠隔監視システム。
【請求項２】
上記ホストコンピュータは、上記クライアントコンピュータの監視プログラム格納手段に格納された上記監視プログラムを遠隔起動する遠隔起動手段を有することを特徴とする上記請求項１に記載のデバイスドライバ遠隔監視システム。
【請求項３】
上記クライアントコンピュータにて動作する監視プログラムは、上記ホストコンピュータに対する上記監視情報の転送が正常に行われたか否かを判別する転送状態判別手段を有し、上記監視情報の転送が正常に行われなかった場合に転送対象の監視情報を所定の記憶領域に格納することを特徴とする上記請求項１または請求項２のいずれかに記載のデバイスドライバ遠隔監視システム。
【請求項４】
上記クライアントコンピュータにて動作する監視プログラムは、上記監視情報の転送が正常に行われなかった場合に上記所定の記憶領域に格納されている監視情報の転送を所定周期にて再実行することを特徴とする上記請求項３に記載のデバイスドライバ遠隔監視システム。
【請求項５】
上記クライアントコンピュータにて動作する監視プログラムは、上記再実行時に上記監視情報の転送が正常に行われた場合に上記所定の記憶領域に格納されている監視情報を削除することを特徴とする上記請求項４に記載のデバイスドライバ遠隔監視システム。
【請求項６】
上記ホストコンピュータは、上記クライアントコンピュータにて動作している監視プログラムを遠隔停止する遠隔停止手段を有することを特徴とする上記請求項１〜請求項５のいずれかに記載のデバイスドライバ遠隔監視システム。
【請求項７】
上記クライアントコンピュータにて動作するデバイスドライバは、上記監視プログラムが遠隔停止されたことを検知するとともに同遠隔停止を検知した場合に上記監視プログラム格納手段に格納された監視プログラムを削除する監視プログラム削除手段を有することを特徴とする上記請求項１〜請求項６のいずれかに記載のデバイスドライバ遠隔監視システム。
【請求項８】
上記ホストコンピュータは、上記監視情報格納手段にて所定の記憶領域に格納された監視情報を視認可能に表示する監視情報表示手段を有することを特徴とする上記請求項１〜請求項７のいずれかに記載のデバイスドライバ遠隔監視システム。
【請求項９】
上記クライアントコンピュータにて動作するデバイスドライバは、上記デバイスを駆動する際に、オペレーティングシステムに対して制御アプリケーションプログラミングインターフェース（ＡＰＩ）の呼び出しを行いつつ、同ＡＰＩに基づいた所定の各機能を実行可能に動作する複数の実行モジュールを有し、上記監視情報出力手段は、上記オペレーティングシステムと上記実行モジュールとの間に介在し、同実行モジュールが呼び出しを行うＡＰＩを取得し、同ＡＰＩに関連する所定のＡＰＩ情報を上記監視情報として取得するとともに、上記取得したＡＰＩについて上記オペレーティングシステムに対する呼び出しを行い、上記機能を実行させることを特徴とする上記請求項１〜請求項８のいずれかに記載のデバイスドライバ遠隔監視システム。
【請求項１０】
上記監視情報出力手段は、上記取得したＡＰＩに基づいて上記実行モジュールが動作するソースプログラムの実行行を上記監視情報として取得することを特徴とする上記請求項９に記載のデバイスドライバ遠隔監視システム。
【請求項１１】
上記監視情報出力手段は、上記取得したＡＰＩに基づいて上記実行モジュールが実行する共有資源に対する排他処理に関する所定コマンドに関するコマンド情報を上記監視情報として取得することを特徴とする上記請求項９または請求項１０のいずれかに記載のデバイスドライバ遠隔監視システム。
【請求項１２】
上記監視情報出力手段は、アプリケーションプログラムが出力するＤＥＶＭＯＤＥ情報を取得可能であるとともに、同取得したＤＥＶＭＯＤＥ情報を上記監視情報として取得することを特徴とする上記請求項１０〜請求項１１のいずれかに記載のデバイスドライバ遠隔監視システム。
【請求項１３】
上記監視情報出力手段は、上記取得したＡＰＩに基づいて上記実行モジュールが動作時に入力するデバイスドライバインターフェース（ＤＤＩ）関数を検知するとともに、同検知したＤＤＩ関数に関するＤＤＩ情報を上記監視情報として取得することを特徴とする上記請求項９〜請求項１２のいずれかに記載のデバイスドライバ遠隔監視システム。
【請求項１４】
上記監視情報出力手段は、上記検知したＤＤＩ関数の引数に設定された引数領域を取得する引数領域取得手段と、同取得した引数領域をメモリ領域上にて確保可能であるか否かを判別するメモリ領域判別手段とを有するとともに、上記引数領域をメモリ領域上にて確保可能であるか否かを認識可能な情報を上記監視情報として取得することを特徴とする上記請求項１３に記載のデバイスドライバ遠隔監視システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、デバイスドライバ遠隔監視システムに関し、特に、デバイスドライバの実行状態を監視するデバイスドライバ遠隔監視システムに関する。
【０００２】
【従来の技術】
従来、この種の装置としては、コンピュータのハードウェアやソフトウェアをデバッグするものが多数知られている（例えば、特許文献１〜４を参照。）。
【０００３】
【特許文献１】
特開平２−１０５２３４号公報
【特許文献２】
特開平５−１５１０２１号公報
【特許文献３】
特開昭６４−４４５５２号公報
【特許文献４】
特開平３−２４８２７５号公報
【０００４】
【発明が解決しようとする課題】
上述した従来の装置においては、遠隔のコンピュータにて稼働しているデバイスドライバを停止させることなく、その実行状態を監視することができないという課題があった。
【０００５】
本発明は、上記課題にかんがみてなされたもので、遠隔のコンピュータにて稼働しているデバイスドライバを停止させることなく、その実行状態を監視することが可能なデバイスドライバ遠隔監視システムの提供を目的とする。
【０００６】
【課題を解決するための手段】
上記目的を達成するため、所定のデバイスを駆動する際に起動されるデバイスドライバを備えるクライアントコンピュータと、同クライアントコンピュータと相互通信可能なネットワークに接続されたホストコンピュータとを備え、同ホストコンピュータにて同クライアントコンピュータにて動作するデバイスドライバの実行状態を監視可能な所定の監視情報を収集するデバイスドライバ遠隔監視システムであって、上記ホストコンピュータは、上記クライアントコンピュータにて上記デバイスドライバとは異なる処理系統で動作可能な監視プログラムを上記ネットワークを介して同クライアントコンピュータに転送する監視プログラム転送手段と、上記監視プログラムが上記クライアントコンピュータにて動作した際に転送する上記監視情報を入力するとともに所定の記憶領域に格納する監視情報格納手段とを有し、上記クライアントコンピュータは、上記転送された監視プログラムを格納する監視プログラム格納手段を有し、上記クライアントコンピュータにて動作するデバイスドライバは、上記格納された監視プログラムの起動を検知する起動状態検知手段と、上記起動を検知した場合に上記デバイスを駆動する際の実行状態を示す上記監視情報を取得するとともに上記起動された監視プログラムに対して同取得した監視情報を出力する監視情報出力手段とを有し、上記クライアントコンピュータにて動作する監視プログラムは、上記デバイスドライバが出力する上記監視情報を入力する監視情報入力手段と、上記入力した監視情報を上記ネットワークを介して上記ホストコンピュータに転送する監視情報転送手段とを有することを要旨とする。
【０００７】
かかる構成のもと、デバイス遠隔監視システムでは、クライアントコンピュータにてデバイスドライバが起動されデバイスが駆動される。デバイスドライバは動作するに際してオペレーティングシステムやアプリケーションと連動して諸機能を実現する。かかる場合、それぞれがソフトウェアにて動作することもあり、何らかの原因で不具合が発生し得る。このとき、デバイスドライバの実行状態を監視することによってこの原因を解析することができる。
【０００８】
そこで、本発明は不具合等が発生し、デバイスドライバの実行状態を監視する必要がある場合に、クライアントコンピュータにこの実行状態を監視可能な監視プログラムを転送し、同監視プログラムを動作させることにより、ネットワークを介してホストコンピュータからクライアントコンピュータにて動作するデバイスドライバの実行状態を遠隔監視することを可能にする。このように遠隔監視の必要に応じて、ホストコンピュータは監視プログラム転送手段にて、クライアントコンピュータにてデバイスドライバとは異なる処理体系で動作可能な監視プログラムをネットワークを介して当該クライアントコンピュータに転送する。このとき、クライアントコンピュータは、監視プログラム格納手段にてホストコンピュータの監視プログラム転送手段から転送される監視プログラムを格納する。
【０００９】
そして、必要に応じてクライアントコンピュータに転送され格納された監視プログラムをクライアントコンピュータから直接的もしくはホストコンピュータからクライアントコンピュータで動作するデバイスドライバは、起動状態検知手段にてこの監視プログラムの起動を検知し、管理情報出力手段は、管理プログラムの起動が検知された場合に、当該デバイスドライバがデバイスを駆動する際の実行状態を示す監視情報を取得し、同取得した監視情報を監視プログラムに出力する。ここで、監視プログラムは、監視情報入力手段にてこの出力された監視情報を入力するとともに、監視情報転送手段にてこの入力した監視情報をネットワークを介してホストコンピュータに転送する。ホストコンピュータは、監視情報格納手段にて同転送された監視情報を入力し所定の記憶領域に格納する。そして、ホストコンピュータ側の作業者はこの格納された監視情報に基づいてネットワークを介して接続された遠隔のクライアントコンピュータにて動作しているデバイスドライバの実行状態を監視することが可能になる。
【００１０】
そして、ホストコンピュータは、通知入力手段にてこの通知を入力し、かかる場合に監視プログラム転送手段は、監視プログラムをネットワークを介してクライアントコンピュータに転送する。クライアントコンピュータからホストコンピュータに監視情報を転送する際に何等かの原因にて転送ができなかった場合、転送ができなかった監視情報をクライアントコンピュータ側にてロギングしておけば、このロギングした監視情報に基づいて不具合の解析が可能となるので好ましい。そこで、クライアントコンピュータにて動作する監視プログラムは、転送状態判別手段にてホストコンピュータに対する監視情報の転送が正常に行われたか否かを判別し、監視情報の転送が正常に行われなかった場合に転送対象の監視情報を所定の記憶領域に格納する。
【００１１】
一旦転送ができなかった監視情報のホストコンピュータに対する転送を自動的に行うことができると好ましい。そこで、クライアントコンピュータにて動作する監視プログラムは、監視情報の転送が正常に行われなかった場合に所定の記憶領域に格納されている監視情報の転送を所定周期にて再実行する。転送のリトライにて正常に監視情報をホストコンピュータに転送できた場合、記憶領域に記憶されている監視情報は不要となる。この監視情報を削除すれば記憶領域の資源を有効に使用することができて好ましい。そこで、クライアントコンピュータにて動作する監視プログラムは、転送の再実行時に監視情報の転送が正常に行われた場合、所定の記憶領域に格納されている監視情報を削除する。クライアントコンピュータにて動作する監視プログラムをホストコンピュータから停止することができると、監視プログラムの起動／停止をホストコンピュータ側にて制御することが可能となり作業性が向上する。そこで、ホストコンピュータに遠隔停止手段を設ける。そして、遠隔停止手段にてクライアントコンピュータにて動作している監視プログラムを遠隔停止する。このとき、監視プログラム削除手段は、監視プログラムが遠隔停止されたことを検知するとともに同遠隔停止を検知した場合に監視プログラム格納手段に格納された監視プログラムを削除する。これによって、不要な監視プログラムをクライアントコンピュータから自動的に削除することが可能となり、当該クライアントコンピュータの記憶資源を有効に使用することが可能になる。
【００１２】
ホストコンピュータにて入力した監視情報を視認可能に表示することができると作業者はこの表示に基づいてクライアントコンピュータにて動作するデバイスドライバの実行状態を監視することができて好適である。そこで、ホストコンピュータに監視情報表示手段を設け、同監視情報格納手段にて所定の記憶領域に格納された監視情報を視認可能に表示する。ここで、監視情報の具体的な一例として、クライアントコンピュータにて動作するデバイスドライバは、デバイスを駆動する際に、実行モジュールにてオペレーティングシステムに対して制御アプリケーションプログラミングインターフェース（ＡＰＩ）の呼び出しを行いつつ、同ＡＰＩに基づいた所定の各機能を実行可能に動作する。このとき、監視情報出力手段をオペレーティングシステムと実行モジュールとの間に介在させ、同実行モジュールが呼び出しを行うＡＰＩを取得し、同ＡＰＩに関する所定のＡＰＩ情報の監視情報として取得する。そして、取得したＡＰＩについて上記オペレーティングシステムに対する呼び出しを行い、上記機能を実行させる。ここで、ＡＰＩ情報とはＡＰＩを呼び出した実行モジュールを特定可能な情報や、呼び出されたＡＰＩ名称が含まれる。
【００１３】
また、実行モジュールのソースプログラム内での実行行位置が判別できると解析に際して好ましい。そこで、監視情報出力手段は、取得したＡＰＩに基づいて上記実行モジュールが動作するソースプログラムの実行行を監視情報として取得する。監視情報の他の一例として、監視情報出力手段は、取得したＡＰＩに基づいて実行モジュールが実行する共有資源に対する排他処理に関する所定コマンドに関するコマンド情報を上記監視情報として取得する。共有資源に対する排他処理に関するコマンドの不具合はデッドロックの原因となる。従って、この排他処理に関するコマンド情報を監視することによってデッドロックによる不具合が発生した際にその解析を行うことが可能になる。
【００１４】
また、他の監視情報の一例として、監視情報出力手段は、アプリケーションプログラムが出力するＤＥＶＭＯＤＥ情報を取得可能であるとともに、同取得したＤＥＶＭＯＤＥ情報を監視情報として取得する。監視情報出力手段は、取得したＡＰＩに基づいて上記実行モジュールが動作時に入力するデバイスドライバインターフェース（ＤＤＩ）関数を検知するとともに、同検知したＤＤＩ関数に関するＤＤＩ情報を監視情報として取得する。このＤＤＩ情報はＤＤＩ関数名や、ＤＤＩ関数にて使用されるパラメータ等が勘案できる。監視情報出力手段は、引数領域取得手段にて検知したＤＤＩ関数の引数に設定された引数領域を取得し、メモリ領域判別手段にて取得した引数領域をメモリ領域上にて確保可能であるか否かを判別する。そして、引数領域をメモリ領域上にて確保可能であるか否かを認識可能な情報を監視情報として取得する。
【００１５】
【発明の実施の形態】
ここでは、下記の順序に従って本発明の実施形態について説明する。
（１）印刷システムの構成：
（２）コンピュータの構成：
（３）プリンタドライバ実行状態監視システムの構成：
（４）プリンタドライバ遠隔監視システムの形態：
（５）本発明との対応：
（６）まとめ：
【００１６】
（１）印刷システムの構成：
図１は、本発明のドライバ実行状態監視システムを実現可能な印刷システムの構成を説明するブロック図である。なお、本発明の機能が実行されるのであれば、単体の機器であっても、複数の機器からなるシステムであっても、ＬＡＮ，ＷＡＮ等のネットワークを介して接続がなされ処理が行われるシステムであっても本発明を適用できる。
同図において、ホストコンピュータ１０は、ＲＯＭ１３のプログラム用ＲＯＭあるいは外部メモリ１６ａに記憶された文書処理プログラム等に基づいて図形、イメージ、文字、表（表計算等を含む）等が混在した文書処理を実行するＣＰＵ１１を備え、システムバス１８に接続される各デバイスをＣＰＵ１１が総括的に制御可能になっている。
【００１７】
また、このＲＯＭ１３のプログラム用ＲＯＭあるいは外部メモリ１６ａには、ＣＰＵ１１の制御プログラムであるオペレーティングシステムプログラム等を記憶し、ＲＯＭ１３のデータ用ＲＯＭあるいは外部メモリ１６ａには文書処理の際に使用するフォントデータ等を記憶し、ＲＯＭ１３のフォント用ＲＯＭあるいは外部メモリ１６ａには上記文書処理等を行う際に使用する各種データを記憶する。ＲＡＭ１２は、ＣＰＵ１１の主メモリ、ワークエリア等として機能する。キーボードコントローラ（ＫＢＣ）１４は、接続されたキーボード１４ａや、図示しないマウス等のポインティングデバイスからのキー入力を制御する。ＣＲＴコントローラ（ＣＲＴＣ）１５は、接続されたＣＲＴディスプレイ１５ａの表示を制御する。ディスクコントローラ（ＤＫＣ）１６では、ブートプログラム、各種のアプリケーションプログラム、フォントデータ、ユーザファイル、編集ファイル、プリンタ制御コマンド生成プログラム（以下、プリンタドライバ）等を記憶するハードディスク、フレキシブルディスク等の外部メモリ１６ａとのアクセスを制御する。
【００１８】
プリンタコントローラ（ＰＲＴＣ）１７は、双方向性インターフェース３０を介してプリンタ２０に接続されて、プリンタ２０との通信制御処理を実行可能になっている。なお、ＣＰＵ１１は、例えばＲＡＭ１２上に設定された表示情報ＲＡＭへのアウトラインフォントの展開（ラスタライズ）処理を実行し、ＣＲＴディスプレイ１５ａでのＷＹＳＩＷＹＧを可能としている。また、ＣＰＵ１１は、ＣＲＴディスプレイ１５ａ上の図示しないマウスカーソル等で指示されたコマンドに基づいて登録された種々のウィンドウを開き、種々のデータ処理を実行する。ユーザは印刷を実行する際、印刷の設定に関するウィンドウを開き、プリンタの設定や、印刷モードの設定を含むプリンタドライバに対する印刷処理方法の設定を行えるようになっている。
【００１９】
プリンタ２０は、プリンタＣＰＵ２２により制御される。プリンタＣＰＵ２２は、ＲＯＭ２３のプログラム用ＲＯＭに記録されたし制御プログラム等あるいは外部メモリ２６ａに記憶された制御プログラム等に基づいて、システムバス２８に接続される印刷部インターフェース２５を介して印刷部（プリンタエンジン）２５ａに出力情報としての画像信号を出力する。また、ＲＯＭ２３のプログラムＲＯＭには、ＣＰＵ２１の制御プログラム等を記憶する。ＲＯＭ２３のフォント用ＲＯＭには、上記出力情報を生成する際に使用するフォントデータ等が記憶され、ＲＯＭ２３のデータ用ＲＯＭには、ハードディスク等の外部メモリ２６ａがないプリンタの場合に、ホストコンピュータ１０上で利用される情報等が記憶されている。ＣＰＵ２１は、入力部２４を介してホストコンピュータ１０との通信処理が可能となっており、プリンタ２０内の情報等をホストコンピュータ１０に通知できる。ここで、ＲＡＭ２２は、ＣＰＵ２１の主メモリや、ワークエリア等として機能するＲＡＭで、図示しない増設ポートに接続されるオプションＲＡＭによりメモリ容量を拡張することができるように構成されている。
【００２０】
なお、ＲＡＭ２２は、出力情報展開領域、環境データ格納領域、ＮＶＲＡＭ等に用いられる。上述したハードディスク、ＩＣカード等の外部メモリ２６ａは、メモリコントローラ（ＭＣ）２６によりアクセスを制御される。外部メモリ２６ａは、オプションとして接続され、フォントデータ、エミュレーションプログラム、フォームデータ等を記憶する。また、操作パネル２７は、図示しない操作のためのスイッチやＬＥＤ表示器等が配設されている。また、上述した外部メモリ２６ａは、１個に限らず、複数個備えられ、内蔵フォントに加えてオプションカード、言語系の異なるプリンタ制御言語を解釈するプログラムを格納した外部メモリを複数接続できるように構成されていても良い。さらに、図示しないＮＶＲＡＭを有し、操作パネル２７からのプリンタモード設定情報を記憶するようにしても良い。
【００２１】
（２）コンピュータの構成：
図２は、プリンタ等の印刷装置が直接接続されているか、あるいはネットワーク経由で接続されているホストコンピュータ１０における典型的な印刷処理の処理内容を示したフローチャートである。
同図において、アプリケーション１００、ＷｉｎｄｏｗｓＡＰＩ１０１（Ｗｉｎｄｏｗｓは米マイクロソフト社の登録商標、以下、ＡＰＩ１０１とする。）、グラフィックエンジン１０２、プリンタドライバ１０３およびシステムスプーラ１０５は、外部メモリ１６ａに保存されたファイルとして存在し、実行される場合にオペレーティングシステムやそのモジュールを利用するモジュールによってＲＡＭ１２にロードされ実行されるプログラムモジュールである。また、アプリケーション１００およびプリンタドライバ１０４は、外部メモリ１６ａのフレキシブルディスクや図示しないＣＤ−ＲＯＭあるいは図示しないネットワークを経由して当該外部メモリ１６ａのハードディスクに追加することが可能になっている。外部メモリ１６ａに保存されているアプリケーション１００は、ＲＡＭ１２にロードされ実行可能になっているグラフィックエンジン１０２を利用して出力（描画）を行う。
【００２２】
グラフィックエンジン１０２は、印刷装置ごとに用意されたプリンタドライバ１０４を同様に外部メモリ１６ａからＲＡＭ１２にロードし、アプリケーション１００の出力をプリンタドライバ１０４に設定する。そして、アプリケーション１００からＡＰＩ１０１を受け取り、対応するＧＤＩ（グラフィックデバイスインターフェース）関数に変換するとともに、ＤＤＩ（デバイスドライバインターフェース）関数１０３に変換して、プリンタドライバ１０４へＤＤＩ関数１０３を出力する。プリンタドライバ１０４は、グラフィックエンジン１０２から受け取ったＤＤＩ関数１０３に基づいて、プリンタ２０が認識可能なプリンタ制御コマンド、例えばＰＤＬ（ページ記述言語）に変換する。変換されたプリンタ制御コマンドは、オペレーティングシステムによってＲＡＭ１２にロードされたシステムスプーラ１０５にて呼び出されるＡＰＩ１０１を経てシリアルもしくはパラレルもしくはネットワークドライバにて構成されるインターフェース２０を経由してプリンタ２０へ印刷データとして出力される仕組みになっている。このシステムスプーラ１０５は内部にプリントプロセッサ１０５ａとプリントモニタ１０５ｂとを有し、これらの構成を動作させて所定の機能を実現する。
【００２３】
ここで、上述したようにアプリケーション１００にて印刷を行う際に、当該アプリケーション１００からプリンタドライバ１０４に対して設定が行われる。この設定はＡＰＩ１０１もしくはＤＤＩ関数１０３を通じて行われたり、アプリケーション１００から直接プリンタドライバ１０４に入力されるＤＥＶＭＯＤＥ情報に基づいて行われる。プリンタドライバ１０４もプログラムであり、コーディングミスやソフトウェア設計不具合により内部にバグを含む場合がある。むろん、アプリケーション１００もプログラムであり、内部にバグを含む場合がある。すなわち、アプリケーション１００がプリンタドライバ１０４に対して諸設定等を行う処理にバグが存在すると、これが原因となり、プリンタドライバ１０４の動作が不安定になることがある。
【００２４】
また、アプリケーション１００の処理は正常であるが、プリンタドライバ１０４のバグが原因となり、当該プリンタドライバ１０４の動作が不安定になることがある。このとき、プリンタドライバ１０４の実行状態をトレースすることにより、アプリケーション１００にバグがあるのか、プリンタドライバ１０４にバグがあるのかを切り分ける作業を行う。このとき、ホストコンピュータ１０にツールプログラムを組み込んだプリンタドライバをインストールしたりする。しかし、このツールプログラムの仕様等に起因してホストコンピュータ１０を再立ち上げしなければならない。従って、ホストコンピュータ１０は一時的にシャットアウトされ停止する。このため、業務用のアプリケーション１００の動作も停止してしまうのため、業務が滞ってしまうという問題があった。
【００２５】
そこで、本実施形態では、プリンタドライバ１０４とは別の処理系統で実行される後述するイベント管理プログラムを起動させるとともに、プリンタドライバ１０４にてこのイベント管理プログラムの起動を検知可能とするとともに、イベント管理プログラムが起動された場合にプリンタドライバ１０４から当該プリンタドライバ１０４の実行状態を示す諸情報をイベント管理プログラムに対して出力し、当該イベント管理プログラムにてプリンタドライバ１０４の実行状態を監視することを可能にする。これによって、プリンタドライバ１０４が不安定になる不具合が発生した場合に、イベント管理プログラムを起動するのみで同プリンタドライバ１０４の実行状態をトレース可能なデバッグモードに移行することができるため、ホストコンピュータ１０をシャットダウンする必要がない。従って、ホストコンピュータ１０にて実施されている各種業務が停止してしまうことを防止することが可能になる。
【００２６】
（３）プリンタドライバ実行状態監視システムの構成：
図３は、プリンタドライバ１０４の実行状態を監視するプリンタドライバ実行状態監視システムの概略構成をを示した概略構成図である。また、図４は、プリンタドライバ１０４の概略内部構成を示した構成図であり、図５は、イベント管理プログラム５０の概略内部構成を示した構成図である。図において、プリンタドライバ１０３は共有メモリ４０を介してイベント管理プログラム５０との各種情報のやり取りを行う。本実施形態において、この各種情報は、起動／停止情報４１と、ＡＰＩ呼出情報４２と、ＤＥＶＭＯＤＥ情報４３と、ＤＤＩ情報４４と、ＡＰＩ情報４５と、メモリオーバーラン情報４６とから構成されている。各種情報の内容については後述する。プリンタドライバ１０４は、ＤＤＩ関数１０３を入力すると、複数の実行モジュール１０４ａの中からこの入力したＤＤＩ関数１０３に対応する処理を実行可能な実行モジュール１０４ａにてＤＤＩ関数１０３に基づいて処理を実行し、所定の機能を実現する。
【００２７】
このとき、実行モジュール１０４ａではこの処理に伴い、ＡＰＩ１０１を呼び出し、このＡＰＩ１０１にて実行された処理結果に基づいてＤＤＩ関数１０３に対応する処理を適宜実行する。本実施形態ではこの呼び出されたＡＰＩ１０１を一旦ラッパーモジュール１０４ｂにて受け付ける。このラッパーモジュール１０４ｂは、実行モジュール１０４ａがＡＰＩ１０１の呼び出しを行うに際して、起動される。すなわち、実行モジュール１０４ａにて呼び出されて起動される。呼び出されたラッパーモジュール１０４ｂは、実行モジュール１０４ａが呼び出したＡＰＩ１０１を横取りする。そして、イベント管理プログラム５０が起動しているか否かを判別し、起動している場合には各種情報を共有メモリ４０に転送し、イベント管理プログラム５０にて取得可能にするとともに、実行モジュール１０４ａが呼び出し一旦横取りしたＡＰＩ１０１を呼び出し、実行モジュール１０４ａにてこのＡＰＩ１０１の処理結果に基づいたＤＤＩ関数１０３の処理を実行可能にする。これを本実施形態ではデバッグモードと言う。このイベント管理プログラム５０にて取得可能にする手法を、各種情報のイベント管理プログラム５０への転送と呼ぶ。ここで、本実施形態においては、共有メモリ４０を介してプリンタドライバ１０４とイベント管理プログラム５０との間における各種情報のやり取りを実現する態様を採用したが、むろん、プロセス間通信等の通信手法に基づいて各種情報をプリンタドライバ４０からイベント管理プログラム５０に対して出力し、取得可能にする態様を採用しても良い。
【００２８】
一方、イベント管理プログラム５０が起動していない場合には各種情報の共有メモリ４０への転送は行わない。そして、実行モジュール１０４ａが呼び出し一旦横取りしたＡＰＩ１０１を呼び出し、実行モジュール１０４ａにてこのＡＰＩ１０１の処理結果に基づいたＤＤＩ関数１０３の処理を実行可能にする。これを本実施形態では通常モードと言う。
一方、イベント管理プログラム５０は、初期設定モジュール５０ａと、データ収集モジュール５０ｂと、表示モジュール５０ｃとを有する構成となっている。初期設定モジュール５０ａはイベント管理プログラム５０が起動された際に起動状態を認識可能な情報を共有メモリ４０に転送し、停止された際に停止状態を認識可能な情報を共有メモリ４０に転送する。データ収集モジュール５０ｂは、共有メモリ４０に転送された各種情報を読み出して収集して外部メモリ１６ａに格納する機能を実現し、表示モジュール５０ｃは収集した各種情報を所定の形式に基づいてユーザが視認可能な画面を表示する。
【００２９】
ここで、上述した各種情報について説明する。起動／停止情報４１は、イベント管理プログラム５０の起動状態および停止状態を認識可能な情報が格納されており、プリンタドライバ１０４は、この起動／停止情報に基づいてイベント管理プログラム５０が起動されているか否かを判別可能になっている。ＡＰＩ呼出情報４２は、実行モジュール１０４ａから呼び出されたＡＰＩ１０１のＡＰＩ名称や、当該ＡＰＩ１０１を呼び出した実行モジュール１０４ａを特定可能なモジュール名称や、このＡＰＩ１０１の呼び出しが行われた実行モジュール１０４ａのソースプログラムの実行行や、呼び出し日時や、エラー情報（例えば、ＮＵＬＬポイントが渡ってきた等）等の情報を有している。これらの情報は、ＡＰＩ１０１に基づいて検出可能になっている。
【００３０】
ＤＥＶＭＯＤＥ情報４３は、印刷時にアプリケーション１００からプリンタドライバ１０４に渡されるＤＥＶＭＯＤＥ構造体に基づいた情報であり、プリンタ２０のデバイス名や、バージョン番号や、プリンタドライバ１０４のバージョン番号や、印刷用紙の方向や、印刷用紙サイズや、印刷用紙の高さおよび幅や、拡大縮小率や、印刷部数および印刷品質（簡易印刷、低品質、高品質等）や、白黒もしくはカラー設定等の情報を有している。ＤＤＩ情報４４は、実行モジュール１０４ａが入力したＤＤＩ関数１０３の関数名称や、この関数に設定された引数もしくはパラメータ等の情報を有している。この情報は実行モジュール１０４ａに問い合わせて取得可能になっている。ＡＰＩ情報４５は、実行モジュール１０４ａが所定の共有資源を排他的に使用する場合に呼び出すＡＰＩ１０１に関する情報である。例えば、“Ｏｐｅｎ”“Ｃｌｏｓｅ”や、“Ａｌｌｏｃ”“Ｆｒｅｅ”等の対となる処理を行い、共有資源を排他的にロックするとともに、排他的な処理が終了したらこのロックを解除することを示す情報である。この情報により排他的処理の不完全な完了状態を認識することが可能になっている。
【００３１】
メモリオーバーラン情報４６は、ＤＤＩ関数１０３の引数に設定された引数領域がメモリ領域上に確保不可能な場合にその旨を通知する情報である。このＤＤＩ関数１０３の引数領域は、アプリケーション１００がグラフィックエンジン１０２に引き渡すＡＰＩ１０１に設定されている。すなわち、アプリケーション１００が出力するＡＰＩ１０１に基づいてＤＤＩ関数１０３の引数領域が構成される。ここで、アプリケーション１００のバグによってせっていされた引数領域をメモリ領域上に確保できない場合、この確保できないメモリ領域に実行モジュール１０４ａがアクセスすると不具合が発生する。従って、このメモリオーバーラン情報４６に基づいてアプリケーション１００のバグ（引数設定のバグ）を発見することが可能になる。
【００３２】
ここで、上述してきた機能を実現する際にプリンタドライバ１０４にて実行される概略処理内容を図６のフローチャートに示す。
同図において、プリンタドライバ１０４はグラフィックドライバ１０２からＤＤＩ関数１０３を入力すると、複数ある実行モジュール１０４ａのうち、当該入力したＤＤＩ関数１０３の処理を実行可能な実行モジュール１０４ａにてＤＤＩ関数１０３の処理を実行する（ステップＳ１００）。そして、このＤＤＩ関数１０３の処理においてＡＰＩ１０１の呼び出しが発生した場合、ラッパーモジュール１０４ｂを呼び出す。このラッパーモジュール１０４ｂは、イベント管理プログラム５０が起動している場合、デバッグモードに移行し上述した各種情報を作成して共有メモリ４０に転送するとともに、ＡＰＩ１０１の呼び出しを行う。一方、ラッパーモジュール１０４ｂは、イベント管理プログラム５０が起動していない場合、通常モードに移行して実行モジュール１０４ａが呼び出したＡＰＩ１０１の呼び出しを行う（ステップＳ１０５）。
【００３３】
図７は、ラッパーモジュール１０４ｂを呼び出す際に実行モジュール１０４ａにて実行される処理内容を示したフローチャートである。
同図において、実行モジュール１０４ａはグラフィックエンジン１０２からＤＤＩ関数１０３を入力すると（ステップＳ１５０）、実行モジュール１０４ａに予め規定されている対応するＤＤＩ関数を引き出して、ＤＤＩ関数１０３に基づいた処理を実行する（ステップＳ１５５）。この処理においてＡＰＩ１０１を呼び出す処理が発生した場合（ステップＳ１６０）、ラッパーモジュール１０４ｂを呼び出して同ラッパーモジュール１０４ｂを動作可能状態にする（ステップＳ１６５）。このラッパーモジュール１０４ｂの呼び出し方法は特に限定されず、ＤＤＩ関数１０３に対応するＤＤＩ関数の中に起動コマンドを埋め込んでおいても良いし、ラッパーモジュール１０４ｂの呼び出し専用のＡＰＩ１０１を規定しておき、同ＡＰＩ１０１を呼び出すことによってラッパーモジュール１０４ｂを呼び出すようにしても良い。
【００３４】
図８は、ＡＰＩ呼出情報４２をイベント管理プログラム５０に転送する際にラッパーモジュール１０４ｂにて実行される処理内容を示したフローチャートである。
同図において、先ず最初に実行モジュール１０４ａからの呼び出しがあったか否かを判別する（ステップＳ２００）。実行モジュール１０４ａからの呼び出しがあった場合は、共有メモリ４０の起動／停止情報４１にアクセスする（ステップＳ２０５）。そして、この起動／停止情報４１にイベント管理プログラム５０が起動時に初期設定モジュール５０ａによって格納する起動情報が存在するか否かを判別する（ステップＳ２１０）。起動情報が存在すると判別された場合は、デバッグモードに移行し、実行モジュール１０４ａが呼び出したＡＰＩ１０１に基づくＡＰＩ呼出情報を取得して（ステップＳ２１５）、ＡＰＩ呼出情報４２として共有メモリ４０に転送することによって、イベント管理プログラム５０に転送する（ステップＳ２２０）。一方、ステップＳ２１０にて起動情報が存在しないと判別された場合は、通常モードに移行し、実行モジュール１０４ａが呼び出したＡＰＩ１０１の呼び出しを行う（ステップＳ２２５）。
【００３５】
ここで、イベント管理プログラム５０の初期設定モジュール５０ａによって起動／停止情報４１を更新する際に実行される処理内容を図９のフローチャートに示す。
同図において、先ず最初にイベント管理プログラム５０に対する起動操作が行われたか否かを判別する（ステップＳ２５０）。起動操作が行われたと判別した場合は、共有メモリ４０にアクセスするとともに、起動／停止情報４１に起動情報を格納する（ステップＳ２５５）。一方、イベント管理プログラム５０に対する停止操作が行われた場合は（ステップＳ２６０）、共有メモリ４０にアクセスするとともに、起動／停止情報４１に停止情報を格納する（ステップＳ２６５）。このように、イベント管理プログラム５０に対する起動操作もしくは停止操作に基づいて起動／停止情報４１を更新することによって、プリンタドライバ１０４のラッパーモジュール１０４ｂはこの起動／停止情報４１に格納された情報に基づいてイベント管理プログラム５０の状態を判別することが可能になる。むろん、イベント管理プログラム５０の状態を判別する手法は上述の手法に限定されるものではなく、イベント管理プログラム５０が起動された際に、当該イベント管理プログラム５０から起動通知をプリンタドライバ１０４に対して直接入力させるようにしても良いことは言うまでもない。
【００３６】
図１０は、ＤＥＶＭＯＤＥ情報４３をイベント管理プログラム５０に転送する際にラッパーモジュール１０４ｂにて実行される処理内容を示したフローチャートである。
同図において、先ず最初に実行モジュール１０４ａからの呼び出しがあったか否かを判別する（ステップＳ３００）。実行モジュール１０４ａからの呼び出しがあった場合は、共有メモリ４０の起動／停止情報４１にアクセスする（ステップＳ３０５）。そして、この起動／停止情報４１にイベント管理プログラム５０が起動時に初期設定モジュール５０ａによって格納する起動情報が存在するか否かを判別する（ステップＳ３１０）。起動情報が存在すると判別された場合は、デバッグモードに移行し、実行モジュール１０４ａに入力されたＤＤＩ関数１０３が特定のＤＤＩ関数１０３（ＤＥＶＭＯＤＥ情報が付随するＤＤＩ関数）であるか否かを判別する（ステップＳ３１５）。特定のＤＤＩ関数１０３であると判別された場合は、ＡＰＩ１０１を呼び出したアプリケーション１００からＤＥＶＭＯＤＥ情報を取得し（ステップＳ３２０）、所定のデータ構造体にコピーしてこのデータ構造体を共有メモリ４０に転送する。これにより、同共有メモリ４０に転送したＤＥＶＭＯＤＥ情報４３をイベント管理プログラム５０に転送する（ステップＳ３２５）。一方、ステップＳ３１０にて起動情報が存在しないと判別された場合は、通常モードに移行し、実行モジュール１０４ａが呼び出したＡＰＩ１０１の呼び出しを行う（ステップＳ３３０）。
【００３７】
図１１は、ＤＤＩ情報４４をイベント管理プログラム５０に転送する際に実行モジュール１０４ａにて実行されるる処理内容を示したフローチャートである。
同図において、実行モジュール１０４ａはグラフィックエンジン１０２からＤＤＩ関数１０３を入力すると（ステップＳ４００）、ラッパーモジュール１０４ｂを呼び出して起動させる（ステップＳ４０５）。そして、ＤＤＩ関数１０３に基づいた処理を開始する（ステップＳ４１０）。ここで、後述するラッパーモジュール１０４ｂの処理にて実行されるＤＤＩ情報４４のイベント管理プログラム５０への転送が完了したか否かを判別し、転送が完了するまで待機する（ステップＳ４１５）。そして、ＤＤＩ関数１０３に基づいた処理を実行する（ステップＳ４２０）。上述したようにＤＤＩ関数情報４４をイベント管理プログラム５０に転送する際には、ラッパーモジュール１０４ｂの呼び出しを実行モジュール１０４ａにＤＤＩ関数１０３が入力されたタイミングとする。
【００３８】
図１２は、ＤＤＩ情報４４をイベント管理プログラム５０に転送する際にラッパーモジュール１０４ｂにて実行される処理内容を示したフローチャートである。
同図において、先ず最初に実行モジュール１０４ａからの呼び出しがあったか否かを判別する（ステップＳ４５０）。実行モジュール１０４ａからの呼び出しがあった場合は、共有メモリ４０の起動／停止情報４１にアクセスする（ステップＳ４５５）。そして、この起動／停止情報４１にイベント管理プログラム５０が起動時に初期設定モジュール５０ａによって格納する起動情報が存在するか否かを判別する（ステップＳ４６０）。起動情報が存在すると判別された場合は、デバッグモードに移行し、実行モジュール１０４ａに入力されたＤＤＩ関数１０３のＤＤＩ関数名称や引数のパラメータを取得し（ステップＳ４６５）、所定のデータ構造体にコピーしてこのデータ構造体を共有メモリ４０にＤＤＩ情報４４として格納する。これにより、同共有メモリ４０に転送したＤＤＩ情報４４をイベント管理プログラム５０に転送する（ステップＳ４７０）。そして、上述した実行モジュール１０４ａのステップＳ４１５に対する転送完了通知を同実行モジュール１０４ａに対して出力する（ステップＳ４７５）。一方、ステップＳ３１０にて起動情報が存在しないと判別された場合は、通常モードに移行する。
【００３９】
図１３は、ＡＰＩ情報４５をイベント管理プログラム５０に転送する際にラッパーモジュール１０４ｂにて実行される処理内容を示したフローチャートである。
同図において、先ず最初に実行モジュール１０４ａからの呼び出しがあったか否かを判別する（ステップＳ５００）。実行モジュール１０４ａからの呼び出しがあった場合は、共有メモリ４０の起動／停止情報４１にアクセスする（ステップＳ５０１）。そして、この起動／停止情報４１にイベント管理プログラム５０が起動時に初期設定モジュール５０ａによって格納する起動情報が存在するか否かを判別する（ステップＳ５０２）。起動情報が存在すると判別された場合は、デバッグモードに移行し、実行モジュール１０４ａが呼び出したＡＰＩ１０１を入力する（ステップＳ５０５）。そして、このＡＰＩ１０１の種別を判別する（ステップＳ５１０）。
【００４０】
ここで、この判別したＡＰＩ１０１の種別が共有資源を占有、すなわちロックするためのＡＰＩ１０１（例えば、“ＧｌｏｂａｌＡｌｌｏｃ”，“ＨｅａｐＡｌｌｏｃ”，“ｍａｌｌｏｃ”等）であるか否かを判別し（ステップＳ５１５）、占有ＡＰＩ１０１であれば、共有メモリ４０に転送されているＡＰＩ情報４５を読み込みつつに占有ＡＰＩ１０１の発生情報を追加して更新したＡＰＩ情報４５を共有メモリ４０に転送することによってイベント管理プログラム５０に転送する（ステップＳ５２０）。一方、判別したＡＰＩ１０１の種別が占有した共有資源を解放するためのＡＰＩ１０１（例えば、“ＧｌｏｂａｌＦｒｅｅ”，“ＨｅａｐＦｒｅｅ”，“ｆｒｅｅ”等）を示す解放ＡＰＩ１０１である場合は（ステップＳ５２５）、共有メモリ４０に転送されているＡＰＩ情報４５を読み込みつつに解放ＡＰＩ１０１に対応する占有ＡＰＩ１０１のＡＰＩ情報を削除して更新したＡＰＩ情報４５を共有メモリ４０に転送することによってイベント管理プログラム５０に転送する（ステップＳ５３０）。
【００４１】
図１４は、メモリオーバーラン情報４６をイベント管理プログラム５０に転送する際に実行モジュール１０４ａにて実行される処理内容を示したフローチャートである。
同図において、実行モジュール１０４ａはグラフィックエンジン１０２からＤＤＩ関数１０３を入力すると（ステップＳ５５０）、ラッパーモジュール１０４ｂを呼び出して起動させる（ステップＳ５５５）。ここで、後述するラッパーモジュール１０４ｂの処理にて実行されるメモリ領域のチェック結果の応答を入力したか否かを判別し、応答の入力まで待機する（ステップＳ５６０）。そして、応答があった場合は、後述するラッパーモジュール１０４ｂから入力する情報が引数を設定したパラメータ構造体であるか否かを判別する（ステップＳ５６５）。入力した情報が引数を設定したパラメータ構造体であると判別された場合は、この設定された引数に基づいてＤＤＩ関数１０３の処理を実行する（ステップＳ５７０）。一方、入力した情報がパラメータ構造体ではないと判別された場合は、メモリ領域のチェックでエラーが発生していることを示すエラー通知であるため、所定のエラー処理を実行する（ステップＳ５７５）。このエラー処理は、例えば、ＤＤＩ関数１０３に基づく処理を中止して、その旨をユーザに通知する表示を行う等の処理が勘案できる。
【００４２】
図１５は、メモリオーバーラン情報４６をイベント管理プログラム５０に転送する際にラッパーモジュール１０４ｂにて実行される処理内容を示したフローチャートである。
同図において、先ず最初に実行モジュール１０４ａからの呼び出しがあったか否かを判別する（ステップＳ６００）。実行モジュール１０４ａからの呼び出しがあった場合は、共有メモリ４０の起動／停止情報４１にアクセスする（ステップＳ６０５）。そして、この起動／停止情報４１にイベント管理プログラム５０が起動時に初期設定モジュール５０ａによって格納する起動情報が存在するか否かを判別する（ステップＳ６１０）。起動情報が存在すると判別された場合は、デバッグモードに移行し、実行モジュール１０４ａが入力したＤＤＩ関数１０３に設定された引数領域を取得する（ステップＳ６１５）。
【００４３】
この引数領域は、例えば、ＤＤＩ関数１０３が“ＤｒｖＳｔａｒｔＤｏｃ”（印刷ドキュメントの転送準備ができたときに、グラフィックエンジン１０２から呼ばれるＤＤＩ関数）である場合、印刷情報に関する構造体へのポイントである“ＳＵＲＦＯＢＪ＊ｐｓｏ”であったり、印刷ドキュメント名の文字列へのポインタ“ＬＰＷＳＴＲ  ｐｗｓｚＤｏｃＮａｍｅ”であったり、ジョブＩＤを示す“ＤＷＯＲＤ  ｄｗＪｏｂＩｄ”であったりする。引数領域を取得すると、所定のＷｉｎｄｏｗｓの関数を利用してこの引数領域がメモリ領域上に存在しているか否か、すなわち引数領域をメモリ領域上に確保可能であるか否かをチェックする（ステップＳ６２０）。このＷｉｎｄｏｗｓの関数はチェック後に戻り値をラッパーモジュール１０４ｂに返答するので、次にこの戻り値が失敗を示す値、すなわち引数領域がメモリ領域上に確保不可能の場合には、共有メモリ４０にメモリオーバーラン情報４６を格納することによってイベント管理プログラム５０に転送するとともに（ステップＳ６３０）、実行モジュール１０４ａに対してエラー通知の応答を行う（ステップＳ６３５）。
【００４４】
従って、共有メモリ４０にメモリオーバーラン情報４６が格納されていれば、メモリオーバーランの不具合があったことを認識することが可能になる。一方、Ｗｉｎｄｏｗｓの関数が返答した戻り値が有効を示す値、すなわち引数領域がメモリ領域上に確保可能の場合には、引数領域をパラメータ構造体にコピーするとともに（ステップＳ６４０）、実行モジュール１０４ａに転送する（ステップＳ６４５）。そして、実行モジュール１０４ａはこの転送されたパラメータ構造体に基づいて上述したステップＳ５７０にてＤＤＩ関数１０３に基づいた処理を実行することになる。
【００４５】
図１６は、各種情報を入力した際にイベント管理プログラム５０のデータ収集モジュール５０ｂにて実行される処理内容を示したフローチャートである。
同図において、所定間隔もしくはある規則に基づいて規定された間隔等に基づいて共有メモリ４０にアクセスし、ラッパーモジュール１０４ｂによって当該共有メモリ４０に転送された各種情報４２〜４６を入力する（ステップＳ６５０）。そして、外部メモリ１６ａに各種情報４２〜４６を個別に格納する（ステップＳ６５５）。
【００４６】
図１７は、各種情報を表示する際にイベント管理プログラム５０の表示モジュール５０ｃにて実行される処理内容を示したフローチャートである。また、図１８および図１９は、表示モジュール５０ｃによってＣＲＴディスプレイ１５ａに表示される画面構成の一例を示した画面構成図である。
同図において、ＣＲＴディスプレイ１５ａにイベント管理プログラム５０の所定のユーザインターフェース画面が表示されると、表示モジュール１５ｃは、外部メモリ１６ａに格納した各種情報４２〜４６を視認可能にする画面表示を行う処理の待機状態となる。ここで、このユーザインターフェース画面から所定操作に基づいてＡＰＩ呼出情報４２の表示要求が行われると（ステップＳ７００）、外部メモリ１６ａからＡＰＩ呼出情報４２を読み出して（ステップＳ７０５）、ＣＲＴディスプレイ１５ａに表示する（ステップＳ７１０）。
【００４７】
ユーザインターフェース画面から所定操作に基づいてＤＥＶＭＯＤＥ情報４３の表示要求が行われると（ステップＳ７１５）、外部メモリ１６ａからＤＥＶＭＯＤＥ情報４３を読み出して（ステップＳ７２０）、ＣＲＴディスプレイ１５ａに表示する（ステップＳ７２５）。ユーザインターフェース画面から所定操作に基づいてＤＤＩ情報４４の表示要求が行われると（ステップＳ７３０）、外部メモリ１６ａからＤＤＩ情報４４を読み出して（ステップＳ７３５）、ＣＲＴディスプレイ１５ａに表示する（ステップＳ７４０）。ユーザインターフェース画面から所定操作に基づいてＡＰＩ情報４５の表示要求が行われると（ステップＳ７４５）、外部メモリ１６ａからＡＰＩ情報４５を読み出して（ステップＳ７５０）、ＣＲＴディスプレイ１５ａに表示する（ステップＳ７５５）。ユーザインターフェース画面から所定操作に基づいてメモリオーバーラン情報４６の表示要求が行われると（ステップＳ７６０）、外部メモリ１６ａからメモリオーバーラン情報４６を読み出して（ステップＳ７６５）、ＣＲＴディスプレイ１５ａに表示する（ステップＳ７７０）。そして、各画面表示において、例えば、引数の表示等に基づいて不具合の解析を行うことが可能になる。
【００４８】
（４）プリンタドライバ遠隔監視システムの形態：
上述してきた実施形態においては、プリンタドライバ１０４が動作するホストコンピュータ１０にてプリンタドライバ１０４とは異なる処理系統にて起動可能なイベント管理プログラム５０を起動させて、プリンタドライバ１０４にてこのイベント管理プログラム５０の起動を検知した場合にデバッグモードに移行し、同プリンタドライバ１０４から各種情報をイベント管理プログラム５０に共有メモリ４０を介して転送した。一方、イベント管理プログラム５０の起動が検知されない場合に通常モードに移行し、実行モジュール１０４ａが呼び出したＡＰＩ１０１に基づいてＤＤＩ関数１０３の処理を実行可能にした。
【００４９】
このようにプリンタドライバ１０４とは別の処理系統にて起動可能なイベント管理プログラム５０の起動させることによりデバッグモードに移行できるようにしたため、プリンタドライバ１０４の実行状態をトレースする際にホストコンピュータ１０を再立ち上げする必要がなくなった。そして、イベント管理プログラム５０にて収集された各種情報は、メンテナンス部門に引き渡されて解析される。この解析によってバグがプリンタドライバ１０４側にあるのかアプリケーション１００側にあるかを判別する。
【００５０】
この場合、メンテナンス要員は、ホストコンピュータ１０が設置されている現場に赴き、当該ホストコンピュータ１０にイベント管理プログラム５０をインストールし、もしくは既にインストールされているイベント管理プログラム５０を起動するとともに、収集した各種情報をリムーバブルな記録媒体に記憶して持ち帰る必要があった。この場合、人件費や交通費などの工数がかかり好ましくない。そこで、メンテナンス部門のホストコンピュータと顧客のクライアントとをネットワークにて接続し、適宜イベント管理プログラム５０をクライアントに転送して実行させるとともに、同イベント管理プログラム５０にて収集した各種情報をネットワークを介してホストコンピュータ１０に転送させるようにすれば、メンテナンス要員は現地に赴く必要がなくなり、工数を削減することができるとともに、各種情報に基づいた不具合の解析に直ぐに着手することが可能となり、プリンタドライバ１０４の実行状態を監視し解析すると言う作業の効率を向上させることが可能となり好適である。
【００５１】
図２０は、プリンタドライバ遠隔監視システムの概略構成を示したシステム構成図である。
同図において、ホストコンピュータＡ１はプリンタドライバ１０４のプリンタドライバ製造会社Ａに設置され、インターネットに接続されている。むろん、ホストコンピュータＡ１はメンテナンス会社に設置しても良く、サービス提供態様に応じて適宜設置場所は変更可能である。プリンタドライバ１０４を購入した顧客Ｂは自己のクライアントコンピュータＢ１〜Ｂｎにプリンタドライバ１０４をインストールして印刷を行う。このクライアントコンピュータＢ１〜Ｂｎも同様にインターネットに接続されており、ホストコンピュータＡ１と相互に通信可能になっている。従って、ホストコンピュータＡ１からクライアントコンピュータＢ１〜Ｂｎにデータを送信するとともにクライアントコンピュータＢ１〜Ｂｎが備えるハードディスク等の外部メモリにこのデータを記憶することもでき、クライアントコンピュータＢ１〜ＢｎからホストコンピュータＡ１にデータを送信するとともにホストコンピュータＡ１が備えるハードディスク等の外部メモリにこのデータを記憶することもできる。
【００５２】
図２１は、プリンタドライバ遠隔監視システムの業務内容を示した業務フローチャートである。
同図において、プリンタドライバ製造会社Ａは顧客Ｂからプリンタドライバ１０４の実行環境における不具合の通知を受けると（ステップＳ８００）、不具合が発生したクライアンコンピュータＢ１〜Ｂｎを特定する相手先データをホストコンピュータＡ１に入力し（ステップＳ８０５）、この相手先データに基づいてホストコンピュータＡ１から特定したクライアントコンピュータＢ１〜Ｂｎにイベント管理プログラム５０を転送し、当該クライアントコンピュータＢ１〜Ｂｎの外部メモリに格納する（ステップＳ８１０）。次に、イベント管理プログラム５０をホストコンピュータＡ１側もしくはクライアントコンピュータＢ１〜Ｂｎにて起動させイベント管理プログラム５０の処理を実行させる（ステップＳ８１５）。そして、このイベント管理プログラム５０の処理に基づいてクライアントコンピュータＢ１〜ＢｎからホストコンピュータＡ１に転送されてきた各種情報に基づいて不具合の解析作業を行う（ステップＳ８２０）。これにより、プリンタドライバ製造会社Ａはメンテナンス要員を顧客Ｂに派遣することなく、不具合の解析作業を行うことが可能となり、メンテナンスに費やされる時間を飛躍的に向上させることが可能となる。
【００５３】
図２２は、クライアントコンピュータＢ１〜Ｂｎに転送されたイベント管理プログラム５０にて実行される処理内容を示したフローチャートである。
同図において、外部メモリに格納されたイベント管理プログラム５０に対して起動操作が行われた否かを判別し（ステップＳ８５０）、起動操作が行われた場合はイベント管理プログラム５０の機能を起動する（ステップＳ８５５）。このとき、初期設定モジュール５０ａにてクライアントコンピュータＢ１〜Ｂｎの共有メモリ４０の起動／停止情報４１に起動情報を格納する（ステップＳ８６０）。そして、ラッパーモジュール１０４ｂから共有メモリ４０を介して各種情報４２〜４６を入力すると（ステップＳ８６５）、外部メモリにログデータとして収集し格納する（ステップＳ８７０）。
【００５４】
所定データ量のログデータが収集されると、クライアントコンピュータＢ１〜ＢｎからホストコンピュータＡ１に対してデータが転送可能な否かを判別する（ステップＳ８８０）。むろん、ホストコンピュータＡ１に転送する際のタイミングは所定データ量が収集されたタイミングに限定されるものではなく、所定周期毎に転送するようにしても良い。転送可能の場合は、各種情報４２〜４６のログデータをインターネットを介してホストコンピュータＡ１に転送し同ホストコンピュータＡ１の外部メモリに格納させる（ステップＳ８８５）。ホストコンピュータＡ１への転送が完了した場合、クライアントコンピュータＢ１〜Ｂｎの外部メモリに格納されたログデータを削除する（ステップＳ８９０）。
【００５５】
一方、転送不可能の場合は、未転送データとして外部メモリに保存しておく（ステップＳ８９５）。この保存した未転送データは適宜所定周期毎に転送の可否を判断して転送可能であれば順次ホストコンピュータＡ１に転送するようにすれば良い。以上の操作をイベント管理プログラム５０が停止操作されるまで実行する（ステップＳ８９６）。なお、イベント管理プログラム５０の初期設定モジュール５０ａは停止操作が行われた際に共有メモリ４０の起動／停止情報４１に停止情報を格納し、この起動／停止情報４１を介してイベント管理プログラム５０の停止状態を認識可能にする（ステップＳ８９７）。
【００５６】
ホストコンピュータＡ１からクライアントコンピュータＢ１〜Ｂｎに転送され、同クライアントコンピュータＢ１〜Ｂｎの外部メモリに格納されたイベント管理プログラム５０は、作業終了後に顧客Ｂの作業員に削除させるようにしても良いし、予めプリンタドライバ１０４のラッパーモジュール１０４ｂに所定条件を検出した際にイベント管理プログラム５０を削除する機能を持たせるようにしても良い。
【００５７】
図２３は、転送されたイベント管理プログラム５０を削除する際におけるクライアントコンピュータＢ１〜Ｂ３のプリンタドライバ１０４が備えるラッパーモジュール１０４ｂの処理内容を示したフローチャートである。
同図において、実行モジュール１０４ａによる呼び出しがあった場合、共有メモリ４０の起動／停止情報４１にアクセスすることによってイベント管理プログラム５０の起動状態を取得する（ステップＳ９０５）。そして、イベント管理プログラム５０が停止状態が停止状態であるか否かを判別し（ステップＳ９１０）、停止状態であると判別した場合は、イベント管理プログラム５０が格納されているハードディスク等の外部メモリにアクセスし（ステップＳ９１５）、イベント管理プログラム５０が格納されているか否かを判別する（ステップＳ９２０）。ここで、イベント管理プログラム５０が格納されていると判別した場合はイベント管理プログラム５０のファイルを削除する（ステップＳ９２５）。
【００５８】
図２４は、ホストコンピュータＡ１の動作内容を示したフローチャートである。同図において、クライアントコンピュータＢ１〜Ｂｎから各種情報４２〜４６が転送されて同各種情報４２〜４６を入力すると（ステップＳ９５０）、当該ホストコンピュータＡ１の外部メモリに格納する（ステップＳ９５５）。そして、各種情報４２〜４６の表示を要求する操作があった場合（ステップＳ９６０）、操作に応じて適宜各種情報４２〜４６の内容を視認可能にホストコンピュータＡ１のＣＲＴディスプレイに表示する（ステップＳ９６５）。これによって、プリンタドライバ製造会社Ａでは顧客Ｂに赴くことなく、顧客ＢのクライアントコンピュータＢ１〜Ｂｎに組み込まれたプリンタドライバ１０４の実行状態を把握し解析することが可能になる。
【００５９】
（５）本発明との対応：
ここで、本発明と上述してきた実施形態との対応関係について説明する。本発明にかかるホストコンピュータはホストコンピュータＡ１に対応し、クライアントコンピュータはクライアントＢ１〜Ｂｎに対応する。また、監視プログラム転送手段はホストコンピュータＡ１上にて実行される処理機能に対応し、監視情報格納手段はホストコンピュータＡ１の外部メモリに対応する。本発明にかかるドライバモジュールはクライアントコンピュータＢ１〜Ｂｎにて動作するプリンタドライバ１０４に対応する。また、本発明にかかる監視プログラムはイベント管理プログラム５０に対応する。
【００６０】
（６）まとめ：
このように、クライアントコンピュータＢ１〜Ｂｎにおいてプリンタドライバ１０４の実行状態を監視するに際して、ホストコンピュータＡ１からインターネットを介してイベント管理プログラム５０を監視が必要なクライアントコンピュータＢ１〜Ｂｎに転送する。そして、このイベント管理プログラム５０をホストコンピュータＡ１から起動することによって、プリンタドライバ１０４はデバッグモードに移行し、各種情報を収集しつつ、ホストコンピュータＡ１にインターネットを介して転送する。そして、ホストコンピュータＡ１ではこの転送された各種情報を格納しつつ表示することによって、クライアントコンピュータＢ１〜Ｂｎを停止させることなく当該ホストコンピュータＡ１にてプリンタドライバ１０４の実行状態を遠隔監視することが可能になる。
【図面の簡単な説明】
【図１】プリンタ制御システムの構成を説明するブロック図。
【図２】ホストコンピュータの内部構成図。
【図３】監視システムの概略構成図。
【図４】プリンタドライバの概略構成図。
【図５】イベント管理プログラムの概略構成図。
【図６】プリンタドライバの概略フローチャート。
【図７】実行モジュールの動作内容を示したフローチャート。
【図８】ラッパーモジュールの動作内容を示したフローチャート。
【図９】イベント管理プログラムの動作内容を示したフローチャート。
【図１０】ラッパーモジュールの動作内容を示したフローチャート。
【図１１】実行モジュールの動作内容を示したフローチャート。
【図１２】ラッパーモジュールの動作内容を示したフローチャート。
【図１３】ラッパーモジュールの動作内容を示したフローチャート。
【図１４】実行モジュールの動作内容を示したフローチャート。
【図１５】ラッパーモジュールの動作内容を示したフローチャート。
【図１６】イベント管理プログラムの動作内容を示したフローチャート。
【図１７】表示モジュールの動作内容を示したフローチャート。
【図１８】表示画面の画面構成を示した画面構成図。
【図１９】表示画面の画面構成を示した画面構成図。
【図２０】デバイスドライバ遠隔監視システムの概略構成を示したシステム構成図。
【図２１】デバイスドライバ遠隔監視システムの業務内容を示した業務フローチャート。
【図２２】イベント管理プログラムにて実行される処理内容を示したフローチャート。
【図２３】ラッパーモジュールの処理内容を示したフローチャート。
【図２４】ホストコンピュータＡの動作内容を示したフローチャート。
【符号の説明】
１０…ホストコンピュータ
１１…ＣＰＵ
１２…ＲＡＭ
１３…ＲＯＭ
１４…ＫＢＣ
１５…ＣＲＴＣ
１６…ＤＫＣ
１７…ＰＲＴＣ
１８…システムバス
２０…プリンタ
２１…ＣＰＵ
２２…ＲＡＭ
２３…ＲＯＭ
２４…入力部
２５…印刷部Ｉ／Ｆ
２６…ＭＣ
３０…双方向性インターフェース
４０…共有メモリ
５０…イベント管理プログラム
５０ａ…初期設定モジュール
５０ｂ…データ収集モジュール
５０ｃ…表示モジュール
１００…アプリケーション
１０１…ＡＰＩ
１０２…グラフィックエンジン
１０３…ＤＤＩ関数
１０４…プリンタドライバ
１０４ａ…実行モジュール
１０４ｂ…ラッパーモジュール
１０５…システムスプーラ
【図１】
2004295248.tif 000003
【図２】
2004295248.tif 000004
【図３】
2004295248.tif 000005
【図４】
2004295248.tif 000006
【図５】
2004295248.tif 000007
【図６】
2004295248.tif 000008
【図７】
2004295248.tif 000009
【図８】
2004295248.tif 000010
【図９】
2004295248.tif 000011
【図１０】
2004295248.tif 000012
【図１１】
2004295248.tif 000013
【図１２】
2004295248.tif 000014
【図１３】
2004295248.tif 000015
【図１４】
2004295248.tif 000016
【図１５】
2004295248.tif 000017
【図１６】
2004295248.tif 000018
【図１７】
2004295248.tif 000019
【図１８】
2004295248.tif 000020
【図１９】
2004295248.tif 000021
【図２０】
2004295248.tif 000022
【図２１】
2004295248.tif 000023
【図２２】
2004295248.tif 000024
【図２３】
2004295248.tif 000025
【図２４】
2004295248.tif 000026