(57)【要約】【課題】プログラム動作の監視において、監視対象とするプロセスのプログラム動作だけでなく、当該プロセスの利用要求によって生成・起動された分散オブジェクトサーバのプログラム動作についても漏れなく監視する。【解決手段】全体制御部２０は、監視対象ユーザプロセス３２や監視対象分散オブジェクトサーバ２１の識別情報をレジストリリダイレクタ１１の監視対象プロセスリストに登録する。全体制御部２０は、問い合わせ先から任意のプロセスが監視対象であるか否かの問い合わせがあった場合に、当該プロセスの識別情報を監視対象プロセスリストに照会して、当該プロセスが監視対象であるか否かの情報を問い合わせ先に返信する。全体制御部２０は、分散オブジェクト生成管理部１３が監視対象ユーザプロセス３２から分散オブジェクトサーバの利用要求を受けた場合に、当該分散オブジェクト生成管理部１３から所定の通知を受信する。【選択図】図１
2018073166.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの実行主体であるプロセスであって監視対象となる監視対象プロセスの識別情報を監視対象プロセスリストに登録し、問い合わせ先から任意のプロセスが監視対象であるか否かの問い合わせがあった場合に、前記任意のプロセスの識別情報を前記監視対象プロセスリストに照会して、前記任意のプロセスが監視対象であるか否かの情報を前記問い合わせ先に返信する監視対象プロセス管理部と、
分散オブジェクトサーバを生成して当該分散オブジェクトサーバの識別情報を保有する分散オブジェクト生成管理装置が監視対象プロセスから分散オブジェクトサーバの利用要求を受けた場合に、前記分散オブジェクト生成管理装置から所定の通知を受信する通知受信部と、
を備えたプログラム動作監視制御装置。
【請求項２】
前記通知受信部は、前記所定の通知として、前記分散オブジェクト生成管理装置の代わりに前記利用要求のあった分散オブジェクトサーバを生成するように依頼する旨の依頼通知を受信する
請求項１に記載のプログラム動作監視制御装置。
【請求項３】
前記通知受信部により受信された前記依頼通知に基づいて、自身の子プロセスとして、前記利用要求のあった分散オブジェクトサーバを生成する分散オブジェクトサーバ生成部と、
前記分散オブジェクトサーバ生成部により生成された分散オブジェクトサーバを職別する識別情報を、前記分散オブジェクト生成管理装置へ通知する通知部と、をさらに備え、
前記監視対象プロセス管理部は、前記分散オブジェクトサーバ生成部により生成された前記分散オブジェクトサーバの識別情報を前記監視対象プロセスリストに登録する
請求項２に記載のプログラム動作監視制御装置。
【請求項４】
新たなプロセスが起動される毎に、当該新たなプロセスの識別情報と、当該新たなプロセスの親プロセスの識別情報と、をそれぞれ取得する識別情報取得部と、
新たなプロセスが起動される毎に前記識別情報取得部により取得された各識別情報を参照して、前記新たなプロセスの親プロセスの識別情報が前記監視対象プロセスリストに登録されている場合に、前記新たなプロセスの識別情報を前記監視対象プロセスリストに登録する識別情報登録部と、をさらに備えた
請求項３に記載のプログラム動作監視制御装置。
【請求項５】
前記通知受信部は、前記所定の通知として、前記分散オブジェクト生成管理装置により生成された分散オブジェクトサーバの識別情報を受信する
請求項１に記載のプログラム動作監視制御装置。
【請求項６】
前記監視対象プロセス管理部は、前記通知受信部により受信された識別情報を前記監視対象プロセスリストに登録する
請求項５に記載のプログラム動作監視制御装置。
【請求項７】
プログラムの実行主体であるプロセスから分散オブジェクトサーバの利用要求を受信する利用要求受信部と、
前記利用要求受信部により受信された前記利用要求の要求元プロセスの識別情報が監視対象プロセスリストに登録されていない場合に、前記利用要求のあった分散オブジェクトサーバを生成する分散オブジェクトサーバ生成部と、
前記利用要求受信部により受信された前記利用要求の要求元プロセスの識別情報が前記監視対象プロセスリストに登録されている場合に、プログラム動作監視制御装置に所定の通知を送信する通知送信部と、
を備えた分散オブジェクト生成管理装置。
【請求項８】
前記通知送信部は、前記所定の通知として、前記分散オブジェクトサーバ生成部の代わりに前記プログラム動作監視制御装置が前記利用要求のあった分散オブジェクトサーバを生成するように依頼する旨の依頼通知を送信する
請求項７に記載の分散オブジェクト生成管理装置。
【請求項９】
前記分散オブジェクトサーバ生成部は、前記利用要求受信部により前記利用要求が受信された場合、前記利用要求のあったすべての分散オブジェクトサーバを生成し、
前記通知送信部は、前記所定の通知として、前記利用要求の要求元プロセスの識別情報が前記監視対象プロセスリストに登録されている場合に、前記利用要求により生成された分散オブジェクトサーバの識別情報を送信する
請求項７に記載の分散オブジェクト生成管理装置。
【請求項１０】
コンピュータを請求項１から請求項６のいずれか１項に記載のプログラム動作監視制御装置の各部として機能させるためのプログラム。
【請求項１１】
コンピュータを請求項７から請求項９のいずれか１項に記載の分散オブジェクト生成管理装置の各部として機能させるためのプログラム。
【請求項１２】
請求項１に記載のプログラム動作監視制御装置と、
請求項７に記載の分散オブジェクト生成管理装置と、
を備えたプログラム動作監視システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム動作監視制御装置、分散オブジェクト生成管理装置、プログラム、及びプログラム動作監視システムに関する。
【背景技術】
【０００２】
従来、ソフトウェア開発の効率を向上させるために、ブログラムの実行主体であるプロセスを機能に応じて分割・部品化することが行われている。プロセスの分割・部品化の手法として、プロセスが別プロセスを生成・起動してまとまった処理を実施させる手法がある。
【０００３】
プロセスが別プロセスに処理を実施させる第１の手法として、プロセスが当該別のプロセスとして子プロセスを生成し、当該子プロセスに処理を依頼する技術がある。
【０００４】
この場合、親子間プロセスの通信については、ＴＣＰ／ＩＰなどのネットワーク通信技術、ＯＳが提供する名前付きパイプ（ｎａｍｅｄ  ｐｉｐｅ）などといった一般的なプロセス間通信に加え、親子プロセス間でのメモリ資源の共有によって両者間で閉じたデータのやり取りが実行される場合もある。
【０００５】
一方、分割・部品化されたプロセスの処理内容の汎用性が高い場合、プロセスが別プロセスに処理を実施させる第２の手法として、分散オブジェクト技術がある。分散オブジェクト技術では、当該別のプロセスとして、共通の呼び出し規約に従って汎用的な処理を実施するプロセスである分散オブジェクトサーバが生成・起動される。
【０００６】
例えば、第１のプロセスが、汎用性のあるまとまった処理を別プロセスで実施したい場合、ＯＳが提供する分散オブジェクト生成管理部に対して、当該まとまった処理を実行できる分散オブジェクトサーバの利用要求を通知する。
【０００７】
分散オブジェクト生成管理部は、指定された分散オブジェクトサーバが指定された時点で稼働していなかった場合には、当該分散オブジェクトサーバを生成・起動し、当該分散オブジェクトサーバへのアクセス方法を含む応答を利用要求元の第１のプロセスに戻す。
【０００８】
一方、第２のプロセスも、上記の汎用性のあるまとまった処理を別プロセスで実施したい場合、分散オブジェクト生成管理部に対して、当該分散オブジェクトサーバの利用要求を通知する。
【０００９】
分散オブジェクト生成管理部は、今回は指定された分散オブジェクトサーバが既に稼働しているので、単に当該分散オブジェクトサーバへのアクセス方法を含む応答を利用要求元の第２のプロセスに戻す。
【００１０】
上述した第１の手法では、親プロセス及び子プロセスの処理が、１つのコンピュータ内の閉じられた空間で実行される。これに対して第２の手法では、利用要求元の第２のプロセスの処理と分散オブジェクトサーバの処理とが、異なるコンピュータで実行される場合も含まれる。
【００１１】
そのため、第２の手法では、利用要求元プロセスと分散オブジェクト生成管理部との間の通信方法、及び利用要求元プロセスと分散オブジェクトサーバとの間の通信方法は、原則として、先述したネットワーク通信技術に基づくプロセス間通信方法に限定される。
【００１２】
このように分散オブジェクト技術においては、ソフトウェアシステムを、汎用性のあるまとまった処理を提供する独立したプログラムに分割し、当該独立したプログラムを分散オブジェクトサーバとして生成・起動する。これにより、プログラムの再利用性を大幅に高めることが可能となり、また一部を修正してもソフトウェアシステム全体を再構築しないで済むといった開発効率の大幅な向上が期待できる。
【００１３】
さらに、複数の分散オブジェクトサーバを役割分担の上、複数のコンピュータで並行して生成・起動させることによって、コンピュータ資源の効率的な活用が可能となる。
【００１４】
なお、分散オブジェクトサーバは、プロセスからの利用要求があった際に稼働していなかった場合には、分散オブジェクト生成管理部によって当該分散オブジェクトサーバが生成・起動される。このように、分散オブジェクトサーバは、利用要求元プロセスからの利用要求をトリガーとして、生成・起動されるものである。しかし、利用要求元プロセスと分散オブジェクトサーバとの関係は、後者が既に稼働していた場合には前者は原則として稼働中の後者を再利用することから、前出の親プロセスと子プロセスのような直接的な親子関係には相当しない。
【００１５】
一方、信頼できないプログラムをシステム内の所定の保護領域で実行することによって、当該プログラムがシステムを不正に操作するのを防ぐ、サンドボックス（ｓａｎｄｂｏｘ）と呼ばれるセキュリティ機構がある。
【００１６】
サンドボックス内で実行されるプログラムは、その実行主体であるプロセスが他のプロセスやデータなどを操作できないように監視された状態で生成・起動される。このため、当該プロセスが暴走したりウイルスを動作させたりしても、当該サンドボックスの外部には影響が及ばない。以下、サンドボックス内で生成・起動されるプロセスのことを「監視対象プロセス」という。
【００１７】
特許文献１には、ファイルシステムやレジストリなどが仮想化されたサンドボックスとしての仮想空間で実行されるプログラムの実行主体である監視対象プロセス及びその子プロセスに関する技術が開示されている。特許文献１では、監視対象プロセスによって生成・起動される（監視対象となる）子プロセスが親プロセスと同じ仮想空間を利用するか、又は当該子プロセス用に新たな仮想空間を生成するかが決定される。つまり、特許文献１の技術は、親プロセスが監視対象の場合は、子プロセスも監視対象とすることができる。
【００１８】
換言すれば、監視対象プロセスがサンドボックス内で子プロセスを直接生成・起動する場合、プロセスの親子関係が明確である。このため、子プロセスを容易に監視対象とすることができる。
【先行技術文献】
【特許文献】
【００１９】
【特許文献１】特開２０１０−２０５１８６号公報
【発明の概要】
【発明が解決しようとする課題】
【００２０】
しかし、監視対象プロセスからの利用要求に基づいて生成・起動されるプロセスが分散オブジェクトサーバである場合、利用要求元の監視対象プロセスと分散オブジェクトサーバとの間には単純な親子関係が成立しない。その最大の理由は、分散オブジェクトサーバを直接生成・起動するものが、ＯＳ機能の一部として提供され、サンドボックスの外部にある分散オブジェクト生成管理部であるためである。
【００２１】
したがって、特許文献１の技術は、監視対象プロセスからの利用要求に基づいて生成・起動されるプロセスが分散オブジェクトサーバである場合は、分散オブジェクトサーバを監視対象にすることができず、プログラム動作の監視漏れが発生する問題があった。
【００２２】
本発明は、このような実情を鑑みて提案されたものであり、監視対象プロセスのプログラム動作だけでなく、監視対象プロセスの利用要求に基づいて生成・起動される分散オブジェクトサーバのプログラム動作についても漏れなく監視することができるプログラム動作監視制御装置、分散オブジェクト生成管理装置、プログラム、及びプログラム動作監視システムを提供することを目的とする。
【課題を解決するための手段】
【００２３】
本発明に係るプログラム動作監視制御装置は、プログラムの実行主体であるプロセスであって監視対象となる監視対象プロセスの識別情報を監視対象プロセスリストに登録し、問い合わせ先から任意のプロセスが監視対象であるか否かの問い合わせがあった場合に、前記任意のプロセスの識別情報を前記監視対象プロセスリストに照会して、前記任意のプロセスが監視対象であるか否かの情報を前記問い合わせ先に返信する監視対象プロセス管理部と、分散オブジェクトサーバを生成して当該分散オブジェクトサーバの識別情報を保有する分散オブジェクト生成管理装置が監視対象プロセスから分散オブジェクトサーバの利用要求を受けた場合に、前記分散オブジェクト生成管理装置から所定の通知を受信する通知受信部と、を備えている。
【００２４】
本発明に係る分散オブジェクト生成管理装置は、プログラムの実行主体であるプロセスから分散オブジェクトサーバの利用要求を受信する利用要求受信部と、前記利用要求受信部により受信された前記利用要求の要求元プロセスの識別情報が監視対象プロセスリストに登録されていない場合に、前記利用要求のあった分散オブジェクトサーバを生成する分散オブジェクトサーバ生成部と、前記利用要求受信部により受信された前記利用要求の要求元プロセスの識別情報が前記監視対象プロセスリストに登録されている場合に、プログラム動作監視制御装置に所定の通知を送信する通知送信部と、を備えている。
【００２５】
本発明に係るプログラム動作監視システムは、上記のプログラム動作監視制御装置と、上記の分散オブジェクト生成管理装置と、を備えている。
【発明の効果】
【００２６】
本発明は、監視対象プロセスのプログラム動作だけでなく、監視対象プロセスの利用要求に基づいて生成・起動される分散オブジェクトサーバのプログラム動作についても漏れなく監視することができる。
【図面の簡単な説明】
【００２７】
【図１】本発明の第１の実施形態に係るプログラム動作監視システムの構成を示すブロック図である。
【図２】プログラム動作監視システムの起動から終了までの動作手順を示すフローチャートである。
【図３】プログラム動作監視システムの起動から終了までの動作手順を示すフローチャートである。
【図４】印刷動作監視ルーチンを示すフローチャートである。
【図５】クリップボード動作監視ルーチンを示すフローチャートである。
【図６】レジストリ保護ルーチン（ｐｉｄ管理）を示すフローチャートである。
【図７】レジストリ保護ルーチン（レジストリ保護）を示すフローチャートである。
【図８】ファイル保護ルーチン（ファイルオープン動作の対応）を示すフローチャートである。
【図９】ファイル保護ルーチン（ファイル名一覧表示への対応）を示すフローチャートである。
【図１０】プロセス動作監視ルーチンを示すフローチャートである。
【図１１】プログラム動作監視システムの要部ブロック図である。
【図１２】分散オブジェクトサーバ生成管理ルーチンを示すフローチャートである。
【図１３】分散オブジェクトサーバ生成管理ルーチンを示すフローチャートである。
【図１４】第２の分散オブジェクトサーバ生成管理ルーチンを示すフローチャートである。
【図１５】第３の分散オブジェクトサーバ生成管理ルーチンを示すフローチャートである。
【発明を実施するための形態】
【００２８】
本発明の実施形態について、図面を参照しながら詳細に説明する。
［第１の実施形態］
図１は、本発明の第１の実施形態に係るプログラム動作監視システム１の構成を示すブロック図である。
【００２９】
プログラム動作監視システム１は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムの稼動に必要なプロセスが動作するメモリ空間であるシステム領域、すべてのユーザが共有して利用可能なプロセスが動作するメモリ空間である共通ユーザ領域、及び、個々のユーザが利用可能なプロセスが動作するメモリ空間である個別ユーザ領域(ユーザ１領域、ユーザ２領域、…)、のそれぞれのメモリ空間に設けられた機能ブロックで構成される。
【００３０】
プログラム動作監視システム１は、個別ユーザ領域にある１つ以上のプロセスのうち、ユーザがサンドボックス内での実行を指定したプログラムの実行主体として生成・起動され監視対象となったプロセス（監視対象ユーザプロセス３２）及びその子孫プロセスの各種動作を監視する。さらに、プログラム動作監視システム１は、共通ユーザ領域にある１つ以上の分散オブジェクトサーバのうち、監視対象ユーザプロセス３２などの利用要求に基いて生成された分散オブジェクトサーバ（監視対象分散オブジェクトサーバ２１）の各種動作を監視する。以下では、監視対象ユーザプロセス３２及び監視対象分散オブジェクトサーバ２１を包括したプロセスを「監視対象プロセス」という。
【００３１】
プログラム動作監視システム１は、システム領域で動作する機能ブロックとして、レジストリリダイレクタ１１、ファイルシステムリダイレクタ１２、及び分散オブジェクト生成管理部１３を備えている。
プログラム動作監視システム１は、共通ユーザ領域で動作する機能ブロックとして、全体制御部２０を備えている。全体制御部２０は、その内部に監視対象分散オブジェクトサーバ生成部２０Ｇを有している。
【００３２】
さらに、プログラム動作監視システム１は、個別ユーザ領域で動作する機能ブロックとして、監視対象ユーザプロセス生成部３１、及び監視対象ユーザプロセス３２の内部に生成される印刷動作監視部３２Ｐ及びクリップボード動作監視部３２Ｃを備えている。
【００３３】
全体制御部２０は、監視対象プロセスの動作を監視するプログラム動作監視サービス全体の制御を司る。また、全体制御部２０は、その内部に保有する監視対象分散オブジェクトサーバ生成部２０Ｇによって、監視対象となる分散オブジェクトサーバ（監視対象分散オブジェクトサーバ２１）を生成・起動させることができる。
【００３４】
レジストリリダイレクタ１１は、システム領域にあって、監視対象プロセスによるレジストリアクセス動作の監視、制御、保護を実行する。ここでレジストリとは、例えばＯＳがマイクロソフト社のＷｉｎｄｏｗｓ（登録商標）の場合、ＯＳに関する基本情報や各種プログラムの設定、拡張情報などが登録された、ＯＳで用いられる設定情報のデータベースのことをいう。
ファイルシステムリダイレクタ１２は、システム領域にあって、監視対象プロセスによるファイルアクセス動作の監視、制御、保護を実行する。
【００３５】
監視対象ユーザプロセス生成部３１は、個別ユーザ領域にあって、監視対象ユーザプロセス３２を、当該ユーザに割り当てられた個別ユーザ領域内で生成・起動する。
印刷動作監視部３２Ｐは、個別ユーザ領域において生成・起動される任意のプロセスの内部にあって、ユーザによる当該プロセスを用いた印刷操作の監視、制御を実行する。
【００３６】
クリップボード動作監視部３２Ｃは、個別ユーザ領域において生成・起動される任意のプロセスの内部にあって、ユーザによる当該プロセスが絡んだクリップボード操作の監視、制御、保護を実行する。ここでクリップボードとは、異なるプログラム間でのデータのやり取りを実現すべく、ユーザが「コピー」や「カット」したデータを一時的に保存する機能をいう。
【００３７】
分散オブジェクト生成管理部１３は、ＯＳの標準機能ブロックの１つとして提供されるものであるが、本実施形態では、さらに、全体制御部２０に監視対象分散オブジェクトサーバ２１を監視させるための追加機能を有している。
分散オブジェクト生成管理部１３は、ＯＳの標準機能として、個別ユーザ領域のプロセスから分散オブジェクトサーバの生成依頼を受信した場合は、共通ユーザ領域に分散オブジェクトサーバを生成し、当該分散オブジェクトサーバのｐｉｄを取得する。
【００３８】
分散オブジェクト生成管理部１３は、前出の追加機能として、個別ユーザ領域の監視対象ユーザプロセス３２から分散オブジェクトサーバの生成依頼を受信した場合は、共通ユーザ領域の全体制御部２０に対して分散オブジェクトサーバ（監視対象分散オブジェクトサーバ２１）の生成を依頼する。分散オブジェクト生成管理部１３は、監視対象分散オブジェクトサーバ２１が生成された後、全体制御部２０から当該監視対象分散オブジェクトサーバ２１のｐｉｄを取得する。
【００３９】
なお、分散オブジェクト生成管理部１３は、共通ユーザ領域のすべての分散オブジェクトサーバのｐｉｄを、それが監視対象であるか否かに関わらず取得し、当該分散オブジェクトサーバの管理に用いている。更に、分散オブジェクト生成管理部１３は、自らが管理する分散オブジェクトサーバに関して、どの分散オブジェクトサーバが監視対象であるか否かの状態を併せて管理する機能を有してもよい。
【００４０】
一方、監視対象として生成・起動される監視対象プロセスは、図１の破線の矩形で示したように、監視対象ユーザプロセス３２、監視対象ユーザプロセス３２の子孫プロセス、及び共通ユーザ領域で生成・起動される監視対象分散オブジェクトサーバ２１が該当する。なお、詳しくは後述するが、すべての監視対象プロセスのｐｉｄは、レジストリリダイレクタ１１に登録される。
【００４１】
図２及び図３は、プログラム動作監視システム１の起動から終了までの動作手順を示すフローチャートである。
ステップＳ１では、システムの立ち上げに伴いＯＳが起動することによって、ＯＳの標準機能ブロックの１つである分散オブジェクト生成管理部１３が起動する。
【００４２】
ステップＳ２では、レジストリリダイレクタ１１が起動する。
その後、ＯＳは、任意のプロセスから、レジストリアクセス要求、新たな子プロセスの生成・起動要求、あるいは終了通知を受け取ると、受け取った情報を、当該任意のプロセスのｐｉｄと共にレジストリリダイレクタ１１に常に通知する。
【００４３】
ここで、ｐｉｄ（ｐｒｏｃｅｓｓ  ｉｄｅｎｔｉｆｉｅｒ）とは、１つのコンピュータ内においてプロセスを一意に職別するための識別情報である。ＯＳは、任意のプロセスから新たな子プロセスの生成・起動要求を受け取った場合は、当該任意のプロセスのｐｉｄに加えて、生成・起動された当該子プロセスのｐｉｄも併せてレジストリリダイレクタ１１に通知する。
【００４４】
これより、レジストリリダイレクタ１１は、あるプロセスのｐｉｄが監視対象として登録されると、当該プロセスが子プロセスを生成・起動した際、ＯＳから、当該プロセスのｐｉｄのみならず、当該子プロセスのｐｉｄも併せて受け取る。その結果、レジストリリダイレクタ１１は、当該プロセスを起点（ルートプロセス）として生成・起動されるすべての子孫プロセスのｐｉｄを監視対象として自動的に登録する。詳しくは、後述する図６に示すように、レジストリ保護ルーチン（ｐｉｄ管理）が実行される。
【００４５】
ステップＳ３では、ファイルシステムリダイレクタ１２が起動する。
その後、ＯＳは、任意のプロセスから、ファイルアクセス要求、新たな子プロセスの生成・起動要求、あるいは終了通知を受け取ると、受け取った情報を、当該任意のプロセスのｐｉｄと共にファイルシステムリダイレクタ１２に常に通知する。
【００４６】
これより、ファイルシステムリダイレクタ１２は、あるプロセスのｐｉｄが監視対象として登録されると、当該プロセスを起点として生成・起動されるすべての子孫プロセスのｐｉｄを監視対象として自動的に登録する。
【００４７】
さらに、ＯＳ起動の一環としてシステム領域のすべてのプロセスの起動が完了すると、ステップＳ４に進む。
【００４８】
ステップＳ４では、すべてのユーザへの共通サービスとしてプログラム動作監視サービスを提供すべく、全体制御部２０が共通ユーザ領域で起動する。
全体制御部２０は、起動の際、自らのｐｉｄを、監視対象となるすべてのプロセスのルートプロセスとして、レジストリリダイレクタ１１に登録する。これにより、全体制御部２０を起点として生成・起動されるすべての子孫プロセスのｐｉｄは、既に起動されているレジストリリダイレクタ１１によって、監視対象として自動的に登録される。
【００４９】
さらに、全体制御部２０は、個別ユーザ領域に任意のプロセスが生成された場合に、当該プロセスがその内部に印刷動作監視部３２Ｐ及びクリップボード動作監視部３２Ｃを取り込んでおくように、ＯＳに対して予め指示を出しておく。
例えば、ＯＳがマイクロソフト社のＷｉｎｄｏｗｓ（登録商標）の場合、全体制御部２０は、プロセス起動の際に当該プロセスが所定のフックプロシージャをインストールするように、ＯＳに予め指示するとよい。
【００５０】
ステップＳ５では、全体制御部２０は、プログラム動作監視サービスの実行開始を依頼するユーザのサインインを検出したか否かを判定する。当該ユーザのサインインが検出された場合はステップＳ６に進み、検出されていない場合はステップＳ１３に進む。
【００５１】
ステップＳ６では、全体制御部２０は、当該ユーザのコンピュータへのログオンをトリガーとして生成された当該ユーザ用の個別ユーザ領域において、監視対象ユーザプロセス生成部３１を自らの子プロセスとして生成・起動する。
【００５２】
ここで、全体制御部２０は、監視対象となるすべてのプロセスの起点となるルートプロセスとして、その起動時（ステップＳ４）に、自らのｐｉｄを監視対象としてレジストリリダイレクタ１１に登録している。このため、全体制御部２０の子プロセスである監視対象ユーザプロセス生成部３１及びそれを起点として生成・起動される監視対象ユーザプロセス３２並びにそのすべての子孫プロセスのｐｉｄもまた、監視対象としてレジストリリダイレクタ１１にて自動的に登録される。
【００５３】
また、監視対象ユーザプロセス生成部３１の起動と同時に、プログラム動作監視サービスのユーザインターフェイス（プログラム動作監視サービスＵＩ）がユーザに提示される。プログラム動作監視サービスＵＩには、後述する隔離フォルダのフォルダツリー構造、選択可能な隔離フォルダ内のコピーファイル（コピーファイルがないときはブランク表示）、動作監視可能なプログラムにリンクされたアイコンなどが表示される。ユーザが所望のコピーファイルあるいはプログラムにリンクされたアイコンを選択すると、選択されたアイコンに関連付けられたプログラムがサンドボックス内で実行され、その実行主体としての監視対象ユーザプロセス３２の動作を監視すべく、ステップＳ７に進む。
【００５４】
ステップＳ７では、全体制御部２０は、プロセス動作の監視を実行する。具体的には、後述する図１０に示すプロセス動作監視ルーチンが実行される。
ステップＳ８では、全体制御部２０は、プログラム動作監視サービスの実行を依頼したユーザのサインアウトを検出したか否かを判定する。上記ユーザのサインアウトが検出された場合はステップＳ９に進み、検出されていない場合はステップＳ７に戻る。したがって、サインアウトが検出されるまで、ステップＳ７の処理が実行される。
【００５５】
ステップＳ９では、全体制御部２０は、当該ユーザに提供したプログラム動作監視サービスの終了処理を実行する。具体的には、全体制御部２０は、当該ユーザ用の個別ユーザ領域において生成・起動されたすべての監視対象ユーザプロセス３２及びその子孫プロセスを停止させる。
【００５６】
ステップＳ１０では、当該ユーザのために所定の隔離フォルダに生成、保持されたすべてのコピーファイルが削除される。なお、後述するように、当該隔離フォルダ内には、オリジナルファイルのコピーファイルと各コピーファイルを格納するフォルダから構成されるフォルダツリー構造が厳密に再現されている。
【００５７】
ステップＳ１１では、当該ユーザのために所定の保護領域に生成されたすべてのレジストリ代替キーが削除される。
ステップＳ１２では、当該ユーザ用の個別ユーザ領域にて生成・起動された監視対象ユーザプロセス生成部３１が停止する。
【００５８】
なお、監視対象ユーザプロセス３２からの利用要求をトリガーとして共通ユーザ領域にて生成・起動された監視対象分散オブジェクトサーバ２１があった場合、当該監視対象分散オブジェクトサーバ２１は、当該ユーザ以外のユーザに割り当てられた個別ユーザ領域における監視対象ユーザプロセス３２などからの利用要求に対応できるように、この時点では停止しない。
【００５９】
ステップＳ１３では、全体制御部２０は、システムのシャッタダウンを検出したか否かを判定する。シャットダウンが検出された場合はステップＳ１４に進み、検出されない場合はステップＳ５に戻る。
ステップＳ１４では、全体制御部２０は、共通ユーザ領域にて生成・起動された監視対象分散オブジェクトサーバ２１があった場合、すべての監視対象分散オブジェクトサーバ２１を停止させる。
【００６０】
ステップＳ１５では、全体制御部２０が停止する。そして、ステップＳ１６ではファイルシステムリダイレクタ１２が停止し、ステップＳ１７ではレジストリリダイレクタ１１が停止する。
ステップＳ１８では、システム領域の全機能及びＯＳが停止する。
【００６１】
次に、監視対象ユーザプロセス３２の各種動作に対するプログラム動作監視システム１の具体的な動作処理について説明する。
本実施形態において監視対象とするプロセスの動作は、印刷動作、クリップボード動作、レジストリアクセス動作、及びファイルアクセス動作である。印刷動作及びクリップボード動作は、監視対象ユーザプロセス３２の生成・起動時にその内部に取り込まれた印刷動作監視部３２Ｐ及びクリップボード動作監視部３２Ｃによって、それぞれ監視される。
【００６２】
レジストリアクセス動作、及びファイルアクセス動作は、システム領域で動作するレジストリリダイレクタ１１及びファイルシステムリダイレクタ１２によって、それぞれ監視される。
【００６３】
図４は、プロセスの内部に取り込まれた印刷動作監視部３２Ｐによる印刷動作監視ルーチンを示すフローチャートである。個別ユーザ領域で任意のプロセスが起動されると、本印刷動作監視ルーチンがその内部において実行される。
【００６４】
ステップＳ２１では、プロセス（内部に取り込まれた印刷動作監視部３２Ｐ）は、その起動時において、自らが監視対象であるか、具体的には、自らのｐｉｄが監視対象のものであるかについて全体制御部２０に照会する。
【００６５】
ステップＳ２２では、印刷動作監視部３２Ｐは、自身を内部に取り込んだプロセスの印刷動作を検出したか否かを判定する。印刷動作監視部３２Ｐが当該印刷動作を検出した場合はステップＳ２３へ進み、検出していない場合はステップＳ２２に待機する。
【００６６】
ステップＳ２３では、印刷動作監視部３２Ｐは、ステップＳ２１の照会結果に基づいて、自らが監視対象であるか否かを判定する。自らが監視対象である場合はステップＳ２４へ進み、監視対象でない場合はステップＳ２２へ戻る。
【００６７】
ステップＳ２４では、印刷動作監視部３２Ｐは、印刷動作を拒否して、ステップＳ２２へ戻る。
【００６８】
このような印刷動作監視ルーチンは、例えばＯＳがマイクロソフト社のＷｉｎｄｏｗｓ（登録商標）の場合、ＯｐｅｎＰｒｉｎｔｅｒ  ＡＰＩに注入されたフックによって実現される。
【００６９】
図５は、プロセスの内部に取り込まれたクリップボード動作監視部３２Ｃによるクリップボード動作監視ルーチンを示すフローチャートである。個別ユーザ領域で任意のプロセスが起動されると、本クリップボード動作監視ルーチンがその内部において実行される。
【００７０】
ステップＳ３１では、プロセス（内部に取り込まれたクリップボード動作監視部３２Ｃ）は、その起動時において、自らが監視対象であるか、具体的には、自らのｐｉｄが監視対象のものであるかについて全体制御部２０に照会する。
【００７１】
ステップＳ３２では、クリップボード動作監視部３２Ｃは、自身を内部に取り込んだプロセスのクリップボードへのデータ登録動作を検出したか否かを判定する。データ登録動作を検出した場合はステップＳ３３へ進み、検出していない場合はステップＳ３５へ進む。
【００７２】
ステップＳ３３では、クリップボード動作監視部３２Ｃは、ステップＳ３１の照会結果に基づいて、自らが監視対象であるか否かを判定する。自らが監視対象である場合はステップＳ３４へ進み、監視対象でない場合はステップＳ３２へ戻る。
【００７３】
ステップＳ３４では、クリップボード動作監視部３２Ｃは、自らがデータ登録プロセスであることを示すべく、自らのｐｉｄを所定の共有メモリに登録する。
【００７４】
このようなクリップボード動作監視ルーチンにおける自らのデータ登録動作を検出した場合の処理は、例えばＯＳがマイクロソフト社のＷｉｎｄｏｗｓ（登録商標）の場合、ＳｅｔＣｌｉｐｂｏａｒｄＤａｔａ  ＡＰＩに注入されたフックによって実現される。
【００７５】
一方、ステップＳ３５では、クリップボード動作監視部３２Ｃは、自身を内部に取り込んだプロセスのクリップボードからのデータ取得動作を検出したか否かを判定する。データ取得動作を検出した場合はステップＳ３６へ進み、検出していない場合はステップＳ３２に戻る。
【００７６】
ステップＳ３６では、クリップボード動作監視部３２Ｃは、ステップＳ３１の照会結果に基づいて、自らが監視対象であるか否かを判定する。自らが監視対象である場合はステップＳ３８へ進み、監視対象でない場合はステップＳ３７へ進む。
【００７７】
ステップＳ３７では、クリップボード動作監視部３２Ｃは、上述の共有メモリにおけるデータ登録プロセスのｐｉｄ登録があるか否かを判定する。ｐｉｄ登録がある場合はステップＳ３９へ進み、ｐｉｄ登録がない場合はステップＳ３８へ進む。
【００７８】
ステップＳ３８では、クリップボード動作監視部３２Ｃは、取得したデータの自らへの貼り付け動作を許可する。そして、ステップＳ３２へ戻る。
ステップＳ３７でｐｉｄ登録がないと判定された場合、データを登録したデータ登録プロセスは監視対象になっていない。つまり、ステップＳ３５のデータ取得動作は、監視対象でない通常のプロセス間でのクリップボードを介したデータのやり取りに該当する。よって、ステップＳ３８において、取得データの自らへの貼り付け動作が許可される。
【００７９】
ステップＳ３９では、クリップボード動作監視部３２Ｃは、取得したデータの自らへの貼り付け動作を拒否する。そして、ステップＳ３２へ戻る。
ステップＳ３７でｐｉｄ登録があると判定された場合、データを登録したデータ登録プロセスは監視対象になっている。つまり、ステップＳ３５のデータ取得動作は、監視対象とするプロセスから監視対象でないプロセスへのデータの移動に該当する。換言すれば、上述のデータ取得動作は、サンドボックス内で実行されるプログラムが取り扱う機密データをサンドボックスの外部で実行されるプログラムへと持ち出す行為となる。よって、ステップＳ３９において、取得データの自らへの貼り付け動作が拒否される。
【００８０】
このようなクリップボード動作監視ルーチンにおける自らのデータ取得動作を検出した場合の処理は、例えばＯＳがマイクロソフト社のＷｉｎｄｏｗｓ（登録商標）の場合、ＧｅｔＣｌｉｐｂｏａｒｄＤａｔａ  ＡＰＩに注入されたフックによって実現される。
【００８１】
ところで、先述したように、レジストリリダイレクタ１１は、新たなプロセスが生成・起動される度に、ＯＳからその旨の通知を、当該プロセス及びその親プロセスのｐｉｄと共に常に取得し、取得した情報を活用する。
【００８２】
具体的には、本実施形態において、レジストリリダイレクタ１１には、レジストリ保護という本来の役割だけでなく、図２のステップＳ２で説明したＯＳからの通知を活用して、監視対象とするすべてのプロセスのｐｉｄを管理するという役割もある。
【００８３】
つまり、すべての監視対象プロセスのｐｉｄは、レジストリリダイレクタ１１によって管理される。具体的には、レジストリリダイレクタ１１は、図２のステップＳ４で説明したように、全体制御部２０からｐｉｄの登録通知を受けると、登録通知のあったｐｉｄをその内部に保有する監視対象プロセスリストに登録する。また、レジストリリダイレクタ１１は、全体制御部２０などからｐｉｄの登録照会通知を受けると、登録照会通知のあったｐｉｄを当該監視対象プロセスリストに照会することで、全体制御部２０などからの問い合わせに応答する。
【００８４】
レジストリリダイレクタ１１は、プロセスの新規生成やレジストリアクセスに関する通知などをＯＳから取得したり、ｐｉｄの登録通知や登録照会通知を全体制御部２０などから取得したりすると、以下に示すレジストリ保護ルーチンを実行する。
【００８５】
図６及び図７は、レジストリリダイレクタ１１によるレジストリ保護ルーチンを示すフローチャートである。
ステップＳ４１では、レジストリリダイレクタ１１は、全体制御部２０からｐｉｄ登録通知を取得したか否かを判定する。ｐｉｄ登録通知を取得した場合はステップＳ４２へ進み、取得していない場合はステップＳ４３へ進む。
【００８６】
ステップＳ４２では、レジストリリダイレクタ１１は、全体制御部２０から取得したｐｉｄを監視対象プロセスリストに登録する。そして、ステップＳ４１に戻る。
ステップＳ４３では、レジストリリダイレクタ１１は、全体制御部２０などからｐｉｄ照会通知を取得したか否かを判定する。ｐｉｄ照会通知を取得した場合はステップＳ４４に進み、ｐｉｄ照会通知を取得していない場合はステップＳ４５へ進む。
【００８７】
ステップＳ４４では、レジストリリダイレクタ１１は、取得したｐｉｄが監視対象プロセスリストに登録されているか照会して、その照会結果を全体制御部２０などに対して応答する。そして、ステップＳ４１に戻る。
【００８８】
ステップＳ４５では、レジストリリダイレクタ１１は、ＯＳからプロセスの新規生成・起動通知を取得したか否かを判定する。プロセスの新規生成・起動通知を取得した場合はステップＳ４６へ進み、プロセスの新規生成・起動通知を取得していない場合はステップＳ４８へ進む。なお、プロセスの新規生成・起動通知には、新規生成・起動されたプロセスのｐｉｄだけでなく、当該プロセスの親プロセスのｐｉｄも含まれる。
【００８９】
ステップＳ４６では、レジストリリダイレクタ１１は、ＯＳからプロセスの新規生成・起動通知を取得した際に取得した、当該プロセスの親プロセスのｐｉｄが監視対象プロセスリストに登録されているか否か、つまり、親プロセスが監視対象であるか否かを判定する。親プロセスが監視対象の場合はステップＳ４７へ進み、監視対象でない場合はステップＳ４１に戻る。
【００９０】
ステップＳ４７では、レジストリリダイレクタ１１は、新規生成・起動されたプロセスのｐｉｄを監視対象プロセスリストに登録する。そして、ステップＳ４１へ戻る。このようにして、新規生成・起動されたプロセスの親プロセスが監視対象であった場合には、当該プロセスも監視対象にする必要があるので、当該プロセスのｐｉｄが監視対象プロセスリストに登録される。
【００９１】
この結果、全体制御部２０がその起動時（図２のステップＳ４）に自らのｐｉｄをレジストリリダイレクタ１１に登録することによって、全体制御部２０を起点として生成されるすべてのプロセス（子孫プロセス）が監視対象プロセスリストに登録される。
【００９２】
監視対象プロセスリストに登録されるすべてのプロセスは、具体的には、次の（１）〜（４）が該当する。
（１）全体制御部２０
（２）全体制御部２０の子プロセスとして生成・起動される監視対象ユーザプロセス生成部３１
（３）ユーザが所望のプログラムのサンドボックス内での実行を指定した際に監視対象ユーザプロセス生成部３１の子プロセスとして生成・起動される監視対象ユーザプロセス３２並びにその子孫プロセス
（４）全体制御部２０内の監視対象分散オブジェクトサーバ生成部２０Ｇによってその子プロセスとして生成・起動される監視対象分散オブジェクトサーバ２１並びにその子孫プロセス
【００９３】
ステップＳ４８では、レジストリリダイレクタ１１は、ＯＳからプロセス終了通知を取得したか否かを判定する。プロセス終了通知を取得した場合はステップＳ４９へ進み、取得していない場合はステップＳ５０へ進む。
【００９４】
ステップＳ４９では、レジストリリダイレクタ１１は、プロセス終了通知と共に当該プロセスのｐｉｄを取得し、取得したｐｉｄを用いて、終了したプロセスのｐｉｄを監視対象プロセスリストから削除する。そして、ステップＳ４１に戻る。
【００９５】
ステップＳ５０以降では、レジストリ保護のための処理が実行される。
ステップＳ５０では、レジストリリダイレクタ１１は、ＯＳからレジストリアクセス通知を取得したか否かを判定する。レジストリアクセス通知とは、任意のプロセスがレジストリにアクセスをしようとする度にＯＳから常に送られる通知をいう。なお、レジストリアクセス通知は、レジストリにアクセスしようとしたプロセスのｐｉｄ及びアクセス内容を含んでいる。レジストリアクセス通知を取得した場合にはステップＳ５１へ進み、取得していない場合はステップＳ４１へ戻る。
【００９６】
ステップＳ５１では、レジストリリダイレクタ１１は、レジストリアクセス通知と共に取得したプロセスのｐｉｄを用いて、自らが保有する監視対象プロセスリストに照会して、レジストリにアクセスしようとするプロセスが監視対象であるか否かを判定する。プロセスが監視対象である場合はステップＳ５２に進み、プロセスが監視対象でない場合はステップＳ４１に戻る。
【００９７】
これより、レジストリリダイレクタ１１は、監視対象プロセス３２がレジストリにアクセスしようとする毎に、レジストリを保護するために、次のステップＳ５２以降の処理を実行する。
【００９８】
ステップＳ５２では、レジストリリダイレクタ１１は、ＯＳからの通知に基づいて、レジストリキーのオープン動作を検出したか否かを判定する。レジストリキーのオープン動作を検出した場合はステップＳ５３へ進み、レジストリキーのオープン動作を検出していない場合はステップＳ５４へ進む。
【００９９】
ステップＳ５３では、レジストリリダイレクタ１１は、指定されたオリジナルキーの代替となるレジストリ代替キーを所定の保護領域に生成し、そのレジストリ代替キーをオープンする。そして、ステップＳ４１に戻る。
【０１００】
ステップＳ５４では、レジストリリダイレクタ１１は、ＯＳからの通知に基づいて、レジストリキーの値の読み出し動作を検出したか否かを判定する。レジストリキーの値の読み出し動作を検出した場合はステップＳ５５へ進み、レジストリキーの値の読み出し動作を検出していない場合はＳ５６へ進む。
【０１０１】
ステップＳ５５では、レジストリリダイレクタ１１は、指定されたオリジナルキーの値を（前出のレジストリキーのオープン動作対応にて生成済みの）レジストリ代替キーにコピーし、その値を返す。そして、ステップＳ４１に戻る。
【０１０２】
ステップＳ５６では、レジストリリダイレクタ１１は、ＯＳからの通知に基づいて、レジストリキーの値の書き込み動作を検出したか否かを判定する。レジストリキーの値の書き込み動作を検出した場合にはステップＳ５７へ進み、レジストリキーの値の書き込み動作を検出していない場合はステップＳ５８へ進む。
【０１０３】
ステップＳ５７では、レジストリリダイレクタ１１は、指定された値を（前出のレジストリキーのオープン動作対応にて生成済みの）レジストリ代替キーに書き込む。そして、ステップＳ４１へ戻る。
【０１０４】
ステップＳ５８では、レジストリリダイレクタ１１は、ＯＳからの通知に基づいて、レジストリキーのクローズ動作を検出したか否かを判定する。レジストリキーのクローズ動作を検出した場合はステップＳ５９へ進み、レジストリキーのクローズ動作を検出していない場合はステップＳ４１へ戻る。
【０１０５】
ステップＳ５９では、レジストリリダイレクタ１１は、（前出のレジストリキーのオープン動作対応にて生成済みの）レジストリ代替キーをクローズする。そして、ステップＳ４１に戻る。
【０１０６】
なお、所定の保護領域に生成されたレジストリ代替キーは、ユーザのサインアウト検出後に、すべて削除される（図３のステップＳ１１）。
【０１０７】
図８及び図９は、ファイルシステムリダイレクタ１２によるファイル保護ルーチンを示すフローチャートである。
ファイルシステムリダイレクタ１２は、任意のプロセスがファイルオープンしようとする度に又は任意のフォルダに含まれるファイル名の一覧表示を要求される度に、ＯＳから、それらの動作を示す通知（当該プロセスのｐｉｄを含む。）を取得して、以下に示すファイル保護ルーチンを実行する。
【０１０８】
なお、ファイルシステムリダイレクタ１２は、詳細な内容は省略するが、レジストリリダイレクタ１１と同様に、監視対象プロセスのｐｉｄを管理することも可能である。
【０１０９】
ステップＳ６１では、ファイルシステムリダイレクタ１２は、ＯＳからの通知を取得して、ファイルオープン動作を検出したか否かを判定する。ファイルオープン動作を検出した場合はステップＳ６２へ進み、ファイルオープン動作を検出していない場合はステップＳ６９へ進む。
【０１１０】
ステップＳ６２では、ファイルシステムリダイレクタ１２は、ファイルをオープンしようとするプロセスが監視対象であるか否かを判定する。ここでは、ファイルシステムリダイレクタ１２は、ＯＳからの通知に含まれるｐｉｄを用いて、全体制御部２０ではなく、レジストリリダイレクタ１１に対して直接照会する。
【０１１１】
ファイルシステムリダイレクタ１２がレジストリリダイレクタ１１に直接照会する理由は、次の通りである。レジストリリダイレクタ１１とファイルシステムリダイレクタ１２は共にシステム領域に存在していることから、あるプロセスが監視対象であるか否かについて、ファイルシステムリダイレクタ１２が異なる領域（共通ユーザ領域）に存在する全体制御部２０を介在させてレジストリリダイレクタ１１に照会するよりも、レジストリリダイレクタ１１に直接照会した方が、効率が良いからである。
【０１１２】
先述したように、ファイルシステムリダイレクタ１２は、レジストリリダイレクタ１１と同様、監視対象プロセスのｐｉｄを管理することもできる。この場合は、ファイルシステムリダイレクタ１２は、自らが保有する監視対象プロセスリストに対して当該照会を行えばよい。
【０１１３】
ステップＳ６３では、ファイルシステムリダイレクタ１２は、ＯＳからの通知に基づいて、プロセスが隔離フォルダ内のファイルをオープンしようとしているか否かを判定する。隔離フォルダ内のファイルをオープンしようとしている場合はステップＳ６５へ進み、隔離フォルダ内のファイル以外のファイルをオープンしようとしている場合はステップＳ６４へ進む。
【０１１４】
ステップＳ６４では、ファイルシステムリダイレクタ１２は、ＯＳからの通知の中に書込フラグがあるか否かを判定する。書込フラグは、ファイルオープン動作において、対象とするファイルの内容の編集を可能とするフラグである。書込フラグがある場合はステップＳ６６へ進み、書込フラグがない場合はステップＳ６５へ進む。
【０１１５】
ステップＳ６５では、ファイルシステムリダイレクタ１２は、プロセスのファイルオープン動作を許可する。そして、ステップＳ６１に戻る。
つまり、監視対象プロセス（ステップＳ６２の肯定判定）が、隔離フォルダ内のファイルをオープンしようする場合（ステップＳ６３の肯定判定）、又は隔離フォルダ内のファイル以外のファイル（既存の通常ファイル）について（ステップＳ６３の否定判定）、内容の編集をせずに単に読み出しをしようとする場合（ステップＳ６４の否定判定）、ファイルオープン動作を許可する。
【０１１６】
ステップＳ６６では、ファイルシステムリダイレクタ１２は、指定のオリジナルファイルのコピーファイルを隔離フォルダ内に生成して、この隔離フォルダ内のコピーファイルをオープンする。これにより、隔離フォルダ内での当該コピーファイルに対する編集作業が可能になる。そして、ステップＳ６１に戻る。
【０１１７】
ステップＳ６７では、ＯＳからの通知に基づいて、監視対象でないプロセスが隔離フォルダ内のファイルをオープンしようとしているか否かを判定する。隔離フォルダ内のファイルをオープンしようとしている場合はステップＳ６８へ進み、隔離フォルダ内のファイル以外のファイルをオープンしようとしている場合はステップＳ６５へ進む。
【０１１８】
プロセスが、監視対象ではなく、隔離フォルダ内のファイル以外のファイルをオープンしようとする場合は、通常のファイルオープン動作である。このため、ファイルのオープンが許可される（ステップＳ６５）。
【０１１９】
ステップＳ６８では、ファイルシステムリダイレクタ１２は、ファイルオープン動作を拒否する。つまり、監視対象でないプロセスが隔離フォルダ内のファイルをオープンしようとした場合に、ファイルオープン動作が拒否される。そして、ステップＳ６１に戻る。
【０１２０】
ステップＳ６９では、ファイルシステムリダイレクタ１２は、ＯＳからの通知に基づいて、所定のフォルダに含まれるファイル名の一覧表示要求を検出したか否かを判定する。一覧表示要求を検出した場合はステップＳ７０へ進み、一覧表示要求を検出していない場合はステップＳ６１に戻る。
【０１２１】
ステップＳ７０では、ファイルシステムリダイレクタ１２は、ファイル名一覧表示を要求するプロセスが監視対象であるか否かを判定する。ここでは、ステップＳ６２と同様の処理が行われる。そして、上記のプロセスが監視対象である場合はステップＳ７１へ進み、監視対象でない場合はステップＳ７６へ進む。
【０１２２】
ステップＳ７１では、ファイルシステムリダイレクタ１２は、上記のプロセスが指定するフォルダに含まれるファイル名一覧（第１のファイル名一覧）を入手する。
ステップＳ７２では、ファイルシステムリダイレクタ１２は、隔離フォルダに含まれるファイル名一覧（第２のファイル名一覧）を入手する。
【０１２３】
ステップＳ７３では、ファイルシステムリダイレクタ１２は、第１のファイル名一覧と第２のファイル名一覧とを比較して、同一ファイル名があるか否かを判定する。同一ファイル名がある場合はステップＳ７４へ進み、それがない場合はステップＳ７５へ進む。
【０１２４】
ステップＳ７４では、ファイルシステムリダイレクタ１２は、第１のファイル名一覧をベースにした上で、ファイル名が同一のものについては、隔離フォルダから入手した第２のファイル名一覧の関連情報を優先して第１のファイル名一覧に上書きする。このようにして、ファイルシステムリダイレクタ１２は、第１のファイル名一覧と第２のファイル名一覧とをマージする。
【０１２５】
ステップＳ７５では、ファイルシステムリダイレクタ１２は、マージされたファイル名一覧を要求元プロセスに返す。そして、ステップＳ６１に戻る。
ここで、隔離フォルダの内部では、オリジナルファイルのコピーファイルと各コピーファイルを格納するフォルダから構成されるフォルダツリー構造が厳密に再現されている。そして、ファイル名一覧の比較では、指定されたフォルダ内のファイル名と、隔離フォルダ内のファイル名とが、隔離フォルダのルートフォルダ名の部分を除いて比較される。
【０１２６】
例えば、指定されたフォルダ内のオリジナルファイルが「￥￥マイドキュメント￥メモ．ｔｘｔ」であり、それに対応する隔離フォルダ内のコピーファイルが「．．￥隔離フォルダ￥マイドキュメント￥メモ．ｔｘｔ」である場合、隔離フォルダのルートフォルダ名である「．．￥隔離フォルダ」部分が除外され、ファイル名が比較される。
【０１２７】
これより、監視対象プロセスが内容の編集を目的として任意のフォルダ内のファイルを指定した場合、実際には、指定されたファイルの代替ファイルとして当該ファイルに対応した隔離フォルダ内のコピーファイルが指定される。そして、このコピーファイルがオープンされ、編集される。
【０１２８】
なお、本実施形態では、監視対象プロセスがファイルオープン動作を実行した後、監視対象プロセスによる内容の編集自体は、ファイルクローズ動作時も含めて監視対象外となる。
また、本ルーチンによって隔離フォルダに生成されたコピーファイルは、ユーザのサインアウト検出後に、すべて削除される（図３のステップＳ１０）。
【０１２９】
図１０は、全体制御部２０によるプロセス動作監視ルーチンを示すフローチャートである。プロセス動作監視ルーチンでは、監視対象プロセスの照会（ステップＳ８１〜ステップＳ８７）、及び監視対象分散オブジェクトサーバの生成・起動（ステップＳ８８〜ステップＳ９０）が行われる。
【０１３０】
ステップＳ８１では、全体制御部２０は、他の機能ブロック（任意のプロセス）からの依頼を受信する。例えば、あるプロセスが新規生成・起動された場合、当該プロセスは、自らが監視対象であるか否かを確認するために、全体制御部２０に対して問い合わせを行う。また、後述するように、分散オブジェクト生成管理部１３は、監視対象ユーザプロセス３２から分散オブジェクトサーバの生成依頼を受信すると、全体制御部２０に対して監視対象分散オブジェクトサーバ２１の生成を依頼する。
【０１３１】
ステップＳ８２では、全体制御部２０は、受信した依頼が監視対象の問い合わせであるか否かを判定する。監視対象の問い合わせである場合はステップＳ８３へ進み、監視対象の問い合わせでない場合はステップＳ８８へ進む。
【０１３２】
ステップＳ８３では、全体制御部２０は、受信した依頼の中から、問い合わせのあったプロセスのｐｉｄを取得する。
ステップＳ８４では、全体制御部２０は、取得したｐｉｄを用いてレジストリリダイレクタ１１に照会を行う。
【０１３３】
ステップＳ８５では、全体制御部２０は、レジストリリダイレクタ１１から、問い合わせのあったプロセスが監視対象であるか否かの照会に対する応答を受け取る。問い合わせのあったプロセスが監視対象である場合はステップＳ８６へ進み、監視対象でない場合はステップＳ８７へ進む。
【０１３４】
ステップＳ８６では、全体制御部２０は、問い合わせのあったプロセスに対して、当該プロセスが監視対象である旨の肯定応答を返す。そして、ステップＳ８１へ戻る。
ステップＳ８７では、全体制御部２０は、問い合わせのあったプロセスに対して、当該プロセスが監視対象でない旨の否定応答を返す。そして、ステップＳ８１へ戻る。
【０１３５】
一方、ステップＳ８８では、全体制御部２０は、ステップＳ８１で受信した依頼が分散オブジェクト生成管理部１３からの監視対象分散オブジェクトサーバ２１の生成・起動依頼であるか否かを判定する。監視対象分散オブジェクトサーバ２１の生成・起動依頼である場合はステップＳ８９へ進み、監視対象分散オブジェクトサーバ２１の生成・起動依頼でない場合はステップＳ８１に戻る。
【０１３６】
ステップＳ８９では、全体制御部２０は、自身が内部に保有する監視対象分散オブジェクトサーバ生成部２０Ｇに次の処理を実行させる。すなわち、監視対象分散オブジェクトサーバ生成部２０Ｇは、自らの子プロセスとして、依頼のあった監視対象分散オブジェクトサーバ２１を生成・起動する。
【０１３７】
ステップＳ９０では、全体制御部２０は、監視対象分散オブジェクトサーバ生成部２０Ｇによって生成・起動された監視対象分散オブジェクトサーバ２１のｐｉｄを、依頼元である分散オブジェクト生成管理部１３に返す。そして、再びステップＳ８１に戻る。
【０１３８】
通常動作の一環として、分散オブジェクト生成管理部１３は、分散オブジェクトサーバが監視対象に該当するか否かに関わらず、すべての分散オブジェクトサーバのｐｉｄを管理している。分散オブジェクト生成管理部１３は、さらに、全体制御部２０によって監視対象分散オブジェクトサーバ２１が生成・起動された場合でも、監視対象分散オブジェクトサーバ２１のｐｉｄを管理する必要がある。
【０１３９】
そこで、全体制御部２０は、生成・起動した監視対象分散オブジェクトサーバ２１のｐｉｄを、分散オブジェクト生成管理部１３へ通知し、登録させる。これにより、分散オブジェクト生成管理部１３は、分散オブジェクトサーバが監視対象に該当するか否かに関わらず、常に、すべての分散オブジェクトサーバのｐｉｄを管理することができる。
【０１４０】
ここで、監視対象分散オブジェクトサーバ２１の親プロセスである全体制御部２０は、監視対象としてレジストリリダイレクタ１１に登録されている。したがって、図１０に示すプロセス動作監視ルーチンが実行された結果、全体制御部２０の子プロセスである監視対象分散オブジェクトサーバ２１及びこれを起点として生成・起動されるすべての子孫プロセスもまた、監視対象としてレジストリリダイレクタ１１に自動的に登録される。
【０１４１】
次に、監視対象ユーザプロセス３２が分散オブジェクト生成管理部１３に所望の分散オブジェクトサーバの利用要求を行った場合の処理手順の概要について説明する。
図１１は、プログラム動作監視システム１の要部ブロック図である。図１１では、（１）から（６）の順番で処理が実行される。
【０１４２】
（１）任意の監視対象ユーザプロセス３２が、分散オブジェクト生成管理部１３に対して、監視対象分散オブジェクトサーバ２１の利用要求を送信する。
（２）分散オブジェクト生成管理部１３は、利用要求元プロセスが監視対象である場合、全体制御部２０に対して所定の通知（実行対象ファイルや実行権限などの起動方法の通知も含む。）を行うことで、利用要求のあった監視対象分散オブジェクトサーバ２１の生成・起動を依頼する。
【０１４３】
（３）全体制御部２０は、分散オブジェクト生成管理部１３からの依頼を受けて、その内部に保有する監視対象分散オブジェクトサーバ生成部２０Ｇを用いて、利用要求のあった分散オブジェクトサーバを監視対象分散オブジェクトサーバ２１として生成・起動する。
（４）全体制御部２０は、分散オブジェクト生成管理部１３への応答として、生成・起動した監視対象分散オブジェクトサーバ２１のｐｉｄを返信する。
【０１４４】
（５）分散オブジェクト生成管理部１３は、生成・起動された監視対象分散オブジェクトサーバ２１へのアクセス方法を含む応答を、利用要求元プロセスに返信する。
（６）監視対象ユーザプロセス３２（利用要求元プロセス）は、分散オブジェクト生成管理部１３から受信した監視対象分散オブジェクトサーバ２１へのアクセス方法に基づいて、当該監視対象分散オブジェクトサーバ２１と通信する。
【０１４５】
次に、監視対象ユーザプロセス３２が分散オブジェクト生成管理部１３に所望の分散オブジェクトサーバの利用要求を行った場合の具体的な処理手順について説明する。具体的には、図１１の（１）、（２）、（４）及び（５）に関する分散オブジェクト生成管理部１３の具体的な処理を説明する。
【０１４６】
図１２及び図１３は、分散オブジェクト生成管理部１３による分散オブジェクトサーバ生成管理ルーチンを示すフローチャートである。
ステップＳ１０１では、分散オブジェクト生成管理部１３は、任意のプロセスから所望の分散オブジェクトサーバの利用要求があるか否かを判定する。利用要求がある場合はステップＳ１０２へ進み、利用要求がない場合はステップＳ１０１で待機する。
【０１４７】
ステップＳ１０２では、分散オブジェクト生成管理部１３は、当該所望の分散オブジェクトサーバの利用要求を受けて、利用要求元プロセスのｐｉｄ（利用要求に含まれるｐｉｄ）を取得する。
【０１４８】
ステップＳ１０３では、分散オブジェクト生成管理部１３は、利用要求のあった分散オブジェクトサーバが稼働中であるか否かを判定する。稼働中である場合はステップＳ１０８へ進み、稼働中でない場合はステップＳ１０４へ進む。
【０１４９】
ステップＳ１０４では、分散オブジェクト生成管理部１３は、取得したｐｉｄを用いてレジストリリダイレクタ１１に直接照会を行って、利用要求元プロセスが監視対象であるか否かを判定する。当該プロセスが監視対象である場合はステップＳ１０５へ進み、監視対象でない場合はステップＳ１０６へ進む。
【０１５０】
レジストリリダイレクタ１１と分散オブジェクト生成管理部１３は、共にシステム領域に存在する。そのため、分散オブジェクト生成管理部１３は、共通ユーザ領域に存在する全体制御部２０を介在させることなく、レジストリリダイレクタ１１に直接照会することができる。
【０１５１】
ステップＳ１０５では、分散オブジェクト生成管理部１３は、全体制御部２０に対して、監視対象分散オブジェクトサーバ２１の生成・起動を依頼する。
全体制御部２０は、分散オブジェクト生成管理部１３から上記の依頼を受けると、自身の内部に保有する監視対象分散オブジェクトサーバ生成部２０Ｇに次の処理を実行させる。
【０１５２】
すなわち、監視対象分散オブジェクトサーバ生成部２０Ｇは、自らの子プロセスとして、依頼のあった監視対象分散オブジェクトサーバ２１を生成・起動する（図１０のステップＳ８９）。そして全体制御部２０は、自らの子プロセスとして生成・起動した監視対象分散オブジェクトサーバ２１のｐｉｄを分散オブジェクト生成管理部１３へ通知する（ステップＳ９０）。
そして、分散オブジェクト生成管理部１３は、全体制御部２０から監視対象分散オブジェクトサーバ２１のｐｉｄを取得し、ステップＳ１０７へ進む。
【０１５３】
ステップＳ１０６では、分散オブジェクト生成管理部１３は、自らの子プロセスとして、監視対象でない分散オブジェクトサーバを生成・起動して、当該分散オブジェクトサーバのｐｉｄを取得する。
ステップＳ１０７では、分散オブジェクト生成管理部１３は、取得したｐｉｄを用いて、新たに生成・起動された分散オブジェクトサーバの管理を開始する。
【０１５４】
ステップＳ１０８では、分散オブジェクト生成管理部１３は、現在稼働中の所望の分散オブジェクトサーバが監視対象であるか否かを判定する。ここまで、分散オブジェクト生成管理部１３は、監視対象となる分散オブジェクトサーバについては全体制御部２０からそのｐｉｄを取得し（ステップＳ１０５）、監視対象でない分散オブジェクトサーバについては自身がそれを生成・起動し、そのｐｉｄを取得してきた（ステップＳ１０６）。
【０１５５】
これより、分散オブジェクト生成管理部１３は、全体制御部２０又はレジストリリダイレクタ１１にｐｉｄを照会することなく、稼働中の分散オブジェクトサーバのｐｉｄの取得状況に基づいて、当該分散オブジェクトサーバが監視対象であるか否かを自ら判定することができる。すなわち、分散オブジェクト生成管理部１３は、この判定結果を保持する機能を有し、当該機能を利用することで、前述の分散オブジェクトサーバが監視対象であるか否を判定してもよい。
【０１５６】
分散オブジェクト生成管理部１３は、現在稼働中の分散オブジェクトサーバが監視対象であるか否かの判定結果を保持する機能を有しない場合は、自らが管理する当該稼働中の所望の分散オブジェクトサーバのｐｉｄを同定し、これをレジストリリダイレクタ１１に直接照会を行うことで、当該稼働中の所望の分散オブジェクトサーバが監視対象であるか否かを判定してもよい。そして、当該稼働中の所望の分散オブジェクトサーバが監視対象である場合はステップＳ１０９へ進み、監視対象でない場合はステップＳ１１０へ進む。
【０１５７】
ステップＳ１０９では、分散オブジェクト生成管理部１３は、ステップＳ１０２で取得した利用要求元プロセスのｐｉｄを用いてレジストリリダイレクタ１１に直接照会を行って、当該利用要求元プロセスが監視対象であるか否かを判定する。当該利用要求元プロセスが監視対象である場合はステップＳ１１１へ進み、監視対象でない場合はステップＳ１１２へ進む。
【０１５８】
ステップＳ１１０では、分散オブジェクト生成管理部１３は、ステップＳ１０９と同様に、当該利用要求元プロセスが監視対象であるか否かを判定する。当該利用要求元プロセスが監視対象である場合はステップＳ１１２へ進み、監視対象でない場合はステップＳ１１１へ進む。
【０１５９】
ステップＳ１１１では、次の状態１又は状態２になっている。
（状態１）所望の分散オブジェクトサーバは監視対象（監視対象分散オブジェクトサーバ２１）であり、さらに、その利用要求元プロセスも監視対象（監視対象ユーザプロセス３２）である。このとき、利用要求元の監視対象ユーザプロセス３２が所望の監視対象分散オブジェクトサーバ２１にアクセスしても、共に監視対象であるので、問題は生じない。
（状態２）所望の分散オブジェクトサーバは監視対象ではなく、さらに、その利用要求元プロセスも監視対象ではない。これは通常動作であり、このとき、利用要求元プロセスが所望の分散オブジェクトサーバにアクセスしても、共に監視対象外にあるので、問題は生じない。
【０１６０】
そこで、分散オブジェクト生成管理部１３は、利用要求元プロセスに対して、所望の分散オブジェクトサーバへのアクセス方法を含む応答を返す。そして、再びステップＳ１０１に戻る。
【０１６１】
なお、所望の分散オブジェクトサーバが稼働していない場合（ステップＳ１０３の否定判定）、ステップＳ１０４からステップＳ１０７までの処理が実行され、所望の分散オブジェクトサーバが生成・起動される。この場合、利用要求元プロセスが監視対象であれば、生成された分散オブジェクトサーバも監視対象（監視対象分散オブジェクトサーバ２１）となる。一方、利用要求元プロセスが監視対象でなければ（通常プロセスであれば）、生成・起動された分散オブジェクトサーバも監視対象ではない。
【０１６２】
したがって、利用要求元プロセスの利用要求に応じて、ステップＳ１０４からステップＳ１０７までの処理によって所望の分散オブジェクトサーバが新規生成・起動された場合は、ステップＳ１０８及びステップＳ１０９で共に肯定判定となるか、ステップＳ１０８及びステップＳ１１０で共に否定判定となる。その結果、分散オブジェクト生成管理部１３は、利用要求元プロセスによる所望の分散オブジェクトサーバの利用要求を必ず許可し、当該分散オブジェクトサーバへのアクセス方法を含む応答を返すことになる（ステップＳ１１１）。
【０１６３】
ステップＳ１１２では、次の状態３又は状態４になっている。
（状態３）所望の分散オブジェクトサーバは監視対象（監視対象分散オブジェクトサーバ２１）であるが、その利用要求元プロセスは監視対象ではない。
（状態４）所望の分散オブジェクトサーバは監視対象ではないが、その利用要求元プロセス（監視対象ユーザプロセス３２）は監視対象である。
【０１６４】
状態３あるいは状態４の状況は、あるプロセスが所望する分散オブジェクトサーバが、他のユーザのプロセスからの利用要求に基づいて既に稼働しており（ステップＳ１０３の肯定判定）、ステップＳ１０４からステップＳ１０７までの処理が実行されなかった場合に起こり得る。すなわち、当該他のユーザのプロセスが監視対象でなかった場合、当該稼働中の所望の分散オブジェクトサーバもまた監視対象でない。従って、もし利用要求元プロセスが監視対象であった（監視対象ユーザプロセス３２）ならば、状態４の状況となる。
【０１６５】
このような状況で、利用要求元プロセスから所望の分散オブジェクトサーバへのアクセスを許可すると、いずれか一方のプログラム動作の監視漏れが生じてしまう。
そこで、ステップＳ１１２では、分散オブジェクト生成管理部１３は、利用要求元プロセスに対して、所望の分散オブジェクトサーバへのアクセス拒否応答を返す。そして、再びステップＳ１０１に戻る。
【０１６６】
なお、ステップＳ１１２で示したアクセス拒否応答を解決するためには、現在稼働中の所望の分散オブジェクトサーバを一旦停止し、その後、当該所望の分散オブジェクトサーバを、利用要求元プロセスと同じ監視状況（監視対象であるか否か）で再起動する必要がある。その理由は次の通りである。
【０１６７】
レジストリリダイレクタ１１及びファイルシステムリダイレクタ１２は、監視対象分散オブジェクトサーバ２１が存在する場合に、特殊な保護動作を行う（図６から図９参照）。これより、仮に稼働中の所望の分散オブジェクトサーバが停止することなく非監視対象から監視対象に変更されると、上述した特殊な保護動作を、整合性を保持しつつ維持することができなくなる。すなわち、非監視対象から監視対象への変更は、所望の分散オブジェクトサーバが稼働中でないときに実施する必要があるので、上述の処理が必要になる。
【０１６８】
また、仮に、稼働中の所望の分散オブジェクトサーバが停止することなく監視対象から非監視対象に変更されると、当該所望の分散オブジェクトサーバによるファイルの取り扱いについて問題が発生するおそれがある。例えば、監視対象分散オブジェクトサーバ２１がファイルを新規生成すると、そのファイルは隔離フォルダにのみ配置される。しかし所望の監視対象分散オブジェクトサーバ２１が停止することなく非監視対象に変更されたならば、当該所望の分散オブジェクトサーバはもはや隔離フォルダ内の当該新規生成ファイルにアクセスすることができない。このような問題を回避するためにも、所望の分散オブジェクトサーバの監視状況を変更する場合、当該所望の分散オブジェクトサーバを一旦終了させた上で、監視状況変更後の所望の分散オブジェクトサーバを最初からリスタートしなければならない。
【０１６９】
［変形例］
ここまでの説明では、所望の分散オブジェクトサーバが高々１つのプロセスとしてのみ生成・起動されることを前提とした。以下では、所望の分散オブジェクトサーバが複数のプロセスとして生成・起動できる場合を想定する。分散オブジェクト生成管理部１３は、複数の分散オブジェクトサーバの各々の監視状況（監視対象であるか否か）も併せて個別に管理し、利用要求元プロセスから所望の分散オブジェクトサーバの利用要求があった場合に、当該利用要求元プロセスと同じ監視状況にある分散オブジェクトサーバを選択して、当該要求元プロセスに対して、当該分散オブジェクトサーバへのアクセス方法を含む応答を返してもよい。
【０１７０】
ところで、分散オブジェクト生成管理部１３は、元々はＯＳの標準機能ブロックの１つとして提供されるものである。そこで、ＯＳの標準機能からの改変を最小限にすべく、利用要求元プロセス自体が、所望の分散オブジェクトサーバの稼働の有無を、その監視状況も含めて直接判定してもよい。この場合、分散オブジェクト生成管理部１３は、単に次のルーチンを実行すればよい。
【０１７１】
図１４は、分散オブジェクト生成管理部１３による第２の分散オブジェクトサーバ生成管理ルーチンを示すフローチャートである。なお、図１２と同じ処理を行うステップについては図１２と同一の符号が付される。
【０１７２】
ここでは、利用要求元プロセスは、その前提として、（ａ）その起動時に自らのｐｉｄを用いて全体制御部２０に照会することによって自らが監視対象であること（監視対象ユーザプロセス３２）を予め知っており、（ｂ）所望する分散オブジェクトサーバが監視対象（監視対象分散オブジェクトサーバ２１）として既に稼働しているか否かを予め知っている（これらは、利用要求元プロセスに当該機能を果たすフックを注入することで実現可能である）ものとする。
【０１７３】
通常の（監視対象でない）プロセスは、分散オブジェクト生成管理部１３に対して、所望の分散オブジェクトサーバの利用を要求する場合、一般的に自らのｐｉｄを伝えることはない。そこで、利用要求元プロセスは、自らが監視対象（監視対象ユーザプロセス３２）の場合、自らのｐｉｄを入れた利用要求通知を分散オブジェクト生成管理部１３へ送信する。
【０１７４】
ステップＳ１０１では、分散オブジェクト生成管理部１３は、利用要求元プロセスから所望の分散オブジェクトサーバの利用要求があるか否かを判定する。利用要求がある場合はステップＳ１２１へ進み、利用要求がない場合は利用要求があるまで待機する。
【０１７５】
ステップＳ１２１では、分散オブジェクト生成管理部１３は、利用要求通知に利用要求元プロセスのｐｉｄが含まれているか否かを判定する。利用要求元プロセスのｐｉｄが含まれている場合はステップＳ１０５へ進み、当該ｐｉｄが含まれていない場合はステップＳ１０６へ進む。
【０１７６】
ステップＳ１０５では、分散オブジェクト生成管理部１３は、全体制御部２０に、当該所望の監視対象分散オブジェクトサーバ２１の生成・起動を依頼する。全体制御部２０は、自らの子プロセスとして当該所望の監視対象分散オブジェクトサーバ２１を生成・起動した後、そのｐｉｄを分散オブジェクト生成管理部１３へ通知する。
【０１７７】
そして、分散オブジェクト生成管理部１３は、全体制御部２０から当該所望の監視対象分散オブジェクトサーバ２１のｐｉｄを取得し、ステップＳ１０７へ進む。
【０１７８】
ステップＳ１０６では、分散オブジェクト生成管理部１３は、自らの子プロセスとして、監視対象ではない当該所望の分散オブジェクトサーバを生成・起動して、その分散オブジェクトサーバのｐｉｄを取得する。そして、ステップＳ１０７へ進む。
【０１７９】
ステップＳ１０７においても、生成・起動された分散オブジェクトサーバを管理するのは、（監視対象であるか否かに関わらず）分散オブジェクト生成管理部１３である。
したがって、ステップＳ１０７では、分散オブジェクト生成管理部１３は、取得したｐｉｄを用いて、新たに生成・起動された当該所望の分散オブジェクトサーバの管理を直ちに開始する。そして、ステップＳ１１１へ進む。
【０１８０】
ステップＳ１１１では、分散オブジェクト生成管理部１３は、利用要求元プロセスに対して、当該所望の分散オブジェクトサーバへのアクセス方法を含む応答を返す。そして、再びステップＳ１０１に戻る。
以上のように、図１４に示すルーチンよれば、分散オブジェクト生成管理部１３の改変は、同図の太破線枠で示した範囲に限定される。
【０１８１】
ところで、本実施形態では、分散オブジェクトサーバは、監視対象であるか否かに関わらず、他のユーザと共有できるように、共通ユーザ領域にて生成・起動される。
しかし、セキュリティ上の理由などから、分散オブジェクトサーバの利用を、それが監視対象である場合、利用要求元プロセス、又は利用要求元プロセスを保有するユーザに割り当てられた個別ユーザ領域にて生成・起動された監視対象ユーザプロセス３２のみに限定することも想定される。この場合、監視対象分散オブジェクトサーバ２１は、利用要求元プロセスが生成・起動された個別ユーザ領域にて生成・起動してもよい。
【０１８２】
この場合、図３に示すステップＳ１４の処理は、ステップＳ８の肯定判定後からステップＳ１０の前まで（ステップＳ９の直前又は直後）に実施される。ここでは、さらに、全体制御部２０の代わりに、当該ユーザに割り当てられた監視対象ユーザプロセス生成部３１が、監視対象分散オブジェクトサーバ２１を生成・起動してもよい。
【０１８３】
なお、監視対象プロセスの監視対象とするプログラム動作は、上述した動作に限定されるものではなく、例えばプロセス間通信も該当する。つまり、ＴＣＰ／ＩＰネットワーク通信なども監視対象の１つとなる。
【０１８４】
例えばＯＳがマイクロソフト社のＷｉｎｄｏｗｓ（登録商標）の場合、例えばＷＦＰ（Ｗｉｎｄｏｗｓ  Ｆｉｌｔｅｒｉｎｇ  Ｐｌａｔｆｏｒｍ）と呼ばれるフィルタドライバを作成し、それをシステム領域で動作させるとよい。これにより、監視対象プロセスによるＴＣＰ／ＩＰネットワーク通信に対して、レジストリリダイレクタ１１を用いたレジストリアクセス動作の監視、制御、保護に類似した機能が実現される。
【０１８５】
［第２の実施形態］
つぎに、本発明の第２の実施形態について説明する。なお、第１の実施形態と同一の部位・処理については同一の符号を付し、重複する説明は省略する。
【０１８６】
第１実施形態では、分散オブジェクト生成管理部１３は、監視対象ユーザプロセス３２から所望の分散オブジェクトサーバの利用要求の依頼があった場合、指定された監視対象分散オブジェクトサーバ２１の生成・起動を含め、その依頼そのものを全体制御部２０へリダイレクト（転送）していた。
【０１８７】
これに対して、第２の実施形態では、分散オブジェクト生成管理部１３は、監視対象ユーザプロセス３２から所望の分散オブジェクトサーバの利用要求の依頼があった場合、自ら当該分散オブジェクトサーバを生成・起動する。
【０１８８】
この場合、監視対象とすべき指定された分散オブジェクトサーバの生成・起動から当該分散オブジェクトサーバが実際に監視される（監視対象分散オブジェクトサーバ２１となる）までの間に、当該分散オブジェクトサーバの動作が進んでしまうと、プログラム動作の監視に漏れが生じるおそれがある。
【０１８９】
そこで、第２の実施形態では、分散オブジェクト生成管理部１３は、監視対象とすべき指定された分散オブジェクトサーバを自ら生成した場合、当該分散オブジェクトサーバの動作を一旦停止させる。そして、分散オブジェクト生成管理部１３は、当該分散オブジェクトサーバのｐｉｄをレジストリリダイレクタ１１へ通知し、その登録完了応答を得て当該分散オブジェクトサーバが監視対象（監視対象分散オブジェクトサーバ２１）になったことを確認してから、当該分散オブジェクトサーバの動作を再開させる。
【０１９０】
つまり、分散オブジェクト生成管理部１３とレジストリリダイレクタ１１との間での同期処理を図ることによって、指定された分散オブジェクトサーバのプログラム動作の監視漏れを防止する。具体的には、図１２に示す分散オブジェクトサーバ生成管理ルーチンの代わりに、図１５に示す第３の分散オブジェクトサーバ生成管理ルーチンが実行される。
【０１９１】
図１５は、第３の分散オブジェクトサーバ生成管理ルーチンを示すフローチャートである。なお、ステップＳ１０１からステップＳ１０３までは、図１２と同様である。ステップＳ１０３の否定判定後は、図１５のステップＳ１３１に進む。
【０１９２】
ステップＳ１３１では、分散オブジェクト生成管理部１３は、指定された分散オブジェクトサーバが稼働していないので、当該分散オブジェクトサーバを自ら生成し、生成した分散オブジェクトサーバのｐｉｄを取得する。本ステップは、分散オブジェクト生成管理部１３が従来から行っている通常処理である。
【０１９３】
ステップＳ１３２では、分散オブジェクト生成管理部１３は、ステップＳ１０１で取得したｐｉｄを用いてレジストリリダイレクタ１１に直接照会を行って、利用要求元プロセスが監視対象であるか否かを判定する。当該プロセスが監視対象である場合はステップＳ１３３へ進み、当該プロセスが監視対象でない場合はステップＳ１３５へ進む。
【０１９４】
ステップＳ１３３では、分散オブジェクト生成管理部１３は、ステップＳ１３１で取得した分散オブジェクトサーバのｐｉｄをレジストリリダイレクタ１１に通知する。
ステップＳ１３４では、分散オブジェクト生成管理部１３は、レジストリリダイレクタ１１から通知されたｐｉｄの登録が完了した旨の応答があるか否かを判定する。登録が完了した旨の応答がある場合はステップＳ１３５へ進み、登録が完了した旨の応答がない場合はその応答があるまで待機する。
【０１９５】
ステップＳ１３５では、分散オブジェクト生成管理部１３は、ステップＳ１３１で生成した分散オブジェクトサーバを起動して、当該分散オブジェクトサーバの管理を開始する。そして、図１３に示すステップＳ１０８へ進む。本ステップは、分散オブジェクト生成管理部１３が従来から行っている通常処理である。
【０１９６】
以上のように、分散オブジェクト生成管理部１３は、指定された分散オブジェクトサーバの生成後から起動前までの期間に、当該分散オブジェクトサーバのｐｉｄをレジストリリダイレクタ１１へ通知し、それを登録させる。これにより、監視対象である当該分散オブジェクトサーバが監視前に動作を開始することがなくなり、プログラム動作の監視漏れを回避することができる。
【０１９７】
なお、本発明は、上述した実施形態に限定されるものではなく、特許請求の範囲に記載された事項の範囲内で設計変更されたものにも適用される。
【符号の説明】
【０１９８】
１  プログラム動作監視システム
１１  レジストリリダイレクタ
１２  ファイルシステムリダイレクタ
１３  分散オブジェクト生成管理部
２０  全体制御部
２０Ｇ  監視対象分散オブジェクトサーバ生成部
２１  監視対象分散オブジェクトサーバ
３１  監視対象ユーザプロセス生成部
３２  監視対象ユーザプロセス
３２Ｐ  印刷動作監視部
３２Ｃ  クリップボード動作監視部
【図１】
2018073166.tif 000003
【図２】
2018073166.tif 000004
【図３】
2018073166.tif 000005
【図４】
2018073166.tif 000006
【図５】
2018073166.tif 000007
【図６】
2018073166.tif 000008
【図７】
2018073166.tif 000009
【図８】
2018073166.tif 000010
【図９】
2018073166.tif 000011
【図１０】
2018073166.tif 000012
【図１１】
2018073166.tif 000013
【図１２】
2018073166.tif 000014
【図１３】
2018073166.tif 000015
【図１４】
2018073166.tif 000016
【図１５】
2018073166.tif 000017