(57)【要約】【課題】既存のオペレーティングシステムを変更することなく、アプリケーションプログラムの動作をこれまでよりも詳細に制御する。【解決手段】オペレーティングシステム上で第１および第２アプリケーションプログラムを含む複数のアプリケーションプログラムを並行に動作させる情報処理装置を提供する。情報処理装置は、第１アプリケーションプログラムからオペレーティングシステムに対する関数呼び出し、または、第１アプリケーションプログラムおよびオペレーティングシステム間で送受信されるメッセージを監視する。そして、その監視結果に基づいて、第２アプリケーションプログラムからオペレーティングシステムに対する関数呼び出し、若しくは、第２アプリケーションプログラムおよびオペレーティングシステム間のメッセージ送受信の処理を変更または禁止する。【選択図】図１
2007065846.tif 000002
【特許請求の範囲】
【請求項１】
オペレーティングシステム上で第１および第２アプリケーションプログラムを含む複数のアプリケーションプログラムを並行に動作させる情報処理装置であって、
前記第１アプリケーションプログラムから前記オペレーティングシステムに対する関数呼び出し、または、前記第１アプリケーションプログラムおよび前記オペレーティングシステム間で送受信されるメッセージを監視する監視部と、
前記監視部による監視結果に基づいて、前記第２アプリケーションプログラムから前記オペレーティングシステムに対する関数呼び出し、若しくは、前記第２アプリケーションプログラムおよび前記オペレーティングシステム間のメッセージ送受信の処理を変更または禁止する制御部と
を備える情報処理装置。
【請求項２】
前記第１アプリケーションプログラムは、第１メモリ空間において動作し、
前記第２アプリケーションプログラムは、前記第１メモリ空間とは異なる第２メモリ空間において動作し、
前記監視部は、前記第１メモリ空間上において前記第１アプリケーションプログラムと共に動作するプログラムにより実現され、前記監視部および前記制御部の何れもがアクセス可能なメモリ空間である制御メモリ空間に前記監視結果を記録し、
前記制御部は、前記第２メモリ空間において前記第２アプリケーションプログラムと共に動作するプログラムにより実現され、前記監視結果を前記制御メモリ空間から読み出して、読み出した前記監視結果に基づいて、関数呼び出しまたはメッセージ送受信を禁止または変更する
請求項１に記載の情報処理装置。
【請求項３】
前記第１アプリケーションプログラムから前記オペレーティングシステムに対する関数呼び出しの呼び出し先アドレスを、前記監視部を実現するプログラムのアドレスに変更する第１変更部と、
前記第２アプリケーションプログラムから前記オペレーティングシステムに対する関数呼び出しの呼び出し先アドレスを、前記制御部を実現するプログラムのアドレスに変更する第２変更部と
を更に備え、
前記監視部は、前記第１アプリケーションプログラムから呼び出されて処理を開始し、関数呼び出しの引数または戻り値を監視結果として前記制御メモリ空間に記録し、当該引数により前記オペレーティングシステムに対する関数呼び出しを実行し、
前記制御部は、前記第２アプリケーションプログラムから呼び出されて処理を開始し、前記監視結果を前記制御メモリ空間から読み出し、読み出した当該監視結果に基づいて、呼び出された引数とは異なる引数により前記オペレーティングシステムに対する関数呼び出しを実行し、または、当該関数呼び出しを実行しないで前記第２アプリケーションプログラムに処理を戻す
請求項２に記載の情報処理装置。
【請求項４】
前記第１変更部は、前記オペレーティングシステムにより提供される複数の関数のうち、処理内容を監視する対象として予め設定された関数の呼び出し先アドレスを、前記監視部を実現するプログラムのアドレスに変更し、
前記第２変更部は、前記オペレーティングシステムにより提供される複数の関数のうち、処理を制御する対象として予め設定された関数の呼び出し先アドレスを、前記制御部を実現するプログラムのアドレスに変更する
請求項３に記載の情報処理装置。
【請求項５】
各々のアプリケーションプログラムから関数呼び出しの毎に参照され、各々の関数の識別情報に当該関数の呼び出し先アドレスを対応付けて記録した第１記録部と、
処理内容を監視する対象として予め設定された関数に対応して前記第１記録部に記録された呼び出し先アドレスを、前記監視部を実現するプログラムのアドレスに変更する第１変更部と、
処理を制御する対象として予め設定された関数に対応して前記第１記録部に記録された呼び出し先アドレスを、前記制御部を実現するプログラムのアドレスに変更する第２変更部と
を更に備える請求項２に記載の情報処理装置。
【請求項６】
前記第１変更部は、前記第１メモリ空間において動作するスレッドにより実現され、
前記第２変更部は、前記第２メモリ空間において動作するスレッドにより実現され、
前記制御部は、更に、スレッドを制御するアプリケーションプログラムに対応付けて設けられ、当該アプリケーションプログラムから何れかの当該スレッドを終了させるために前記オペレーティングシステム上の関数を呼び出す処理を禁止する
請求項５に記載の情報処理装置。
【請求項７】
データのコピーを禁止するコピー元およびコピー先のアプリケーションプログラムの組を記録する第２記録部を更に備え、
前記監視部は、前記第１および第２アプリケーションプログラムの何れもがアクセス可能なメモリ空間である共有メモリ空間に対して前記第１アプリケーションプログラムがデータを記録する関数呼び出しを検出したことに応じ、当該データに対応付けて、前記第１アプリケーションプログラムを識別する識別情報を前記監視結果として前記制御メモリ空間に記録し、
前記制御メモリ空間から取得した前記識別情報により識別されるアプリケーションプログラムと、前記第２アプリケーションプログラムとの組が、前記第２記録部に記録されたアプリケーションプログラムの組に一致することを条件に、当該データのコピーを禁止すると判断する判断部を更に備え、
前記制御部は、前記第２アプリケーションプログラムが前記共有メモリ空間からデータを読み出す関数の関数呼び出しを検出したことに応じ、前記判断部による判断に基づいて、当該関数呼び出しの処理を変更または禁止する
請求項２に記載の情報処理装置。
【請求項８】
前記判断部は、更に、前記共有メモリ空間に記録されているデータが、コピーを禁止する対象となる文字列を含むことを条件に、当該データのコピーを禁止すると判断し、
前記制御部は、前記判断部による判断に更に基づいて、前記第２アプリケーションプログラムが前記共有メモリ空間からデータを読み出す関数呼び出しの処理を変更または禁止する
請求項７に記載の情報処理装置。
【請求項９】
前記判断部は、前記共有メモリ空間に記録されているデータが、コピーを禁止する対象とするデータの種類の条件を満たすことを条件に、当該データのコピーを禁止すると判断し、
前記制御部は、前記判断部による判断に更に基づいて、前記第２アプリケーションプログラムが前記共有メモリ空間からデータを読み出す関数呼び出しの処理を変更または禁止する
請求項７に記載の情報処理装置。
【請求項１０】
前記監視部は、当該データが前記第１アプリケーションプログラムにより記録されたことを認証させる電子署名を、当該データに付加して前記共有メモリ空間に記録し、
前記判断部は、前記共有メモリ空間に記録された電子署名を認証し、
前記制御部は、前記判断部による認証が成功したことを条件として、前記第２アプリケーションプログラムが前記共有メモリ空間からデータを読み出す関数の関数呼び出しを許可する
請求項７に記載の情報処理装置。
【請求項１１】
前記監視部は、前記共有メモリ空間に対し前記第１アプリケーションプログラムがデータを記録する関数呼び出しを検出したことに応じ、当該データを暗号化して前記共有メモリ空間に記録し、
前記判断部は、前記共有メモリ空間に記録されたデータを復号化し、
前記制御部は、前記判断部による復号化が成功したことを条件として、前記第２アプリケーションプログラムが前記共有メモリ空間からデータを読み出す関数の関数呼び出しを許可する
請求項７に記載の情報処理装置。
【請求項１２】
前記監視部は、前記第１アプリケーションプログラムが前記共有メモリ空間に対してデータを記録する関数呼び出しを検出したことに応じ、当該データに対して、当該データが前記第１アプリケーションプログラムからコピーされた旨を示す電子透かしを付加する
請求項７に記載の情報処理装置。
【請求項１３】
前記監視部は、前記第１アプリケーションプログラムが前記共有メモリ空間に対してデータを記録する関数呼び出しを検出したことに応じ、当該データに対応付けて当該関数呼び出しの回数を前記制御メモリ空間に記録し、
前記判断部は、前記関数呼び出しの回数が予め定められた基準を超えたことを条件に、
当該データのコピーを禁止すると判断する
請求項７に記載の情報処理装置。
【請求項１４】
前記監視部は、前記第１アプリケーションプログラムが前記共有メモリ空間に対してデータを記録する関数呼び出しを検出したことに応じ、当該データに対応付けて当該データのサイズを前記制御メモリ空間に記録し、
前記判断部は、前記データのサイズが予め定められた基準を超えたことを条件に、当該データのコピーを禁止すると判断する
請求項７に記載の情報処理装置。
【請求項１５】
前記監視部は、アプリケーションプログラムを起動させる関数の呼び出しを検出して、当該関数によって起動されるアプリケーションプログラムの識別情報を前記監視結果として前記制御メモリ空間に記録し、
前記制御メモリ空間から取得した前記識別情報により識別されるアプリケーションプログラムが、予め定められたアプリケーションプログラムであることを条件に、前記共有メモリ空間に記録されたデータの前記第２アプリケーションプログラムへのコピーを禁止すると判断する判断部を更に備え、
前記制御部は、前記判断部による判断に基づいて、前記第２アプリケーションプログラムが前記共有メモリ空間からデータを読み出す関数の関数呼び出しを変更または禁止する
請求項２に記載の情報処理装置。
【請求項１６】
上位機能を提供する上位プログラムと、各々第１及び第２下位機能を提供する第１及び第２下位プログラムとを実行する情報処理装置に適用される方法であり、
前記第１下位機能の実現のために前記上位機能を呼び出す段階と、
前記第２下位機能の実現のために前記上位機能を呼び出す段階と、
前記第１及び第２下位機能の組み合わせを判断する段階と、
前記第１及び第２下位機能の組み合わせが所定の組み合わせであることを条件に、前記上位機能の呼び出しを禁止する段階と
を備える方法。
【請求項１７】
オペレーティングシステム上で第１および第２アプリケーションプログラムを含む複数のアプリケーションプログラムを並行に動作させる情報処理装置における、アプリケーションプログラムの制御方法であって、
前記第１アプリケーションプログラムから前記オペレーティングシステムに対する関数呼び出し、または、前記第１アプリケーションプログラムおよび前記オペレーティングシステム間で送受信されるメッセージを監視する段階と、
前記段階における監視結果に基づいて、前記第２アプリケーションプログラムから前記オペレーティングシステムに対する関数呼び出し、若しくは、前記第２アプリケーションプログラムおよび前記オペレーティングシステム間のメッセージ送受信の処理を変更または禁止する段階と
を備える制御方法。
【請求項１８】
オペレーティングシステム上で第１および第２アプリケーションプログラムを含む複数のアプリケーションプログラムを並行に動作させる情報処理装置において、アプリケーションプログラムを制御するプログラムであって、
前記情報処理装置を、
前記第１アプリケーションプログラムから前記オペレーティングシステムに対する関数呼び出し、または、前記第１アプリケーションプログラムおよび前記オペレーティングシステム間で送受信されるメッセージを監視する監視部と、
前記監視部による監視結果に基づいて、前記第２アプリケーションプログラムから前記オペレーティングシステムに対する関数呼び出し、若しくは、前記第２アプリケーションプログラムおよび前記オペレーティングシステム間のメッセージ送受信の処理を変更または禁止する制御部と
して機能させるプログラム。
【請求項１９】
第１アプリケーションプログラムの処理に基づいて第２アプリケーションプログラムの処理を制御するように情報処理装置を設定する設定方法であって、
前記第１アプリケーションプログラムからオペレーティングシステムに対する関数呼び出しを監視させる監視プログラムを、前記第１アプリケーションプログラムと共に第１メモリ空間で動作させる段階と、
前記監視プログラムによる監視結果に基づいて前記第２アプリケーションプログラムから前記オペレーティングシステムに対する関数呼び出しを禁止または変更させる制御プログラムを、前記第２アプリケーションプログラムと共に第２メモリ空間で動作させる段階と、
前記第１アプリケーションプログラムから前記オペレーティングシステムに対する関数呼び出しの呼び出し先アドレスを、前記監視プログラムのアドレスに変更し、前記第２アプリケーションプログラムから前記オペレーティングシステムに対する関数呼び出しの呼び出し先アドレスを、前記制御プログラムのアドレスに変更する段階と
を備える設定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションプログラムの制御方法およびその装置に関する。特に、本発明は、アプリケーションプログラムからオペレーティングシステムに対する関数呼び出しを制御する制御方法およびその装置に関する。
【背景技術】
【０００２】
従来、オペレーティングシステムは、システム管理者等により設定された情報に基づいて、アプリケーションプログラムの動作を制御する。例えば、オペレーティングシステムは、そのアプリケーションプログラムを起動させた利用者の権限に応じ、特定のファイルに対するアクセスを禁止する。また、オペレーティングシステムは、各々のアプリケーションプログラムに割り当てるＣＰＵの計算時間を決定する。
【０００３】
しかしながら、オペレーティングシステムによる制御は、オペレーティングシステムの設計者により予め定められた種類に限定される。このため、オペレーティングシステムとは異なる制御を実現するためには、既存のアプリケーションプログラムを改造したり、オペレーティングシステムを改造する必要があった。たとえ改造ができたとしても、その作業には膨大な開発時間や開発費用を要し、また、プログラムの保守性を低下させる問題があった。
【０００４】
これに対して、従来、既存のオペレーティングシステムを改造することなく、ファイルに対するアクセス制御機能を拡張する技術が提案されている（特許文献１を参照。）。この技術において、アプリケーションプログラムは、リソース管理プログラムを経由してオペレーティングシステムに操作要求を送る。リソース管理プログラムは、操作要求を捕捉すると、その操作要求によって指定されるコンピュータリソースを特定し、それに対するアクセス権限があるか否かを判定する。アクセス権限が無ければ、当該操作要求を拒否する。この技術によれば、オペレーティングシステムによりアクセスが許可されている場合であっても、それとは無関係に独自のアクセス権限を定めることができる。
【特許文献１】特開２００３−４４２９７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記の技術においては、ユーザおよびコンピュータリソースの組に対応付けて、そのリソースに対するアクセスの可否が定められている。アクセスの可否は、管理者等により静的に定められる。このため、プログラムの処理進行に伴って変化する情報に基づいて、アクセスの可否を変更することはできなかった。例えば、あるデータに対するアクセスを、そのデータの内容や属性、さらにはそのデータを現在どのアプリケーションプログラムが保持・利用しているのかに基づいて許可または禁止することはできなかった。
【０００６】
そこで本発明は、上記の課題を解決することのできるアプリケーションプログラムの制御方法およびその装置を提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明の第１の形態においては、オペレーティングシステム上で第１および第２アプリケーションプログラムを含む複数のアプリケーションプログラムを並行に動作させる情報処理装置であって、第１アプリケーションプログラムからオペレーティングシステムに対する関数呼び出し、または、第１アプリケーションプログラムおよびオペレーティングシステム間で送受信されるメッセージを監視する監視部と、監視部による監視結果に基づいて、第２アプリケーションプログラムからオペレーティングシステムに対する関数呼び出し、若しくは、第２アプリケーションプログラムおよびオペレーティングシステム間のメッセージ送受信の処理を変更または禁止する制御部とを備える情報処理装置、当該情報処理装置の制御方法、および、当該情報処理装置を制御するプログラムを提供する。
【０００８】
また、本発明の第２の形態においては、上位機能を提供する上位プログラムと、各々第１及び第２下位機能を提供する第１及び第２下位プログラムとを実行する情報処理装置に適用される方法であり、前記第１下位機能の実現のために前記上位機能を呼び出す段階と、前記第２下位機能の実現のために前記上位機能を呼び出す段階と、前記第１及び第２下位機能の組み合わせを判断する段階と、前記第１及び第２下位機能の組み合わせが所定の組み合わせであることを条件に、前記上位機能の呼び出しを禁止する段階とを備える方法
を提供する。
【０００９】
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明の効果】
【００１０】
本発明によれば、既存のオペレーティングシステムを変更することなく、アプリケーションプログラムの動作をこれまでよりも詳細に制御することができる。
【発明を実施するための最良の形態】
【００１１】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１２】
図１は、情報処理装置１０の構成を示す。情報処理装置１０は、本発明に係る上位機能を提供する上位プログラムの一例として、オペレーティングシステム６０を動作させる。そして、情報処理装置１０は、オペレーティングシステム６０上で複数のアプリケーションプログラムを並行に動作させる。具体的には、情報処理装置１０は、第１下位機能を提供する第１下位プログラムの一例である第１アプリケーションプログラムを第１メモリ空間１００において動作させる。このプログラムをアプリケーションプログラム１１０とする。また、情報処理装置１０は、第２下位機能を提供する第２下位プログラムの一例である第２アプリケーションプログラムを第２メモリ空間２００において動作させる。このプログラムをアプリケーションプログラム２１０とする。
本実施例における情報処理装置１０は、アプリケーションプログラム１１０からオペレーティングシステム６０に対する関数呼び出しを監視し、その監視結果に基づいてアプリケーションプログラム２１０の動作を制御することを目的とする。
【００１３】
以降、本実施例においては、アプリケーションプログラム１１０の関数呼び出しを監視した監視結果に基づいてアプリケーションプログラム２１０の動作を制御する機能を代表して説明する。これに加えて、情報処理装置１０は、更に、アプリケーションプログラム２１０の関数呼び出しを監視した監視結果に基づいてアプリケーションプログラム１１０の動作を制御してもよい。この場合、情報処理装置１０は、監視部１２０および変更部１４０を第２メモリ空間２００において更に動作させ、制御部２２０、判断部２３０および変更部２５０を第１メモリ空間１００において更に動作させる。これによって追加される各部材の機能は、図１中の各部材の機能と略同一であるので説明を省略する。
【００１４】
情報処理装置１０は、後述するメモリ１０２０中に、第１メモリ空間１００と、共有メモリ空間１５０と、第２メモリ空間２００とを有する。情報処理装置１０は、第１メモリ空間１００において、アプリケーションプログラム１１０と、監視部１２０と、ＤＬＬ１３０と、変更部１４０とを動作させる。変更部１４０は、アプリケーションプログラム１１０の動作開始に応じ、アプリケーションプログラム１１０からオペレーティングシステム６０に対する関数呼び出しの呼び出し先アドレスを、監視部１２０を実現する監視プログラムのアドレスに変更する。変更される呼び出し先アドレスは、オペレーティングシステム６０により提供される複数の関数のうち、処理内容を監視する対象として予め定められた関数の呼び出し先アドレスである。当該予め定められた関数は、オペレーティングシステム６０によりＤＬＬ１３０として提供される。
【００１５】
監視部１２０は、第１メモリ空間１００上においてアプリケーションプログラム１１０と共に動作する監視プログラムにより実現される。そして、監視部１２０は、アプリケーションプログラム１１０からオペレーティングシステム６０に対する関数呼び出し、または、アプリケーションプログラム１１０およびオペレーティングシステム６０間で送受信されるメッセージを監視し、共有メモリ空間１５０にその監視結果を記録する。処理の詳細内容として、監視部１２０は、アプリケーションプログラム１１０から呼び出されて処理を開始し、関数呼び出しの引数または戻り値を監視結果として共有メモリ空間１５０に記録し、その引数によりＤＬＬ１３０に対する関数呼び出しを実行する。
【００１６】
これに代えて、監視結果は、監視部１２０によりＤＬＬ１３０に引数などとして受け渡され、監視部１２０からＤＬＬ１３０を経由して共有メモリ空間１５０に記録されてもよい。ＤＬＬ１３０は、監視部１２０から呼び出されて処理を開始し、監視部１２０により指定された引数により予め定められた処理を行いその処理結果を戻り値として監視部１２０に返す。また、ＤＬＬ１３０は、その処理の内容に応じて共有メモリ空間１５０にデータを記録してもよい。例えば、データをクリップボードにコピーする関数が呼び出されたことに応じ、ＤＬＬ１３０によりデータが共有メモリ空間１５０に記録されると共に、監視部１２０によりアプリケーションプログラム１１０の識別情報が共有メモリ空間１５０に記録される。
【００１７】
情報処理装置１０は、第２メモリ空間２００において、アプリケーションプログラム２１０と、制御部２２０と、判断部２３０と、ＤＬＬ２４０とを動作させる。変更部２５０は、アプリケーションプログラム２１０の動作開始に応じ、アプリケーションプログラム２１０からオペレーティングシステム６０に対する関数呼び出しの呼び出し先アドレスを、制御部２２０を実現する制御プログラムのアドレスに変更する。変更される呼び出し先アドレスは、オペレーティングシステム６０により提供される複数の関数のうち、処理を制御する対象として予め設定された関数の呼び出し先アドレスである。当該予め定められた関数は、オペレーティングシステム６０によりＤＬＬ２４０として提供される。
【００１８】
制御部２２０は、第２メモリ空間２００上においてアプリケーションプログラム２１０と共に動作する制御プログラムにより実現される。そして、制御部２２０は、監視部１２０による監視結果に基づいて、アプリケーションプログラム２１０からオペレーティングシステム６０に対する関数呼び出し、若しくは、アプリケーションプログラム２１０およびオペレーティングシステム６０間のメッセージ送受信の処理を変更または禁止する。処理の詳細内容として、制御部２２０は、アプリケーションプログラム２１０から呼び出された処理を開始し、監視結果を共有メモリ空間１５０から読み出し、読み出したその監視結果に基づいて、呼び出された引数とは異なる引数によりオペレーティングシステム６０に対する関数呼び出しを実行し、または、当該関数呼び出しを実行しないでアプリケーションプログラム２１０に処理を戻す。
【００１９】
実際には、監視結果は、ＤＬＬ２４０により制御部２２０に戻り値などとして受け渡され、共有メモリ空間１５０からＤＬＬ２４０を経由して制御部２２０に受け渡されてもよい。即ちこの場合、制御部２２０は、判断部２３０中の関数を呼び出すことにより共有メモリ空間１５０から監視結果を取得して、取得したその監視結果に基づいて、アプリケーションプログラム２１０から呼び出された関数呼び出しを実行するか否かを判断してもよい。
【００２０】
判断部２３０は、共有メモリ空間１５０に記録された監視結果に基づいて、制御部２２０による関数呼び出しまたはメッセージの送受信を禁止すべきか否かを判断する。例えば、判断部２３０は、ポリシーマネージャ５０から取得した識別情報により識別されるアプリケーションプログラムが、予め定められた特定のアプリケーションプログラムであることを条件に、当該関数呼び出しまたはメッセージの送受信を禁止すると判断してもよい。
【００２１】
ポリシーマネージャ５０は、第１メモリ空間１００および第２メモリ空間２００とは異なるメモリ空間で動作し、記録部５５を有する。記録部５５は、アプリケーションプログラムの処理を制御するための各種の情報を記録する。ポリシーマネージャ５０は、記録部５５に記録された情報に基づいて、監視部１２０およびＤＬＬ１３０を制御する。例えば、記録部５５は、データのコピーを禁止するコピー元およびコピー先のアプリケーションプログラムの組を記録してもよい。そして、ポリシーマネージャ５０は、そのアプリケーションプログラムの組を示す情報を判断部２３０に提供する。
【００２２】
図２は、共有メモリ空間１５０のデータ構造の一例を示す。共有メモリ空間１５０は、本発明に係る共有メモリ空間の一例であると共に、本発明に係る制御メモリ空間としての役割を果たす。即ち、共有メモリ空間１５０に対しては、アプリケーションプログラム１１０およびアプリケーションプログラム２１０の何れもがアクセス可能であり、さらに、監視部１２０および制御部２２０の何れもがアクセス可能である。
【００２３】
具体的には、図２（ａ）に示すように、共有メモリ空間１５０は、アプリケーションプログラム１１０から取得したデータに対応付けて、監視部１２０による監視結果を格納する。例えば、監視部１２０は、アプリケーションプログラム１１０が共有メモリ空間１５０に対してデータを記録する関数呼び出しを検出したことに応じ、そのデータに対応付けて、アプリケーションプログラム１１０を識別する識別情報を監視結果として共有メモリ空間１５０に記録してもよい。この場合、共有メモリ空間１５０には、監視結果としてアプリケーションプログラム１１０の識別情報が記録される。ここでアプリケーションプログラムの識別情報とは、そのアプリケーションプログラムを他のアプリケーションプログラムから区別する番号である。例えば、ワードプロセッサの識別情報は「３４１５」番であり、コンピュータ支援設計（ＣＡＤ）のアプリケーションプログラムの識別情報は「３４３５」番である。
【００２４】
また、監視部１２０は、アプリケーションプログラム１１０が共有メモリ空間１５０に対してデータを記録する関数呼び出しを検出したことに応じ、そのデータに対応付けて、そのデータがアプリケーションプログラム１１０による記録されたことを認証させる電子署名を記録してもよいし、そのデータを暗号化してもよい。この場合、共有メモリ空間１５０には、監視結果としてその電子署名または暗号化されたデータが記録される。また、監視部１２０は、アプリケーションプログラム１１０が共有メモリ空間１５０に対してデータを記録する関数呼び出しを検出したことに応じ、そのデータに対応付けてその関数呼び出しの回数を記録してもよい。この場合、共有メモリ空間１５０には、監視結果としてその回数が記録される。関数呼び出しの回数とは、例えば、現在時刻から遡った所定の期間内にその関数が呼び出された回数である。例えば、過去の１５分間に１５回その関数が呼び出されていれば、その回数である１５が記録される。
【００２５】
また、監視部１２０は、アプリケーションプログラム１１０が共有メモリ空間１５０に対してデータを記録する関数呼び出しを検出したことに応じ、そのデータに対応付けてそのデータのサイズを記録してもよい。この場合、共有メモリ空間１５０には、監視結果としてそのデータのサイズが記録される。データのサイズとは、その関数呼び出しにより共有メモリ空間１５０に記録されるデータのサイズである。これに代えて、データのサイズとは、過去の予め定められた期間に複数回に渡って記録されたデータの合計サイズであってもよい。
【００２６】
更に、監視部１２０は、アプリケーションプログラム１１０が共有メモリ空間１５０に対してデータを記録する関数呼び出しを検出したことに応じ、そのデータに対して、そのデータがアプリケーションプログラム１１０からコピーされた旨を示す電子透かしを付加してもよい。これにより、このデータが他のアプリケーションプログラムにコピーされた場合であっても、そのデータの出所を知ることができる。
【００２７】
また、図２（ｂ）に示すように、共有メモリ空間１５０は、オペレーティングシステム６０上で現在起動中のアプリケーションプログラムの識別情報を記録してもよい。この識別情報は、後述の監視部３２０によって管理される。例えば、監視部３２０は、アプリケーションプログラムを起動させる関数の呼び出しを検出して、当該関数によって起動されるアプリケーションプログラムの識別情報を監視結果として共有メモリ空間１５０に記録してもよい。また、監視部３２０は、アプリケーションプログラムを終了させる関数の呼び出しを検出して、当該関数によって終了されるアプリケーションプログラムの識別情報を当該監視結果から削除してもよい。
【００２８】
なお、共有メモリ空間１５０は、上記各種の監視結果をファイルとして記録してもよいし、変数の数値といったデータとして記録してもよい。また、共有メモリ空間１５０は、監視結果をデータのファイルに含めて記録してもよい。また、共有メモリ空間１５０は、アプリケーションプログラム１１０および監視部１２０の何れからもアクセス可能な領域であればよく、メインメモリのみならずハードディスクドライブや光磁気ディスクなどの記録媒体に設けられてもよい。
【００２９】
図３は、記録部５５のデータ構造の一例を示す。図３（ａ）に示すように、記録部５５は、データのコピーを禁止するコピー元およびコピー先のアプリケーションプログラムの組を記録している。即ち図３（ｂ）に示すように、識別情報が３４１２のＣＡＤツール１から、識別情報が１５６４のメーラー１へのデータのコピーは禁止される（図中の矢印を参照。）。一方で、識別番号３４１５のワードプロセッサから、識別番号が１５６４のメーラー１へのデータのコピーは許可される。
【００３０】
図４は、情報処理装置１０が更に動作させるプログラムの構成を示す。情報処理装置１０は、アプリケーション起動用プログラム３１０、監視部３２０、ＤＬＬ３３０、および、変更部３４０を更に動作させる。変更部３４０は、アプリケーション起動用プログラム３１０からＤＬＬ３３０に対する関数呼び出しの呼び出し先アドレスを、監視部３２０を実現する監視プログラムのアドレスに変更する。アプリケーション起動用プログラム３１０は、他のアプリケーションプログラムを起動させる起動プログラムである。アプリケーション起動用プログラム３１０は、利用者からアプリケーションプログラムの起動を指示されたことに応じ、アプリケーションプログラムを起動するためのオペレーティングシステム６０中の関数を呼び出す。この関数は、オペレーティングシステム６０中のＤＬＬ３３０により提供される。
【００３１】
監視部３２０は、アプリケーションプログラムを起動させる関数の呼び出しを検出して、当該関数によって起動されるアプリケーションプログラムの識別情報を監視結果として共有メモリ空間１５０に記録する。具体的には、監視部３２０は、アプリケーション起動用プログラム３１０から呼び出されて処理を開始し、関数呼び出しの引数からその識別情報を取得して共有メモリ空間１５０に記録する。そして、監視部３２０は、その引数によりＤＬＬ３３０中の関数を呼び出す。ＤＬＬ３３０は、監視部３２０から呼び出されて処理を開始し、アプリケーションプログラムを起動させる。
【００３２】
また、好ましくは、情報処理装置１０は、スレッド制御用アプリケーション４１０、制御部４２０、判断部４３０、ＤＬＬ４４０、および、変更部４５０を動作させる。変更部４５０は、スレッド制御用アプリケーション４１０からＤＬＬ４４０に対する関数呼び出しの呼び出し先アドレスを、制御部４２０を実現する制御プログラムのアドレスに変更する。スレッド制御用アプリケーション４１０は、スレッドを制御するアプリケーションプログラムである。スレッド制御用アプリケーション４１０は、利用者からスレッドを制御する指示を受けたことに応じ、スレッドを制御するためのオペレーティングシステム６０中の関数を呼び出す。この関数は、オペレーティングシステム６０中のＤＬＬ４４０により提供される。
【００３３】
制御部４２０は、スレッド制御用アプリケーション４１０から何れかのスレッドを終了させるためにオペレーティングシステム６０上の関数を呼び出す処理を禁止する。具体的には、まず、制御部４２０は、スレッド制御用アプリケーション４１０から呼び出されて処理を開始する。そして、判断部４３０は、スレッド制御用アプリケーション４１０から制御部４２０を呼び出す関数呼び出しが、変更プログラムを実現するスレッドを終了させる処理の呼び出しか否かを判断する。当該スレッドを終了させる処理の呼び出しであることを条件に、制御部４２０は、ＤＬＬ４４０を呼び出すことなくスレッド制御用アプリケーション４１０に処理を戻す。
【００３４】
これにより、変更部１４０、変更部２５０、変更部３４０、および、変更部４５０を実現するスレッドが終了してしまうことを防ぐことができる。
【００３５】
図５は、情報処理装置１０の全体動作を示すフローチャートである。情報処理装置１０は、監視プログラムおよび制御プログラムなどの、各種のプログラムをメモリ空間にロードする（Ｓ５００）。具体的には、情報処理装置１０は、アプリケーションプログラム１１０からオペレーティングシステム６０に対する関数呼び出しを監視させる監視プログラムを、アプリケーションプログラム１１０と共に第１メモリ空間１００で動作させる。この監視プログラムによって、情報処理装置１０は監視部１２０として機能する。また、情報処理装置１０は、監視プログラムによる監視結果に基づいてアプリケーションプログラム２１０からオペレーティングシステム６０に対する関数呼び出しを禁止または変更させる制御プログラムを、アプリケーションプログラム２１０と共に第２メモリ空間２００で動作させる。この制御プログラムによって、情報処理装置１０は制御部２２０として機能する。また、情報処理装置１０は、アプリケーション起動用プログラム３１０からオペレーティングシステム６０に対する関数呼び出しを監視させる監視プログラムを動作させてもよい。更に、情報処理装置１０は、スレッド制御用アプリケーション４１０からオペレーティングシステム６０に対する関数呼び出しを制御する制御プログラムを動作させてもよい。
【００３６】
制御プログラムおよび監視プログラムをメモリ空間にロードさせるためには、例えば、これらのプログラムのオブジェクトファイル（例えば、ＤＬＬ）を、オペレーティングシステム標準のＤＬＬとして登録すればよい。一例として、Windows(登録商標)においては、これらのプログラムをUSER32拡張DLLとしてレジストリに登録することにより、USER32.DLLをリンクする全てのプロセスのスタートアップ時にこれらのプログラムをロードさせることができる。本実施例においては、例えば、ポリシーマネージャ５０が、これらのプログラムをUSER32拡張DLLとしてレジストリに登録してもよい。また、システム管理者が手動でレジストリを変更してもよい。
【００３７】
次に、情報処理装置１０は、変更プログラムを動作させる（Ｓ５１０）。変更プログラムによって情報処理装置１０は変更部１４０、変更部２５０、変更部３４０、および、変更部４５０として機能する。変更部１４０は、アプリケーションプログラム１１０からオペレーティングシステム６０に対する関数呼び出しの呼び出し先アドレスを、監視部１２０を実現する監視プログラムのアドレスに変更する。変更部２５０は、アプリケーションプログラム２１０の動作開始に応じ、アプリケーションプログラム２１０からオペレーティングシステム６０に対する関数呼び出しの呼び出し先アドレスを、制御部２２０を実現する制御プログラムのアドレスに変更する。変更部３４０は、アプリケーション起動用プログラム３１０からＤＬＬ３３０に対する関数呼び出しの呼び出し先アドレスを、監視部３２０を実現する監視プログラムのアドレスに変更する。変更部４５０は、スレッド制御用アプリケーション４１０からＤＬＬ４４０に対する関数呼び出しの呼び出し先アドレスを、制御部４２０を実現する制御プログラムのアドレスに変更する。
【００３８】
変更部１４０、変更部２５０、変更部３４０、および、変更部４５０を代表して変更部１４０について、関数呼び出しの呼び出し先アドレスを変更する処理の一例を説明する。変更部１４０は、ＤＬＬ１３０におけるアプリケーションプログラム１１０から呼び出される部分の先頭の命令コードを、他の領域にバックアップしておく。そして、変更部１４０は、当該命令コードを、監視部１２０を実現する監視プログラムへのジャンプ命令に書き換える。更に、変更部１４０は、監視部１２０からＤＬＬ１３０を呼び出す処理に代えて、バックアップした当該先頭の命令コードを監視部１２０から呼び出させる。これらの処理は、この処理が進行中の過渡状態で命令コードが実行されないようにするために、他のスレッドを停止して行うことが望ましい。
【００３９】
続いて、アプリケーションプログラム１１０がクリップボードを経由してデータをアプリケーションプログラム２１０にコピーする処理を例として、情報処理装置１０の処理の詳細を説明する。この処理は、アプリケーションプログラム１１０がクリップボードにデータを記録する第１下位機能、および、アプリケーションプログラム２１０がクリップボードからデータを読み出す第２下位機能の組み合わせによって実現される。まず、アプリケーションプログラム１１０は、この第１下位機能の実現のために、オペレーティングシステム６０のＤＬＬを呼び出す。まず、この処理について説明する。
【００４０】
図６は、アプリケーションプログラム１１０および監視部１２０のフローチャートである。監視部１２０は、アプリケーションプログラム１１０から呼び出されて処理を開始すると、アプリケーションプログラム１１０による関数呼び出しが、データを共有メモリ空間１５０にコピーするコピー用関数の関数呼び出しか否かを判断する（Ｓ６００）。コピー用関数の関数呼び出しであることを条件に（Ｓ６００：ＹＥＳ）、監視部１２０は、コピーする対象のデータに各種の属性を付加する。例えば、監視部１２０は、そのデータがアプリケーションプログラム１１０からコピーされた旨を示す電子透かしを付加してもよい。
【００４１】
そして、監視部１２０は、アプリケーションプログラム１１０から呼び出された引数に基づいてＤＬＬ１３０中のＡＰＩを呼び出す（Ｓ６２０）。例えば、監視部１２０は、アプリケーションプログラム１１０から引数として指定されたデータに、アプリケーションプログラム１１０の識別情報を対応付けて新たなデータを生成し、そのデータを引数としてＤＬＬ１３０中の関数に渡してもよい。
【００４２】
次に、アプリケーションプログラム２１０は、第２下位機能の実現のために、オペレーティングシステム６０のＤＬＬを呼び出す。次に、この処理について説明する。
図７は、アプリケーションプログラム２１０、制御部２２０、および、判断部２３０のフローチャートである。制御部２２０は、アプリケーションプログラム２１０が共有メモリ空間１５０からデータを読み出す関数の関数呼び出しを検出したことに応じ、判断部２３０による判断に基づいて、当該関数呼び出しの処理を変更または禁止する。以下、具体例を述べる。制御部２２０は、アプリケーションプログラム２１０から呼び出されて処理を開始すると、その関数呼び出しが、アプリケーションプログラム２１０が共有メモリ空間１５０からデータを読み出す関数（以下、ペースト用関数）の関数呼び出しか否かを判断する（Ｓ７００）。
【００４３】
ペースト用関数の関数呼び出しであれば、アプリケーションプログラム１１０および２１０により実現される第１および第２下位機能の組み合わせが所定の組み合わせであることが判明する。即ち、アプリケーションプログラム１１０および２１０により実現される機能が、クリップボードにデータを記録する第１下位機能と、クリップボードからデータを読み出す第２下位機能との組み合わせであると分かる。このため、ペースト用関数の関数呼び出しであれば（Ｓ７００：ＹＥＳ）、制御部２２０は、判断部２３０を呼び出して、当該関数を実行してもよいかを判断させる。判断部２３０は、共有メモリ空間１５０に記録されているデータが、コピーを禁止する対象となるデータの条件を満たすことを条件に、当該データのコピーを禁止すると判断する（Ｓ７１０）。
【００４４】
続いて、制御部２２０は、判断部２３０による判断に基づいて、アプリケーションプログラム２１０が共有メモリ空間１５０からデータを読み出す関数呼び出しの処理を変更または禁止する。具体的には、関数呼び出しを禁止する条件が成立した場合には（Ｓ７２０：ＹＥＳ）、制御部２２０は、アプリケーションプログラム２１０が共有メモリ空間１５０からデータを読み出す処理を禁止し、または、変更する（Ｓ７３０）。例えば、制御部２２０は、ＤＬＬ２４０中の関数を呼び出すことなくエラーコードをアプリケーションプログラム２１０に返してもよい。または、制御部２２０は、ＤＬＬ２４０中の関数を呼び出すことなく空のデータをアプリケーションプログラム２１０に返してもよい。
【００４５】
一方で、ペースト用関数の関数呼び出しでないか、または、関数呼び出しを禁止する条件が成立しなかった場合には（Ｓ７２０：ＮＯ）、制御部２２０は、アプリケーションプログラム２１０が共有メモリ空間１５０からデータを読み出す処理を続行させる（Ｓ７４０）。例えば、制御部２２０は、アプリケーションプログラム２１０から指定された引数をそのまま引数として指定してＤＬＬ２４０中の関数を呼び出してもよい。
【００４６】
図８は、Ｓ７１０における処理の詳細を示すフローチャートである（２図のうち１図目）。判断部２３０は、共有メモリ空間１５０から取得した識別情報により識別されるアプリケーションプログラム１１０と、監視部１２０との組が、記録部５５に記録されたアプリケーションプログラムの組に一致するか否かを判断する（Ｓ８００）。一致することを条件に（Ｓ８００：ＹＥＳ）、アプリケーションプログラム１１０および監視部１２０間でデータのコピーを禁止すると判断する（Ｓ８４０）。これにより、例えば、ＣＡＤツールのような膨大なデータを大量に取り扱うアプリケーションプログラムから、メーラーのような外部と通信するアプリケーションプログラムへのコピーを禁止することができる。
【００４７】
また、判断部２３０は、共有メモリ空間１５０から取得した、起動中のアプリケーションプログラムを示す識別情報により識別されるアプリケーションプログラムが、予め定められた特定のアプリケーションプログラムであることを条件に（Ｓ８１０：ＹＥＳ）、共有メモリ空間１５０に記録されたデータのアプリケーションプログラム２１０へのコピーを禁止すると判断する（Ｓ８４０）。例えば、外部の装置と通信するメーラーのようなアプリケーションプログラムが起動中である場合には、一切のコピーを禁止することができる。
【００４８】
また、判断部２３０は、共有メモリ空間１５０に記録されているデータが、コピーを禁止する対象となる特定の文字列を含むことを条件に（Ｓ８２０：ＹＥＳ）、共有メモリ空間１５０に記録されたデータのアプリケーションプログラム２１０へのコピーを禁止すると判断する（Ｓ８４０）。例えば、「機密」や「秘密」などの文字列を含む場合には、他者への漏洩を防ぐ必要があると判断してコピーが禁止される。
【００４９】
また、判断部２３０は、共有メモリ空間１５０に記録されているデータが、コピーを禁止する対象とするデータの種類の条件を満たすことを条件に（Ｓ８３０：ＹＥＳ）、当該データのコピーを禁止すると判断する（Ｓ８４０）。例えば、まず、判断部２３０は、共有メモリ空間１５０に記録されているデータのファイル形式に基づいて、そのデータの種類を判断する。判断部２３０は、例えば、そのファイルの拡張子が「ｄｏｃ」などであれば、そのファイルはドキュメントを格納していると判断してもよい。
【００５０】
そして、判断部２３０は、判断したデータの種類が、予め定められた特定の種類であることを条件に、当該データのコピーを禁止すると判断する。例えば、そのデータが、ＣＡＤツールによる設計情報等の機密性の高い情報であることを条件に、判断部２３０は、そのデータのコピーを禁止すると判断してもよい。
【００５１】
図９は、Ｓ７１０における処理の詳細を示すフローチャートである（２図のうち２図目）。判断部２３０は、そのデータが所定の電子透かしを含まないことを条件に（Ｓ９００：ＮＯ）、そのデータのコピーを禁止すると判断する（Ｓ９４０）。これにより、電子透かしを付加する特定のアプリケーション以外からのデータのコピーを禁止し、また、出所不明のデータ（例えば、コンピュータウィルスなど）によってアプリケーションプログラム２１０の動作が妨害されることを防ぐことができる。
【００５２】
また、判断部２３０は、共有メモリ空間１５０に記録された電子署名を認証する（Ｓ９１０）。共有メモリ空間１５０に記録されたデータが暗号化されている場合には、判断部２３０は、そのデータを復号化してもよい。認証または復号化に失敗したことを条件に（Ｓ９１０：ＮＯ）、判断部２３０は、当該電子署名に対応して記録されたデータのコピーを禁止すると判断する（Ｓ９４０）。判断部２３０による認証が成功したことを条件に（Ｓ９００：ＹＥＳ）、以降の他の条件が成立しなければ、制御部２２０は、アプリケーションプログラム２１０による関数呼び出しを許可する。例えばこれにより、アプリケーションプログラム２１０は共有メモリ空間１５０からデータを読み出すことができる。
【００５３】
また、判断部２３０は、データを共有メモリ空間１５０に記録する関数呼び出しの回数が予め定められた基準を超えたことを条件に（Ｓ９２０：ＹＥＳ）、そのデータのコピーを禁止すると判断する（Ｓ９４０）。また、判断部２３０は、共有メモリ空間１５０に記録されたデータのサイズが予め定められた基準を超えたことを条件に（Ｓ９３０：ＹＥＳ）、そのデータのコピーを禁止すると判断する（Ｓ９４０）。これにより、コピーされるデータの量を制限して、情報漏洩のリスクを低減できる。
【００５４】
以上の何れの条件も満たさない場合には（Ｓ９３０：ＮＯ）、判断部２３０は、共有メモリ空間１５０に記録されたデータのコピーを禁止するための条件を満たさないと判断し（Ｓ９５０）、当該データのコピーを許可する。
【００５５】
以上、本図の処理によれば、オペレーティングシステムを改造することなく、アプリケーションプログラム間のデータのコピーを細かく制御することができる。これにより、機密データの漏洩を未然に防止し、また、システムの安全性を高めることができる。なお、本図の処理は一例であり、データのコピーを禁止する条件はポリシーマネージャ５０により変更されてもよい。即ち、システム管理者は、ポリシーマネージャ５０を操作することによって、情報処理装置１０におけるアプリケーションプログラムの動作を制御することができる。
【００５６】
図１０は、アプリケーション起動用プログラム３１０および監視部３２０のフローチャートである。監視部３２０は、アプリケーション起動用プログラム３１０から呼び出されて処理を開始すると、アプリケーション起動用プログラム３１０による関数呼び出しが、他のアプリケーションプログラムを起動する関数（以降、起動用関数）の関数呼び出しか否かを判断する（Ｓ１０００）。起動用関数の関数呼び出しであることを条件に（Ｓ１０００：ＹＥＳ）、監視部３２０は、その関数呼び出しにより起動されるアプリケーションプログラムの識別情報を共有メモリ空間１５０に記録する（Ｓ１０１０）。
【００５７】
また、監視部３２０は、アプリケーション起動用プログラム３１０による関数呼び出しが、他のアプリケーションプログラムを終了させる関数（以降、終了用関数）の関数呼び出しか否かを判断する（Ｓ１０２０）。終了用関数の関数呼び出しであることを条件に（Ｓ１０２０：ＹＥＳ）、その関数呼び出しにより終了されるアプリケーションプログラムの識別情報を共有メモリ空間１５０から削除する（Ｓ１０３０）。そして、監視部３２０は、ＤＬＬ３３０を呼び出してアプリケーションプログラムを実際に制御する（Ｓ１０４０）。
【００５８】
ここで、オペレーティングシステム６０は、アプリケーションプログラムを終了させる方法の違いによって、複数の終了用関数を提供する。このため、起動中のアプリケーションプログラムを適切に管理するためには、何れの終了用関数によってアプリケーションプログラムが終了する場合であってもそれが終了したことを検出できなければならない。したがって、監視部３２０は、終了用関数に代えて、何れの終了用関数が呼び出された場合であってもその終了用関数に呼び出される特定の関数を監視してもよい。この特定の関数は、例えば、アプリケーションプログラムによって読み込まれたＤＬＬをメモリ空間から開放する関数である。この関数の呼び出しを監視することで、起動中のアプリケーションプログラムを正しく管理することができる。
【００５９】
図１１は、スレッド制御用アプリケーション４１０、制御部４２０および判断部４３０のフローチャートである。制御部４２０は、スレッド制御用アプリケーション４１０から呼び出された処理を開始すると、スレッド制御用アプリケーション４１０による関数呼び出しが、他のスレッドを終了させる関数の関数呼び出しか否かを判断する（Ｓ１１００）。他のスレッドを終了させる関数の関数呼び出しであることを条件に（Ｓ１１００：ＹＥＳ）、制御部４２０は、その関数の処理を変更し、または禁止する（Ｓ１１１０）。例えば、制御部４２０は、スレッドを終了させることなく、スレッド制御用アプリケーション４１０にエラーコードを返してもよい。
【００６０】
図１２は、変形例における情報処理装置１０の構成を示す。本変形例において、アプリケーションプログラム１１０は、本発明に係る第１記録部の一例である記録部１１５を有する。Windows(登録商標)オペレーティングシステムにおいては、例えば、記録部１１５は、インポートアドレステーブルと呼ばれている。記録部１１５は、アプリケーションプログラム１１０から関数呼び出しの毎に参照され、各々の関数の識別情報に当該関数の呼び出し先アドレスを対応付けて記録している。即ち例えば、アプリケーションプログラム１１０は、ある関数を呼び出す場合に、その関数の識別情報によりその関数の呼び出し先アドレスを記録部１１５から検索する。そして、検索された呼び出し先アドレスに処理を移すことによりその関数を呼び出す。また、同様に、第２メモリ空間２００は、記録部２１５を有する。記録部２１５は、アプリケーションプログラム２１０から参照される呼び出し先アドレスを記録している。
【００６１】
また、本変形例における変更部１４０は、記録部１１５を書き換えることにより関数の呼び出し先を変更する。具体的には、変更部１４０は、処理内容を監視する対象として予め設定された関数に対応して記録部１１５に記録された呼び出し先アドレスを、監視部１２０を実現する監視プログラムのアドレスに変更する。同様に、本変形例における変更部２５０は、処理を制御する対象として予め設定された関数に対応して記録部２１５に記録された呼び出し先アドレスを、制御部２２０を実現する制御プログラムのアドレスに変更する。なお、他の構成については、図１に示した同一符号の各部材と略同一であるので説明を省略する。
このように、本変形例に示した構成によっても、アプリケーションプログラムからオペレーティングシステムへの関数呼び出しを監視し、または、制御することができる。
【００６２】
図１３は、情報処理装置１０のハードウェア構成の一例を示す。情報処理装置１０は、ホストコントローラ１０８２により相互に接続されるＣＰＵ１０００、ＲＡＭ１０２０、及びグラフィックコントローラ１０７５を有するＣＰＵ周辺部と、入出力コントローラ１０８４によりホストコントローラ１０８２に接続される通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を有する入出力部と、入出力コントローラ１０８４に接続されるＢＩＯＳ１０１０、フレキシブルディスクドライブ１０５０、及び入出力チップ１０７０を有するレガシー入出力部とを備える。
【００６３】
ホストコントローラ１０８２は、ＲＡＭ１０２０と、高い転送レートでＲＡＭ１０２０をアクセスするＣＰＵ１０００及びグラフィックコントローラ１０７５とを接続する。ＣＰＵ１０００は、ＢＩＯＳ１０１０及びＲＡＭ１０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ１０７５は、ＣＰＵ１０００等がＲＡＭ１０２０内に設けたフレームバッファ上に生成する画像データを取得し、表示装置１０８０上に表示させる。これに代えて、グラフィックコントローラ１０７５は、ＣＰＵ１０００等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
【００６４】
入出力コントローラ１０８４は、ホストコントローラ１０８２と、比較的高速な入出力装置である通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を接続する。通信インターフェイス１０３０は、ネットワークを介して外部の装置と通信する。ハードディスクドライブ１０４０は、情報処理装置１０が使用するプログラム及びデータを格納する。ＣＤ−ＲＯＭドライブ１０６０は、ＣＤ−ＲＯＭ１０９５からプログラム又はデータを読み取り、ＲＡＭ１０２０又はハードディスクドライブ１０４０に提供する。
【００６５】
また、ＲＡＭ１０２０は、第１メモリ空間１００、第２メモリ空間２００、および、共有メモリ空間１５０を含む。即ち、アプリケーションプログラム１１０は、ＲＡＭ１０２０中の第１メモリ空間１００に読み出されてＣＰＵ１０００により実行される。また、アプリケーションプログラム２１０は、ＲＡＭ１０２０中の第２メモリ空間２００に読み出されてＣＰＵ１０００により実行される。また、アプリケーションプログラム１１０は、ＣＰＵ１０００により実行されてデータを生成し、ＲＡＭ１０２０中の共有メモリ空間１５０にそのデータを記録する。
【００６６】
また、入出力コントローラ１０８４には、ＢＩＯＳ１０１０と、フレキシブルディスクドライブ１０５０や入出力チップ１０７０等の比較的低速な入出力装置とが接続される。ＢＩＯＳ１０１０は、情報処理装置１０の起動時にＣＰＵ１０００が実行するブートプログラムや、情報処理装置１０のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ１０５０は、フレキシブルディスク１０９０からプログラム又はデータを読み取り、入出力チップ１０７０を介してＲＡＭ１０２０またはハードディスクドライブ１０４０に提供する。入出力チップ１０７０は、フレキシブルディスク１０９０や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
【００６７】
情報処理装置１０に提供されるプログラムは、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力チップ１０７０及び/又は入出力コントローラ１０８４を介して、記録媒体から読み出され情報処理装置１０にインストールされて実行される。プログラムが情報処理装置１０等に働きかけて行わせる動作は、図１から図１２において説明した情報処理装置１０における動作と同一であるから、説明を省略する。
【００６８】
以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５の他に、ＤＶＤやＰＤ等の光学記録媒体、ＭＤ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムを情報処理装置１０に提供してもよい。
【００６９】
図１４は、表示部１０８０の表示例を示す。本図に示すように、制御部２２０によりデータのコピーが禁止された場合に、情報処理装置１０は、その旨のメッセージやシンボルを表示部１０８０中のアプリケーションプログラム２１０の操作画面上に表示する。例えば、情報処理装置１０は、「コピーが禁止されています」というメッセージを、アプリケーションプログラム２１０の操作画面であるウィンドウ上にポップアップ表示してもよい。このメッセージは、アプリケーションプログラム２１０に予め用意されたエラーメッセージであってもよい。即ちこのような表示は、制御部２２０が単にエラーコードをアプリケーションプログラム２１０に返すのみにより、既存のアプリケーションプログラム２１０を改変することなく実現できる。
【００７０】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【００７１】
【図１】図１は、情報処理装置１０の構成を示す。
【図２】図２は、共有メモリ空間１５０のデータ構造の一例を示す。
【図３】図３は、記録部５５のデータ構造の一例を示す。
【図４】図４は、情報処理装置１０が更に動作させるプログラムの構成を示す。
【図５】図５は、情報処理装置１０の全体動作を示すフローチャートである。
【図６】図６は、アプリケーションプログラム１１０および監視部１２０のフローチャートである。
【図７】図７は、アプリケーションプログラム２１０、制御部２２０、および、判断部２３０のフローチャートである。
【図８】図８は、Ｓ７１０における処理の詳細を示すフローチャートである（２図のうち１図目）。
【図９】図９は、Ｓ７１０における処理の詳細を示すフローチャートである（２図のうち２図目）。
【図１０】図１０は、アプリケーション起動用プログラム３１０および監視部３２０のフローチャートである。
【図１１】図１１は、スレッド制御用アプリケーション４１０、制御部４２０および判断部４３０のフローチャートである。
【図１２】図１２は、変形例における情報処理装置１０の構成を示す。
【図１３】図１３は、情報処理装置１０のハードウェア構成の一例を示す。
【図１４】図１４は、表示部１０８０の表示例を示す。
【符号の説明】
【００７２】
１０  情報処理装置
５０  ポリシーマネージャ
５５  記録部
６０  オペレーティングシステム
１００  第１メモリ空間
１１０  アプリケーションプログラム
１１５  記録部
１２０  監視部
１３０  ＤＬＬ
１４０  変更部
１５０  共有メモリ空間
２００  第２メモリ空間
２１０  アプリケーションプログラム
２１５  記録部
２２０  制御部
２３０  判断部
２４０  ＤＬＬ
２５０  変更部
３００  第３メモリ空間
３１０  アプリケーション起動用プログラム
３２０  監視部
３３０  ＤＬＬ
３４０  変更部
４００  第４メモリ空間
４１０  スレッド制御用アプリケーション
４２０  制御部
４３０  判断部
４４０  ＤＬＬ
４５０  変更部
１０８０  表示部
【図１】
2007065846.tif 000003
【図２】
2007065846.tif 000004
【図３】
2007065846.tif 000005
【図４】
2007065846.tif 000006
【図５】
2007065846.tif 000007
【図６】
2007065846.tif 000008
【図７】
2007065846.tif 000009
【図８】
2007065846.tif 000010
【図９】
2007065846.tif 000011
【図１０】
2007065846.tif 000012
【図１１】
2007065846.tif 000013
【図１２】
2007065846.tif 000014
【図１３】
2007065846.tif 000015
【図１４】
2007065846.tif 000016