(57)【特許請求の範囲】
【請求項１】
周辺装置と通信を行うための通信用チャネルを、所定のＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）に準拠した複数のプログラム間で排他制御するＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を有する情報処理装置であって、
前記所定のＡＰＩに準拠した要求に従って起動し、前記周辺装置と前記通信用チャネルを介して通信する、前記周辺装置用の第１のデバイスドライバと、
前記所定のＡＰＩに準拠しない要求に従って起動し、前記周辺装置と前記通信用チャネルを介して通信する、前記周辺装置用の第２のデバイスドライバと、
前記周辺装置と前記通信用チャネルを介して通信する通信プログラムと、
前記第２のデバイスドライバが前記所定のＡＰＩに準拠しない要求に従って起動指示されたときに、前記通信プログラムが前記通信用チャネルを使用している場合、前記第１のデバイスドライバを起動させることにより前記通信プログラムが使用している前記通信用チャネルを前記ＯＳの排他制御によりクローズさせ、前記第２のデバイスドライバが前記通信用チャネルを使用可能にする制御手段とを有することを特徴とする情報処理装置。
【請求項２】
前記第１のデバイスドライバの起動指示が可能なアプリケーションを有し、
前記制御手段は、前記第２のデバイスドライバが前記所定のＡＰＩに準拠しない要求に従って起動指示されたときに、前記アプリケーションを起動させることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第１のデバイスドライバは、受け付けた起動指示の送信元を判定する判定手段を有し、
前記第１のデバイスドライバは、前記判定手段により、受け付けた起動指示の送信元が所定のアプリケーションであると判定された場合、当該起動指示に従い起動する際、前記通信用チャネルのオープンを行わないことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記制御手段は、前記第２のデバイスドライバが前記所定のＡＰＩに準拠しない要求に従って起動指示されたときに、前記第１のデバイスドライバに対し、前記通信用チャネルを一旦オープンさせた後、クローズさせるよう指示することを特徴とする請求項１に記載の情報処理装置。
【請求項５】
前記所定のＡＰＩは、ＴＷＡＩＮ（Ｔｏｏｌ  Ｗｉｔｈｏｕｔ  Ａｎ  Ｉｎｔｅｒｒｅｓｔｉｎｇ  Ｎａｍｅ）であることを特徴とする請求項１〜４のいずれか１項に記載の情報処理装置。
【請求項６】
前記通信プログラムは、前記周辺装置における操作を監視するプログラムであることを特徴とする請求項１〜５のいずれか１項に記載の情報処理装置。
【請求項７】
周辺装置と通信を行うための通信用チャネルを、所定のＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）に準拠した複数のプログラム間で排他制御するＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）と、前記所定のＡＰＩに準拠した要求に従って起動し、前記周辺装置と前記通信用チャネルを介して通信する、前記周辺装置用の第１のデバイスドライバと、前記所定のＡＰＩに準拠しない要求に従って起動し、前記周辺装置と前記通信用チャネルを介して通信する、前記周辺装置用の第２のデバイスドライバと、前記周辺装置と前記通信用チャネルを介して通信する通信プログラムとを有する情報処理装置の制御方法であって、
前記第２のデバイスドライバが前記所定のＡＰＩに準拠しない要求に従って起動指示されたときに、前記通信プログラムが前記通信用チャネルを使用している場合、前記第１のデバイスドライバを起動させることにより前記通信プログラムが使用している前記通信用チャネルを前記ＯＳの排他制御によりクローズさせ、前記第２のデバイスドライバが前記通信用チャネルを使用可能にすることを特徴とする情報処理装置の制御方法。
【請求項８】
コンピュータを、請求項１〜６のいずれか１項に記載の情報処理装置として機能させる、または請求項７に記載の制御方法をコンピュータにより実現することを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、周辺装置を制御する情報処理装置、その制御方法およびプログラムに関する。
【背景技術】
【０００２】
従来、周辺装置の一つとして画像読取装置（スキャナ専用機や、さらにプリンタ等を備えたマルチファンクションペリフェラルなど）が知られている。このような周辺装置としての画像読取装置は、コンピュータ等の情報処理装置にインストールされているスキャナドライバからの指示で画像の読み取りを行う。また、このような画像読取装置において、画像読取装置に設けた操作部から読み取りの指示を行って画像の読み取りを開始させ、情報処理装置に読取画像を転送する技術が知られている（特許文献１参照）。
【０００３】
このように画像読取装置の操作部からユーザが読取指示を行ったことを情報処理装置側で検知するために、情報処理装置においてスキャナ等の画像入力装置のボタンイベントを監視するボタン監視プログラムを用いるものがある。そして、ボタン監視プログラムが画像読取装置からの読取開始を指示するボタンが操作されたというイベントを検知すると、次のようにして画像の読み取りを実行させ、画像を読み取って得た画像データを情報処理装置において取得する。ボタン監視プログラムがイベントを検知すると、まず所定のアプリケーションを呼び出す。このアプリケーションはボタン押下時に起動するアプリケーションとして登録されているものである。そして、このアプリケーションが、例えばＴＷＡＩＮ（Ｔｏｏｌ  Ｗｉｔｈｏｕｔ  Ａｎ  Ｉｎｔｅｒｒｅｓｔｉｎｇ  Ｎａｍｅ）規格に準拠したスキャナドライバ（ＴＷＡＩＮドライバ）を呼び出して画像読取装置による画像の読み取りを実行させる。そして、このＴＷＡＩＮドライバによる読み取りによって得た画像データをアプリケーションが取得する。
【０００４】
この場合、画像読取装置と情報処理装置との間では、イベントの検知のための通信と画像データの通信とが行われる。ここで、情報処理装置のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）によっては、ボタン監視プログラムとスキャナドライバとが同時に通信用のチャネルを確保できる仕組みが提供されていない場合がある。そのため、このような場合はボタン監視プログラムとスキャナドライバとの間で通信用のチャネルを排他制御する必要がある。即ち、ＯＳは、スキャナドライバが画像データの取得を行う前にボタン監視プログラムが使用している通信用チャネルをクローズさせてからスキャナドライバのための通信用チャネルをオープンさせることになる。このとき、ＯＳは、所定の箇所に記録されている、ボタン監視プログラムに対応付けられた画像読取装置を特定する情報（デバイス情報）と、スキャナドライバに対応付けられたデバイス情報とを参照し、これらが一致した場合、このような排他制御を行う。なお、スキャナドライバは上記のようなボタン監視プログラムを経由させて起動されるほか、ユーザがスキャナドライバを直接操作して画像読取装置に画像の読み取りを実行させることもある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１１−３５５４８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、例えば、既にスキャナドライバとボタン監視プログラムとが存在している情報処理装置に新たにスキャナドライバをインストールし、この新たなスキャナドライバを起動させて画像読取装置に画像の読み取りを実行させることがある。そして、この新たなスキャナドライバを起動させて画像読取装置に画像の読み取りを実行させる場合、既に起動しているボタン監視プログラムが使用している通信用チャネルをクローズさせる必要がある。
【０００７】
しかしながら、例えば、新たなスキャナドライバが上記したようなＴＷＡＩＮ等の所定のＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）規格に準拠していないなど、ＯＳがデバイス情報を特定できない場合、上記排他制御が行えない。即ち、ＯＳは、新たなスキャナドライバが起動されても、所定の箇所にデバイス情報が記録されていない場合には、既に起動しているボタン監視プログラムが使用している通信用チャネルをクローズさせない。従って、所定のＡＰＩに準拠しない手順で起動されたスキャナドライバは読取処理を実行することができない。
【０００８】
このような課題は、画像読取装置以外の周辺装置でも生じ得る。即ち、複数のプログラムの間で使用する通信用のチャネルの排他制御が必要であり、デバイスドライバの起動によって他のプログラムが使用している通信用チャネルをクローズさせる術のない状況下では同様の課題が生じ得る。
【０００９】
本発明は、上記課題に鑑みなされたもので、デバイスドライバの起動だけでは他のプログラムが使用している通信用チャネルをクローズさせることができない場合であっても適切に当該チャネルをクローズさせる仕組みを提供するものである。
【課題を解決するための手段】
【００１０】
上記課題を解決するため、本発明の情報処理装置は、周辺装置と通信を行うための通信用チャネルを、所定のＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）に準拠した複数のプログラム間で排他制御するＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を有する情報処理装置であって、前記所定のＡＰＩに準拠した要求に従って起動し、前記周辺装置と前記通信用チャネルを介して通信する、前記周辺装置用の第１のデバイスドライバと、前記所定のＡＰＩに準拠しない要求に従って起動し、前記周辺装置と前記通信用チャネルを介して通信する、前記周辺装置用の第２のデバイスドライバと、前記周辺装置と前記通信用チャネルを介して通信する通信プログラムと、前記第２のデバイスドライバが前記所定のＡＰＩに準拠しない要求に従って起動指示されたときに、前記通信プログラムが前記通信用チャネルを使用している場合、前記第１のデバイスドライバを起動させることにより前記通信プログラムが使用している前記通信用チャネルを前記ＯＳの排他制御によりクローズさせ、前記第２のデバイスドライバが前記通信用チャネルを使用可能にする制御手段とを有する。
【発明の効果】
【００１１】
本発明によれば、所定のＡＰＩに準拠しない手順でデバイスドライバが起動指示された場合、所定のＡＰＩに準拠した他のデバイスドライバの起動により、ＯＳの排他制御を利用して通信用チャネルをクローズさせることができる。
【図面の簡単な説明】
【００１２】
【図１】実施形態の画像読取システムを示すブロック図である。
【図２】コンピュータ２０のソフトウェア構成を示すブロック図である。
【図３】ボタン監視プログラム６０を利用した読取処理のシーケンスを示す図である。
【図４】デバイス制御プログラム７０を利用した読取処理のシーケンスを示す図である。
【図５】デバイス制御プログラム７０のＵＩ画面の例を示す図である。
【図６】コンピュータ２０のソフトウェア構成を示すブロック図である。
【図７】デバイス制御プログラム７０を利用した読取処理のシーケンスの第２の例を示す図である。
【図８】ＴＷＡＩＮドライバの処理の一部を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本発明を実施するための形態について図面を用いて説明する。なお、この実施の形態で用いる装置の各構成要素の全てが本発明に必須のものではなく、また、各構成要素の種々の変形や応用も可能である。即ち、本発明は以下の実施形態の特定の構成に限定されるものではない。
【００１４】
図１は、本発明の一実施の形態に係る情報処理装置の一例であるコンピュータ２０と、周辺装置の一例であるスキャナ１０とを含む画像読取システムの構成を示すブロック図である。
【００１５】
スキャナ１０は、ハードウェア資源として、ＵＳＢインターフェース１１、ＣＰＵ１２、ＲＯＭ１３、ＲＡＭ１４、スキャナエンジン１５、操作パネル１６を有する。ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）インターフェース１１は、ＵＳＢの規格に従ってコンピュータ２０との間でデータの送受信を行う。ＣＰＵ１２は、ＲＯＭ１３に記憶されているスキャナ１０の制御プログラムを、ＲＡＭ１４にロードし、それを実行することでスキャナ１０の動作を制御する。ＲＯＭ１３は制御プログラムのほか、スキャナ１０の動作に必要なパラメータ等も記憶する。ＲＡＭ１４はＣＰＵ１２のワークエリアとして使用されるほか、スキャナ１０の状態情報や画像データの一時記憶領域等としても使用される。
【００１６】
スキャナエンジン１５は、原稿に光を照射する光源やその反射光を読み取り、光電変換するＣＣＤカラーイメージセンサ等を含む。スキャナ１０の原稿台に置かれた原稿上をスキャナエンジン１５により走査させて原稿上の画像を読み取り、読み取られた画像に応じた画像データが生成される。操作パネル１６は、スキャナ１０の状態やユーザによる作業のためのメニューを表示する表示部と、ユーザが読取開始指示を含む種々の操作を行うハードキーを含む。操作パネル１６はタッチパネル等、他の形態としてもよい。
【００１７】
また、ここではスキャナ１０を、スキャナ専用機を例に示したが、これにプリンタなど他の機能をさらに付加したマルチファンクション機としてもよい。また、原稿上の画像を読み取る際、原稿台上に原稿を置いて走査するものとしたが、原稿搬送機構を設け、スキャナエンジン１５を固定させて、原稿の搬送により走査するようにしてもよい。また、スキャナ１０からの読み取り開始のための操作としては、操作パネル１６を用いるものに代え、読取対象の原稿がスキャナ１０にセットされたことを検知した場合に、それをコンピュータ２０に通知するものとしてもよい。また、スキャナ１０は、ＣＰＵ１２を持たないものとし、コンピュータ２０からの制御でスキャナエンジン１５を動作させるものとしてもよい。またカラースキャナに代えて、モノクロスキャナとしてもよいし、フィルムを読み取るフィルムスキャナとしてもよい。
【００１８】
コンピュータ２０は、ハードウェア資源として、ＵＳＢインターフェース２１、表示装置２２、入力装置２３、補助記憶装置２４、ＣＰＵ２５、ＲＯＭ２６、ＲＡＭ２７を有する。コンピュータ２０は、汎用的なパーソナルコンピュータを採用可能である。ＵＳＢインターフェース２１は、ＵＳＢ規格に従って周辺装置との間でデータの送受信を行う。表示装置２２は、コンピュータ２０にインストールされているソフトウェアに基づき、スキャナ１０を操作するための各種ユーザインターフェース（ＵＩ）など種々の情報を表示する。入力装置２３は、キーボード、ポインティングデバイス等で実現され、ユーザからの操作を示す情報を入力する。補助記憶装置２４は、内蔵又は外付けのハードディスク等で実現され、スキャナ１０の制御プログラムなどスキャナ１０の動作に関わる各種情報を記憶する。ＣＰＵ２５は、補助記憶装置２４やＲＯＭ２６に記憶されている各種プログラムを、ＲＡＭ２７にロードし、それを実行することでコンピュータ２０の動作を制御する。ＲＯＭ２６はコンピュータ２０を動作させるための各種プログラムや各種情報を記憶する。ＲＡＭ２７はＣＰＵ２５のワークエリアとして使用されるほか、各種情報を記憶する。
【００１９】
次に、図２を用いて、図１に示したコンピュータ２０においてソフトウェアによって実現される機能の構成を説明する。図２に示す各機能は、例えばＣＰＵ２５がＲＡＭ２７をワーク領域としてＲＯＭ２６や補助記憶装置２４に記憶された（インストールされた）プログラムを読み込み実行することで実現される。
【００２０】
コンピュータ２０の機能は、ＯＳ３０、アプリケーション４０、ＴＷＡＩＮドライバ５０、ボタン監視プログラム６０、デバイス制御プログラム７０、ＵＳＢインターフェース制御部８０に大きく分けられる。
【００２１】
ＯＳ３０は、コンピュータ２０の動作の基本的な部分を司り、表示装置２２への出力や入力装置２３からの入力の制御、補助記憶装置２４などの各種メモリの管理機能などを含む。また、ＯＳ３０は、ＴＷＡＩＮデータソースマネージャ（ＴＷＡＩＮ  ＤＳＭ）３１、ボタン監視プログラム制御部３２、アプリケーション起動制御部３３を備えている。
【００２２】
ＴＷＡＩＮ  ＤＳＭ３１は、アプリケーション４０、ＴＷＡＩＮドライバ５０を制御する。ＴＷＡＩＮ  ＤＳＭ３１は、ＴＷＡＩＮ規格に従ってアプリケーション４０とＴＷＡＩＮドライバ５０との通信を実現するＡＰＩである。ＴＷＡＩＮ  ＤＳＭ３１は、ＴＷＡＩＮドライバ５０の起動が指示されると、ボタン監視プログラム６０にクローズ要求を行う。ボタン監視プログラム制御部３２は、スキャナ１０などの周辺装置が操作されたかどうかを監視する監視プログラムがコンピュータ２０に存在する場合に、その監視プログラムの起動や終了を行う。アプリケーション起動制御部３３は、指定したアプリケーションを起動する機能を提供するＡＰＩにより実現される。
【００２３】
アプリケーション４０は、入力された画像データを処理するソフトウェアである。アプリケーション４０は、ＴＷＡＩＮ  ＤＳＭ３１を介してＴＷＡＩＮ規格に準拠したデータソース（スキャナドライバ）に指示して当該データソースから画像データを取得することが可能である。そして、取得した画像データを編集したり補正したりし、その結果を表示装置２２に表示させたり、画像ファイルとして補助記憶装置２４に記憶させたりする。また、アプリケーション４０としては、入力された画像データに含まれる文字情報を認識してそれを文字コードに変換する文字認識ソフト等もある。
【００２４】
ＴＷＡＩＮドライバ５０は、スキャナ１０を制御するためのコマンドの送信やスキャナ１０からの画像データの受信等の制御を行うスキャナドライバである。ＴＷＡＩＮドライバ５０におけるコマンドの送信や画像データの受信は、ＵＳＢインターフェース制御部８０を介して行われる。また、ＴＷＡＩＮドライバ５０は、画像読取装置を特定するためのデバイス情報と対応付けられるが、ここではスキャナ１０を示すデバイス情報と対応付けられているものとする。このスキャナ１０を示すデバイス情報はＴＷＡＩＮドライバ５０と関連付けられた所定のファイルに記録される。また、ＴＷＡＩＮドライバ５０は、ＴＷＡＩＮ通信制御部５１と、画像データ取得部５２とを含む。
【００２５】
ＴＷＡＩＮ通信制御部５１は、ＴＷＡＩＮドライバ５０とアプリケーション４０のＴＷＡＩＮ規格に準拠したコマンド群の授受を行う。ＴＷＡＩＮ通信制御部５１は、アプリケーション４０から読取解像度やカラーモード、原稿サイズ等の読取設定を受け付け、ＴＷＡＩＮドライバ５０に設定する。また、アプリケーション４０からの画像転送要求に対して、スキャナ１０が読み取った画像データがアプリケーション４０に転送されるよう制御する。この読取設定の情報や画像データの転送はＴＷＡＩＮ  ＤＳＭ３１を介して行われる。画像データ取得部５２は、スキャナ１０により読み取られた画像データを、ＵＳＢインターフェース制御部８０を介して取得する。画像データ取得部５２により取得された画像データは、ＲＡＭ２７に記憶された後、ＴＷＡＩＮ通信制御部５１の制御に従いアプリケーション４０に転送される。なお、ＴＷＡＩＮドライバ５０は、ＴＷＡＩＮ対応のアプリケーションからの指示に従った起動だけではなく、ユーザによる直接の操作でＴＷＡＩＮドライバ５０を起動させ、さらにユーザからの読み取り指示がなされた場合にも読み取り指示を行うことが可能である。
【００２６】
ボタン監視プログラム６０は、スキャナ１０を制御するためのコマンドの送信やスキャナ１０の状態を表すデータの受信等を行う。このコマンドの送信や状態を表すデータの受信は、ＵＳＢインターフェース制御部８０を介して行われる。また、ボタン監視プログラム６０は周辺装置を特定するためのデバイス情報と対応付けられるが、ここではスキャナ１０を示すデバイス情報と対応付けられているものとする。このスキャナ１０を示すデバイス情報はボタン監視プログラム６０と関連付けられた所定のファイルに記録される。なお、ここでのスキャナ１０の状態は、「ボタン」の押下等に限定されるものではなく、ユーザによる何らかの操作があったことを取得できるものであればよい。また、本実施形態では、ボタン監視プログラム６０はコンピュータ２０（補助記憶装置２４）内に複数同時に存在し得る。しかしながら、本実施形態のＯＳ３０は、ＵＳＢインターフェース２１を介して接続されたスキャナ１０の状態を監視するボタン監視プログラムとしてはいずれか１つのボタン監視プログラムのみを起動させる。以下では、ボタン監視プログラム６０は任意の１つのみが起動されるものとして説明する。
【００２７】
ボタン監視プログラム６０は、ＯＳ通信制御部６１とボタンイベント監視部６２とを有する。
【００２８】
ＯＳ通信制御部６１は、スキャナ１０がＵＳＢインターフェース２１を介して接続されたことをＯＳ３０が検知すると、所定の通信規格に準拠した手順でＵＳＢポートをオープンする（プラグ＆プレイ）。なお、ここでのＵＳＢポートとは、ＵＳＢインターフェース２１を介して通信するための論理的なチャネルのことを指す。このＵＳＢポートのオープンによりＵＳＢインターフェース２１を介して接続されているスキャナ１０と情報をやり取りするための転送用のパイプが確保される。そして、ここではスキャナ１０と通信を行うためのＵＳＢポートは１つのスキャナドライバまたは１つのボタン監視プログラムによって排他的に使用される。ここではスキャナ１０との接続開始時には、まずボタン監視プログラムが、スキャナ１０からのボタンイベントの監視のためにＵＳＢポートを使用する。もし、ボタン監視プログラムが複数存在していた場合、いずれか１つが所定の条件に従って選択され、起動される。また、ＯＳ通信制御部６１は、ＵＳＢインターフェース２１による接続が絶たれた場合、及びＴＷＡＩＮドライバ５０が起動された場合、所定の通信規格に準拠した手順でＵＳＢポートのクローズを行う。
【００２９】
ボタンイベント監視部６２は、スキャナ１０の操作パネル１６におけるユーザの操作によって発生したボタンイベントの有無を定期的に監視する。ここでは、監視対象のユーザによる操作を“ボタン”の押下として説明するが、上述したようにボタンの押下には限らず、ユーザによる原稿の読み取りを意図した操作であればどのような操作でも構わない。ボタンイベント監視部６２は、操作パネル１６における読み取り開始等のボタンイベントを検知した場合、ＯＳ３０のアプリケーション起動制御部３３を介して所定のアプリケーションを起動するよう指示する。ここで、例えば、予め用意しておいたスキャナ１０の読取設定に関するファイルを、起動したアプリケーションに渡すことでボタンイベントの検知に連動させてＴＷＡＩＮドライバ５０から所望の形式の画像データの取得を行うこともできる。
【００３０】
デバイス制御プログラム７０は、スキャナ１０を制御するコマンドの送信やスキャナ１０からの画像データの受信等の制御を行うスキャナドライバとしての機能と、入力された画像データをユーザの指示に従って処理するアプリケーションとしての機能とを有する。そして、デバイス制御プログラム７０は、ＴＷＡＩＮ規格外の、ＴＷＡＩＮドライバ５０では行えない処理（例えばＲＡＷデータによる読取画像データの取得）も行うことができる。デバイス制御プログラム７０は、ＴＷＡＩＮドライバ５０とは異なる処理を画像データに施すことが可能なものとして、ユーザが選択的に利用可能とすることができる。なお、ＯＳ３０は、ＴＷＡＩＮドライバ５０の起動が指示された場合、当該ＴＷＡＩＮドライバ５０に対応付けられたデバイス情報と同一のデバイス情報と対応付けられたボタン監視プログラム６０をクローズさせる。ＯＳ３０は、上述したような各プログラムと関連付けられた所定のファイルに記録されたデバイス情報を参照し、ＵＳＢポートの排他制御を実行する。しかし、ＯＳ３０は、デバイス制御プログラム７０の起動が指示されても、その事実だけでは起動中のボタン監視プログラム６０をクローズさせることはできない。これはデバイス制御プログラム７０は、上記したような所定のファイルにデバイス情報を記録しないためである。また、デバイス制御プログラム７０は、ＴＷＡＩＮ通信設定部７１、ＵＩ表示部７２、スキャナ制御部７３を有する。
【００３１】
ＴＷＡＩＮ通信設定部７１は、ＴＷＡＩＮ  ＤＳＭ３１を介して、ＴＷＡＩＮドライバ５０とＴＷＡＩＮ規格に準拠したコマンド群の授受を行う。ＴＷＡＩＮ通信設定部７１は、スキャナ１０のためのＵＳＢポートを排他制御するため、ＴＷＡＩＮドライバ５０に対して一定期間ＵＳＢポートを開放してもらうためのベンダーカスタムのケーパビリティの設定等を行う。
【００３２】
ＵＩ表示部７２は、ユーザが読取設定や、画像データの編集のための設定等を行うＵＩ画面を、表示装置２２に表示させるための表示情報を提供する。ＵＩ表示部７２は、デバイス制御プログラム７０やスキャナ１０のファームウェアのバージョンアップを行うための画面等も提供する。
【００３３】
スキャナ制御部７３は、ＵＳＢインターフェース制御部８０を介して、スキャナ１０を制御するコマンドの送信やスキャナ１０からの画像データの受信等を行う。なお、デバイス制御プログラム７０は、ボタン監視プログラムからの指示、ＵＩ表示部７２が提供するＵＩ画面を介してのユーザからの指示のいずれかにより起動させることができる。
【００３４】
次に、スキャナ１０において読取開始を指示するための操作が行われ、これに従いアプリケーション４０がＴＷＡＩＮドライバ５０を介して画像データを取得する際の一般的な処理の流れについて説明する。図３は、この場合のコンピュータ２０における処理のシーケンスの流れを示す。以下のシーケンスは、コンピュータ２０のＣＰＵ２５がＲＯＭ２６、補助記憶装置２４に記憶されているプログラムをＲＡＭ２７にロードし、それを実行することにより行われる処理の流れを示す。この処理はＴＷＡＩＮの規格に従って画像読み取りを行わせる処理においてＯＳ３０がスキャナドライバの起動、読取処理終了を認識してＵＳＢポート（スキャナ１０との間のデータ転送用パイプ）の排他制御を行う場合の例である。
【００３５】
まず、スキャナ１０がＵＳＢインターフェース２１を介してコンピュータ２０に接続されると、ＯＳ３０によって１つのボタン監視プログラム６０が起動される。続いてボタン監視プログラム６０はスキャナ１０と通信を行うための論理的チャネルであるＵＳＢポートをオープンし（Ａ１０１）、スキャナ１０におけるボタンイベントの発生を監視するためのポーリングを繰り返し行う。ここでスキャナ１０の操作パネル１６からユーザによる読取指示のための操作（ボタン押下）が行われると、ボタン監視プログラム６０はオープンされているＵＳＢポートを介してボタンイベントの発生を示す信号を検知する。Ａ２０１〜Ａ２０２におけるスキャナ１０とのやり取りにおけるデータ転送はインタラプト転送により行われる。ここではボタン監視プログラム６０がＵＳＢポートを占有している状態である。
【００３６】
ボタン監視プログラム６０は、Ａ１０２におけるボタンイベントを検知すると、所定のアプリケーションを起動する（Ａ２０１）。ここで起動するアプリケーションは予めＯＳ３０に登録してあるものとする。登録されていたアプリケーションが１つであった場合、そのアプリケーションが起動される。２つ以上登録されていた場合、その登録されている複数のアプリケーションの選択を促す画面がＯＳ３０により表示装置２２に表示され、その中からユーザが指定したアプリケーションが起動される。ここでは、アプリケーション４０が起動されたものとする。
【００３７】
ボタン監視プログラム６０からの指示で起動されたアプリケーション４０は、ＴＷＡＩＮドライバ５０に対し、ＴＷＡＩＮ規格に準拠したオープン要求コマンドを発行して（Ａ３０１）、ＴＷＡＩＮドライバ５０の起動を指示する。このオープン要求コマンドはアプリケーション４０からＴＷＡＩＮドライバ５０に直接送られるのではなく、ＯＳ３０のＴＷＡＩＮ  ＤＳＭ３１を介して行われる。ＴＷＡＩＮ  ＤＳＭ３１はＡ３０１においてＴＷＡＩＮドライバのオープン要求コマンドを受け取った場合、ＴＷＡＩＮドライバ５０を起動させる前に、既に起動しているボタン監視プログラム６０に対し、クローズ要求のイベントを送信する（Ａ４０１）。このクローズ要求のイベントを受け取ったボタン監視プログラム６０は、自身が占有していた既にオープンしているＵＳＢポートをクローズする（Ａ１０３）。ここでは、ＴＷＡＩＮドライバ５０に対応付けられているデバイス情報とボタン監視プログラムに対応付けられているデバイス情報が一致しているため、このようなＯＳ３０による排他制御が行われる。つまり、ＯＳ３０のＴＷＡＩＮ  ＤＳＭ３１が、ＴＷＡＩＮドライバ５０とボタン監視プログラム６０とに関連付けられた上述の所定のファイルを参照し、互いに同一のデバイス情報が記録されていると判断されため、ＵＳＢポートの排他制御が行われる。
【００３８】
ボタン監視プログラム６０は、Ａ１０３におけるＵＳＢポートのクローズに成功すると、Ａ４０１におけるイベント送信の応答として成功したことを示す情報を送信する（Ａ４０２）。ＴＷＡＩＮ  ＤＳＭ３１は、Ａ４０２における応答を確認するとＴＷＡＩＮドライバ５０を起動させる。ＴＷＡＩＮドライバ５０は起動処理においてスキャナ１０と通信を行うためのＵＳＢポート（バルク転送用のパイプ）をオープンする（Ａ５０１）。これにより、ＵＳＢポートはＴＷＡＩＮドライバ５０が占有する状態となる。ＴＷＡＩＮドライバ５０は、ＵＳＢポートのオープンに成功すると、ＴＷＡＩＮ  ＤＳＭ３１に対し、Ａ３０１におけるオープン要求に対する応答として成功したことを示す情報を送信する。そして、これを受けたＴＷＡＩＮ  ＤＳＭ３１はその情報をアプリケーション４０に通知する（Ａ３０２）。
【００３９】
ＵＳＢポートのオープン成功の通知を受けたアプリケーション４０は、ＴＷＡＩＮ規格に準拠した画像転送要求コマンドを発行し、このコマンドがＴＷＡＩＮ  ＤＳＭ３１を介してＴＷＡＩＮドライバ５０に伝えられる（Ａ３０３）。このコマンドを受け取ったＴＷＡＩＮドライバ５０は、アプリケーション４０から指定された読取設定に従ってスキャナ１０に原稿上の画像の読み取りを行わせ、この読み取りによって得られた画像データを取得する。そして、ＴＷＡＩＮドライバ５０はこの取得した画像データ（読取画像データ）に、必要に応じて補正等の処理を施してからアプリケーション４０に転送する（Ａ３０４）。ＴＷＡＩＮドライバ５０とスキャナ１０との間の画像データの転送はバルク転送により行われる。
【００４０】
アプリケーション４０は、ＴＷＡＩＮドライバ５０からの読取画像データの受け取りが終了すると、ＴＷＡＩＮドライバ５０に対し、ＴＷＡＩＮ規格に準拠したクローズ要求コマンドを発行する（Ａ３０５）。このコマンドはＴＷＡＩＮ  ＤＳＭ３１を介してＴＷＡＩＮドライバ５０に伝えられ、これを受けたＴＷＡＩＮドライバ５０は終了処理を行う。ここでＴＷＡＩＮドライバ５０は、まず自身が占有していた既にオープンしているＵＳＢポートをクローズする（Ａ５０２）。そしてＴＷＡＩＮドライバ５０は、Ａ５０２におけるＵＳＢポートのクローズに成功すると、ＴＷＡＩＮ  ＤＳＭ３１に対し、Ａ３０５におけるクローズ要求の応答として成功したことを示す情報を送信する。そして、これを受けたＴＷＡＩＮ  ＤＳＭ３１はその情報をアプリケーション４０に通知する（Ａ３０６）。ＴＷＡＩＮドライバ５０はＡ３０５におけるクローズ成功を示す情報の送信が行われると、終了する。
【００４１】
ＴＷＡＩＮドライバ５０のクローズ成功の情報を受け取ったＯＳ３０のＴＷＡＩＮ  ＤＳＭ３１は、スキャナ１０における新たな読み取り要求のイベントの発生を監視させるため、ボタン監視プログラム６０にＵＳＢポートをオープンさせる。即ち、ＴＷＡＩＮ  ＤＳＭ３１はボタン監視プログラム６０に対してオープン要求のイベントを送信し（Ａ４０３）、これを受けたボタン監視プログラム６０はＵＳＢポートをオープンする（Ａ１０４）。そして、ボタン監視プログラム６０によるＵＳＢポートのオープンが成功すると、ボタン監視プログラム６０は、オープン要求のイベント送信への応答として成功したことを示す情報を送信する（Ａ４０４）。ボタン監視プログラム６０がＵＳＢポートをオープンし、自身が占有した状態になって以降は、スキャナ１０におけるイベントを監視するためのポーリングを再開し、上記起動時の処理と同様の処理を行う。
【００４２】
ＴＷＡＩＮドライバ５０から読取画像データを受け取ったアプリケーション４０は、ユーザによる指定に従って、例えば、画像ファイルとして当該画像データを補助記憶装置２４に保存するなどの処理を行うなどしてから終了する。ここでのアプリケーション４０による処理はＴＷＡＩＮドライバ５０の終了前に行ってもよい。また、画像データの処理としてはファイル保存には限らず、他の処理としてもよい。また、処理内容は予め指定してあった処理を行うようにしてもよいし、読取画像データを受け取った後にユーザからの指示で指定された処理を行うようにしてもよい。
【００４３】
また、以上の処理において、ボタンイベントの通信はインタラプト転送を用い、読取画像データの通信はバルク転送を用いるようにしたが、いずれの通信でもバルク転送を用いるようにしてもよい。この場合でも通信用のチャネルは、スキャナドライバとボタン監視プログラムとの間で排他制御される。以降の説明においても同様である。
【００４４】
以上のように、ＴＷＡＩＮドライバ５０を用いてスキャナ１０に読取処理を行わせる場合、ＯＳ３０のＴＷＡＩＮ  ＤＳＭ３１が、同一のデバイス情報と対応付けられたＴＷＡＩＮドライバ５０とボタン監視プログラム６０との間で、ＵＳＢポートを排他制御できる。従って、ＴＷＡＩＮドライバ５０がスキャナ１０におけるボタンイベントを検知したときだけでなく、ユーザが直接ＴＷＡＩＮドライバ５０を起動させたとき、アプリケーション４０からＴＷＡＩＮ準拠のコマンドによって起動させたときも同様に排他制御される。
【００４５】
次に、デバイス制御プログラム７０を用いてスキャナ１０に読取処理を行わせる場合の処理の流れについて説明する。ここではデバイス制御プログラム７０は、ＴＷＡＩＮ規格に準拠したコマンドを用いずにスキャナ１０に読取処理を実行させる。図４は、この場合のコンピュータ２０における第１の例の処理のシーケンスの流れを示す。以下のシーケンスは、コンピュータ２０のＣＰＵ２５がＲＯＭ２６、補助記憶装置２４に記憶されているプログラムをＲＡＭ２７にロードし、それを実行することにより行われる処理の流れを示す。
【００４６】
まず、スキャナ１０がＵＳＢインターフェース２１を介して接続されると、ＯＳ３０によって１つのボタン監視プログラム６０が起動される。続いてボタン監視プログラム６０はスキャナ１０と通信を行うための論理的チャネルであるＵＳＢポートをオープンし（Ｂ１０１）、スキャナ１０におけるボタンイベントの発生を監視するためのポーリングを繰り返し行う。以上は図３の場合と同様である。
【００４７】
ここでユーザの指示によりデバイス制御プログラム７０が起動されると、ＵＩ表示部７２により提供される図５に示すような画面が表示装置２２に表示される。図５において、メインダイアログボックス５００は、読取画像データを表示したり、ユーザからの読取設定を受け付けるメイン画面である。
【００４８】
読取設定領域５１０は、ユーザが読取設定を行う領域である。読取設定には、読取モード、原稿の種類、出力解像度、フィルター、高ダイナミックレンジの要否などがある。読取モードとしては、紙／写真、フィルム原稿などの読み取りがある。原稿の種類としては、指定された読取モードに応じて選択できる原稿が異なる。紙／写真の場合、カラー文書、モノクロ文書、カラー写真、モノクロ写真、カラー文書／写真、モノクロ文書／写真がある。フィルムの場合、カラーフィルム（ポジ）、カラーフィルム（ネガ）、モノクロフィルム（ポジ）、モノクロフィルム（ネガ）がある。出力解像度は、７５、１５０、３００、６００、１２００ｄｐｉのいずれかを選択可能である。フィルターは、自動、なし、シャープネス強、シャープネス弱などを選択可能である。高ダイナミックレンジの要否は、これにチェックを入れると、取得する画像データの最明部と最暗部との差（ダイナミックレンジ）を広くとる。
【００４９】
「プレビュー」ボタン５２０は、読取設定領域５１０の出力解像度の指定に拘わらずスキャナ１０に低解像度で画像を読み取らせ、その結果をプレビュー領域５４０に表示させる。なお、プレビュー領域に表示された画像のうち、ユーザが所望の領域を指定することも可能である。「スキャン」ボタン５３０は、読取設定領域５１０で指定されている設定に従ってスキャナ１０に画像を読み取らせ（本スキャン）、読取画像データを取得する。このとき、プレビュー後に領域の指定がなされていた場合は、指定された領域の画像データのみ取得される。また、予め指定されている本スキャン時の処理が、画像データの取得のみであった場合、プレビュー領域５４０に本スキャンの結果の画像が表示される。
【００５０】
ここでは、ユーザにより「スキャン」ボタン５３０が指定された場合、読取画像データを画像ファイルに変換し、所定のファイル名を付して補助記憶装置２４に保存するよう設定されているものとする。
【００５１】
そして、ボタン監視プログラム６０がＵＳＢポートを確保している間に、デバイス制御プログラム７０が起動され、さらにスキャンボタン５３０が指定されたとする。つまり、ＴＷＡＩＮ規格に準拠しない要求に従ってデバイス制御プログラム７０は起動指示がなされている。ここでは、ＴＷＡＩＮドライバ５０を用いた読取処理を行わないので、デバイス制御プログラム７０が起動されただけでは、ＯＳ３０（ＴＷＡＩＮ  ＤＳＭ３１）によるＵＳＢポートの排他制御は行われない。デバイス制御プログラム７０は直接スキャナ１０を直接制御可能であり、ここでは、上述したＯＳ３０の排他制御を可能とする所定のファイルにデバイス情報を記録しないためである。そこで、ここでは、ＴＷＡＩＮドライバ５０を用いた読取処理を行わないにも拘わらずボタン監視プログラム６０が使用しているＵＳＢポートをクローズさせるためにＴＷＡＩＮドライバ５０をオープンさせる。即ち、デバイス制御プログラム７０においてユーザによりスキャンボタン５３０が指定されることにより、読取指示がなされると、ＴＷＡＩＮ  ＤＳＭ３１に対し、ＴＷＡＩＮドライバ５０のオープン要求コマンドを発行する（Ｂ２０１）。
【００５２】
このオープン要求コマンドを受け取ったＴＷＡＩＮ  ＤＳＭ３１は、ＴＷＡＩＮドライバ５０のデバイス情報と同じデバイス情報と対応付けられているボタン監視プログラム６０に対し、クローズ要求のイベントを送信する（Ｂ３０１）。ここでは、ＴＷＡＩＮドライバ５０とボタン監視プログラム６０はともに所定のファイルにスキャナ１０を示すデバイス情報が記録している。クローズ要求のイベントを受信したボタン監視プログラム６０は、自身が使用している既にオープンしているＵＳＢポートをクローズする（Ｂ１０２）。そしてＵＳＢポートのクローズに成功すると、ボタン監視プログラム６０はＢ３０１におけるクローズ要求に対する応答として、クローズが成功したことを示す情報を送信する（Ｂ３０２）。ＴＷＡＩＮ  ＤＳＭ３１は、ＵＳＢポートのクローズに成功したことを確認すると、Ｂ２０１におけるオープン要求に従ったＴＷＡＩＮドライバ５０を起動させる。
【００５３】
ＴＷＡＩＮドライバ５０は、起動処理において、スキャナ１０と通信を行うためのＵＳＢポートをオープンする（Ｂ４０１）。そしてＴＷＡＩＮドライバ５０はＵＳＢポートのオープンに成功すると、その旨をＴＷＡＩＮ  ＤＳＭ３１に通知し、この通知を受けたＴＷＡＩＮ  ＤＳＭ３１はそれをデバイス制御プログラム７０に通知する。
【００５４】
デバイス制御プログラム７０は、ＴＷＡＩＮドライバ５０が起動され、ＵＳＢポートのオープンに成功したことを確認すると、ＴＷＡＩＮドライバ５０に対し、ベンダーユニークなカスタムケーパビリティの設定を指示するコマンドを発行する（Ｂ２０３）。このコマンドはＴＷＡＩＮ規格に準拠したコマンドであり、ＴＷＡＩＮ  ＤＳＭ３１を介してＴＷＡＩＮドライバ５０に通知される。なお、ここで通知されるベンダーユニークな設定は、ＴＷＡＩＮドライバ５０に対し、一旦オープンさせたＵＳＢポートのクローズを要求するためのものである。ここでは、ＴＷＡＩＮドライバ５０による読取処理を行うのではなく、ＴＷＡＩＮドライバ５０を起動させることにより、ＯＳ３０の排他制御機能を利用して他のプログラムが使用していたＵＳＢポートのクローズを行わせている。そして、読取処理はデバイス制御プログラム７０を用いるため、ＴＷＡＩＮドライバ５０にＵＳＢポートをクローズさせる必要があるため、ベンダーユニークな設定を用いている。ただし、ＴＷＡＩＮドライバ５０にＵＳＢポートをクローズさせることができれば、ベンダーユニークな設定には限らず、他の方法を用いても構わない。以上のようにして、ボタン監視プログラム６０、ＴＷＡＩＮドライバ５０が使用していたＵＳＢポートをクローズさせることにより、デバイス制御プログラム７０がＵＳＢポートを使用可能となる。
【００５５】
デバイス制御プログラム７０からのＢ２０３におけるコマンドを受け取ったＴＷＡＩＮドライバ５０は、自身が使用している既にオープンしているＵＳＢポートをクローズする（Ｂ４０２）。そしてＴＷＡＩＮドライバ５０は、ＵＳＢポートのクローズに成功すると、Ｂ２０３におけるコマンドの応答として、成功したことを示す情報を送信する（Ｂ２０４）。なお、デバイス制御プログラム７０が読取処理を行っている間に、ＯＳ３０がボタン監視プログラム６０をオープンさせようとするのを避けるため、ここではＴＷＡＩＮドライバ５０自体はクローズさせない。
【００５６】
デバイス制御プログラム７０は、ＵＳＢポートがクローズされたことを確認すると、自身がＵＳＢポートをオープンする（Ｂ２０５）。そして、読取設定領域５１０等で設定されている読取設定に従ってスキャナ１０に画像の読み取りを実行させ、その結果得られた読取画像データを取得し、スキャナ１０からの読取画像データの取得が終了すると、ＵＳＢポートをクローズする（Ｂ２０６）。そして、ユーザによる指定に従って、画像ファイルとして当該画像データを補助記憶装置２４に保存するなどの処理を行う。なお、画像ファイルを生成して保存する処理は、ＵＳＢポートをクローズさせる前に行ってもよい。
【００５７】
そして、デバイス制御プログラム７０は、読取処理（ここでは読取画像データの取得及びファイル保存）が終了すると、ＴＷＡＩＮドライバ５０に対して、ＴＷＡＩＮ規格に準拠したクローズ要求コマンドを発行する（Ｂ２０７）。このコマンドがＴＷＡＩＮ  ＤＳＭ３１を介してＴＷＡＩＮドライバ５０に伝えられ、ＴＷＡＩＮドライバ５０はこのコマンドを受けると終了処理を行うとともに、Ｂ２０７におけるクローズ要求に対する応答として、成功したことを示す情報を送信する（Ｂ２０８）。ＴＷＡＩＮドライバ５０のクローズを確認したＴＷＡＩＮ  ＤＳＭ３１は、ボタン監視プログラム６０に対してオープン要求のイベントを送信し（Ｂ３０３）、これを受けたボタン監視プログラム６０はＵＳＢポートをオープンする（Ｂ１０３）。そして、ボタン監視プログラム６０によるＵＳＢポートのオープンが成功すると、ボタン監視プログラム６０は、オープン要求のイベント送信への応答として成功したことを示す情報を送信する（Ｂ３０４）。ボタン監視プログラム６０がＵＳＢポートをオープンし、自身が占有した状態になって以降は、スキャナ１０におけるイベントを監視するためのポーリングを再開し、上記起動時の処理と同様の処理を行う。
【００５８】
この図４に示したような処理により、単に起動及び読取指示を行っただけでは、ＯＳのＴＷＡＩＮ  ＤＳＭが通信用のチャネルの排他制御を行わないスキャナドライバを用いて読取処理を行わせる場合であっても、ＯＳに排他制御を行わせることができる。即ち、スキャナドライバが読取処理を行う場合に、ＴＷＡＩＮドライバを起動させることよりＯＳの排他制御機能を使って他のプログラムが使用していた通信用チャネルをクローズさせることができる。このとき、スキャナドライバは、通信用チャネルを使用しているプログラムを識別できなくとも、ＯＳの排他制御機能を使えば、通信用チャネルをクローズさせることができる。これはＯＳの排他制御機能は、通信用チャネルを用いるプログラムが起動された場合、同じデバイス情報と対応付けられた他のプログラムにより使用されている通信用チャネルをクローズするからである。従って、例えば、コンピュータ２０に複数のボタン監視プログラムが存在し、デバイス制御プログラムが、現在どのボタン監視プログラムが通信用チャネルを使用しているか識別できなくとも、これをクローズさせることができる。
【００５９】
次に、デバイス制御プログラム７０を用いてスキャナ１０に読取処理を行わせる場合の処理の第２の例について説明する。ここでもデバイス制御プログラム７０は、ＴＷＡＩＮ規格に準拠したコマンドを用いずにスキャナ１０に読取処理を実行させる。そして、ＯＳが論理的な通信用チャネルであるＵＳＢポートを複数のプログラム（スキャナドライバやボタン監視プログラム）間で排他制御する点は前述の第１の例と同様である。
【００６０】
図６は、この第２の処理を行うためのコンピュータ２０においてソフトウェアによって実現される機能の構成を示す図である。図２と同一の符号を付し、特に説明のないものは図２で説明したものと同じ機能を有するものである。
【００６１】
アプリケーション４０は、図２に示したものと同様に、ＴＷＡＩＮ  ＤＳＭ３１を介してＴＷＡＩＮ規格に準拠したデータソースであるＴＷＡＩＮドライバ５０のオープンやクローズを指示できる。しかしながら、第２の例におけるアプリケーション４０は、後述するようにスキャナ１０と通信を行うためのＵＳＢポートの排他制御を補助するための専用のものである。従って、この例でのアプリケーション４０は必ずしもＵＩ画面を有す必要もなく、また起動された場合、バックグラウンドで動作するものとしてもよい。ただし、ＵＳＢポートの排他制御の補助専用とせず、この機能と他の機能を兼用したアプリケーションとしてもよい。
【００６２】
また、アプリケーション４０は、イベント受信部４１を有し、このイベント受信部４１は、ＯＳ３０が提供するプロセス間通信のＡＰＩにより実現される。イベント受信部４１は、受信したイベントの種類に応じて異なる処理を行う。
【００６３】
ＴＷＡＩＮドライバ５０は、図２に示したものと同様に、ＴＷＡＩＮ規格に準拠し、スキャナ１０を制御するコマンドの送信や画像データの受信等を行う。第２の例におけるＴＷＡＩＮドライバ５０は、図２に示した構成に加え、アプリケーションＩＤ識別部５３、アプリケーションＩＤ判定部５４を有す。
【００６４】
アプリケーションＩＤ識別部５３は、ＴＷＡＩＮドライバ５０の起動を指示したアプリケーションを識別する。ＴＷＡＩＮ規格に準拠したアプリケーションにはユニークなＩＤが設定されるが、アプリケーションＩＤ識別部５３は、このＩＤを識別することができる。アプリケーションＩＤ判定部５４は、アプリケーションＩＤ識別部５３で識別したＩＤに対応するアプリケーションが予め決められたアプリケーションであるかどうか判定する。アプリケーションＩＤ判定部５４は、補助記憶装置２４に記憶されている特定のアプリケーションのＩＤに、アプリケーションＩＤ識別部５３が識別したＩＤが一致するかどうかにより判定を行う。
【００６５】
デバイス制御プログラム７０は、図２に示したものと同様に、スキャナドライバとしての機能とアプリケーションとしての機能とを有し、ＴＷＡＩＮ規格外の処理を行うことが可能なプログラムである。第２の例におけるデバイス制御プログラム７０は、図２に示した構成以外に、アプリケーション起動部７４、イベント送信部７５を有す。
【００６６】
アプリケーション起動部７４は、ＯＳ３０が提供するＡＰＩを用いて、所定のアプリケーションの起動を指示する。イベント送信部７５は、ＯＳ３０が提供するプロセス間通信のＡＰＩにより、所定のイベントを示す情報を送信する。
【００６７】
次に、図７を用いて図６に示した構成を含むコンピュータ２０における第２の例の処理のシーケンスの流れを説明する。以下のシーケンスは、コンピュータ２０のＣＰＵ２５がＲＯＭ２６、補助記憶装置２４に記憶されているプログラムをＲＡＭ２７にロードし、それを実行することにより行われる処理の流れを示す。
【００６８】
まず、ボタン監視プログラム６０が起動され、ＵＳＢポートをオープンしている状態（Ｃ１０１）で、デバイス制御プログラム７０が起動され、図５のＵＩ画面から読取指示がなされる点は図４に示した第１の例と同様である。
【００６９】
デバイス制御プログラム７０において読取指示がなされると、アプリケーション４０に対し起動指示を行う（Ｃ２０１）。そしてアプリケーション４０が起動されると、デバイス制御プログラム７０は、イベント送信部７５によりアプリケーション４０に対して、オープン要求のイベントを送信する（Ｃ２０２）。アプリケーション４０は、イベント受信部４１により、Ｃ２０２におけるオープン要求のイベントを受信すると、ＴＷＡＩＮ規格に準拠したオープン要求コマンドを発行し（Ｃ３０１）、ＴＷＡＩＮドライバ５０の起動を指示する。
【００７０】
ＯＳ３０のＴＷＡＩＮ  ＤＳＭ３１は、Ｃ３０１におけるオープン要求を受けると、ＴＷＡＩＮドライバ５０を起動させる前に、ボタン監視プログラム６０に対し、クローズ要求のイベントを送信する（Ｃ４０１）。そして、Ｃ４０１におけるクローズ要求のイベントを受信したボタン監視プログラム６０は、自身が使用している既にオープンしているＵＳＢポートをクローズする（Ｃ１０２）。そしてＵＳＢポートのクローズに成功すると、ボタン監視プログラム６０は、Ｃ４０１におけるクローズ要求に対する応答として、クローズが成功したことを示す情報を送信する（Ｃ４０２）。ここで、ボタン監視プログラム６０が使用していたＵＳＢポートをクローズさせることにより、デバイス制御プログラム７０がＵＳＢポートを使用可能な状態となる。ＴＷＡＩＮ  ＤＳＭ３１は、ＵＳＢポートのクローズに成功したことを確認すると、Ｃ３０１におけるオープン要求に従ったＴＷＡＩＮドライバ５０を起動させる。
【００７１】
ＴＷＡＩＮドライバ５０は、起動処理において、起動を指示したアプリケーションのＩＤをアプリケーションＩＤ識別部５３で識別し、このＩＤが所定のＩＤに一致するかをアプリケーションＩＤ判定部５４により判定する。そして、ここではアプリケーション４０からの起動指示であるので、所定のＩＤに一致すると判断され、ＴＷＡＩＮドライバ５０はＵＳＢポートをオープンしない。これにより、ここでは読取処理を行わないＴＷＡＩＮドライバ５０によるＵＳＢポートをオープンしたりクローズしたりする処理を省略させて処理の効率化を図るためである。この処理の詳細は後述する。そして、ＴＷＡＩＮドライバ５０は、Ｃ３０１におけるオープン要求に対する応答として、オープンに成功したことを示す情報をＴＷＡＩＮ  ＤＳＭ３１を介してアプリケーション４０に送信する（Ｃ３０２）。
【００７２】
ＴＷＡＩＮドライバ５０からオープンに成功したことを示す情報を受け取ったアプリケーション４０は、デバイス制御プログラム７０に対してその旨を示すイベントを送信する（Ｃ２０３）。Ｃ２０３におけるイベントをデバイス制御プログラム７０が受信すると、ＵＳＢポートをオープンする（Ｃ２０４）。そして、読取設定領域５１０等で設定されている読取設定に従ってスキャナ１０に画像の読み取りを実行させ、その結果得られた読取画像データを取得し、スキャナ１０からの読取画像データの取得が終了すると、ＵＳＢポートをクローズする（Ｃ２０５）。そして、ユーザによる指定に従って、画像ファイルとして当該画像データを補助記憶装置２４に保存するなどの処理を行う。なお、画像ファイルを生成して保存する処理は、ＵＳＢポートをクローズさせる前に行ってもよい。
【００７３】
そして、デバイス制御プログラム７０は、読取処理（ここでは読取画像データの取得及びファイル保存）が終了すると、アプリケーション４０に対して、クローズ要求のイベントを送信する（Ｃ２０６）。アプリケーション４０のイベント受信部４１がこのクローズ要求のイベントを受信すると、ＴＷＡＩＮ規格に準拠したクローズ要求コマンドを発行する（Ｃ３０３）。このコマンドがＴＷＡＩＮ  ＤＳＭ３１を介してＴＷＡＩＮドライバ５０に伝えられ、ＴＷＡＩＮドライバ５０はこのコマンドを受けると終了処理を行うとともに、Ｃ３０３におけるクローズ要求に対する応答として、成功したことを示す情報を送信する（Ｃ３０４）。そして、これを受けたアプリケーション４０はクローズが成功したことを示すイベントをデバイス制御プログラム７０に送信する。このイベントを受けたデバイス制御プログラム７０は自身を終了させる。ここで、デバイス制御プログラム７０が読取処理を行っている間、ＴＷＡＩＮドライバ５０を終了させないのは、デバイス制御プログラム７０が読取処理を行っている間にＯＳ３０がボタン監視プログラム６０を起動させようとしないようにである。
【００７４】
Ｃ３０４におけるクローズ成功の情報を受け取ったＴＷＡＩＮ  ＤＳＭ３１は、ボタン監視プログラム６０に対してオープン要求のイベントを送信し（Ｃ４０３）、これを受けたボタン監視プログラム６０はＵＳＢポートをオープンする（Ｃ１０３）。そして、ボタン監視プログラム６０によるＵＳＢポートのオープンが成功すると、ボタン監視プログラム６０は、オープン要求のイベント送信への応答として成功したことを示す情報を送信する（Ｃ４０４）。ボタン監視プログラム６０がＵＳＢポートをオープンし、自身が占有した状態になって以降は、スキャナ１０におけるイベントを監視するためのポーリングを再開し、上記起動時の処理と同様の処理を行う。
【００７５】
ここで、ＴＷＡＩＮのオープン要求をＴＷＡＩＮドライバ５０が受け取ったときの処理の一部について説明する。図８はこの場合の処理の流れを示すフローチャートである。このフローチャートは、コンピュータ２０のＣＰＵ２５がＲＯＭ２６、補助記憶装置２４に記憶されているプログラムをＲＡＭ２７にロードし、それを実行することにより行われる処理の流れを示す。
【００７６】
ＴＷＡＩＮドライバ５０が、ＴＷＡＩＮ規格に準拠したオープン要求コマンドを受信すると本フローチャートが開始される。Ｓ８０１において、アプリケーションＩＤ識別部５３により、受信したオープン要求コマンドを送信したアプリケーションのＩＤを識別する。
【００７７】
そして、Ｓ８０２において、アプリケーションＩＤ判定部５４により、Ｓ８０１で識別したＩＤが所定のＩＤであるかどうか判定する。ここで、所定のＩＤとは、ＵＳＢポートの排他制御を補助するアプリケーションのＩＤを指し、ここではアプリケーション４０のＩＤを指す。また、この所定のＩＤは予め補助記憶装置２４の所定の領域に記憶されており、ＴＷＡＩＮドライバ５０が本フローチャートの処理を行う際に参照可能となっている。なお、所定のＩＤは１つのみに限らず、複数存在しても構わない。ここでは、ＴＷＡＩＮドライバ５０が自身の起動指示の送信元を判定している。
【００７８】
Ｓ８０２における判定の結果、所定のＩＤであると判定された場合、Ｓ８０３に進み、そうでなければ、Ｓ８０４に進む。Ｓ８０３に進むのは、図７のシーケンスにおいてＣ３０１のコマンドを受信した場合に対応する。
【００７９】
Ｓ８０３では、ＴＷＡＩＮドライバ５０は自身がスキャナ１０と通信するためのＵＳＢポートをオープンしないことを決定する。これは、前述のように、図６のアプリケーション４０がＯＳ３０の排他制御機能を使って現在使用中のＵＳＢポートをクローズさせることを目的としてＴＷＡＩＮドライバ５０を起動させるのであって、ＴＷＡＩＮドライバ５０が読取処理を行わせないからである。これにより、ＴＷＡＩＮドライバ５０によるＵＳＢポートのオープン、クローズの処理が不要となり、処理の効率化が図れる。
【００８０】
Ｓ８０４では、ＴＷＡＩＮドライバ５０はスキャナ１０と通信するためのＵＳＢポートをオープンする。これは、ＴＷＡＩＮ規格に準拠したアプリケーションがＴＷＡＩＮドライバ５０を用いてスキャナ１０による画像の読み取りを実行させ、読取画像データを取得する場合に、それを可能にするためである。この場合は図３に示したＡ５０１以降のような処理が実行されるが、ここでの説明は省略する。
【００８１】
次に、Ｓ８０５では、ＴＷＡＩＮ規格に準拠したコマンドの受け付けを待ち、Ｓ８０６において、ＴＷＡＩＮ規格に準拠したクローズ要求コマンドを受信したと判断されると、Ｓ８０７に進む。Ｓ８０７では、ＴＷＡＩＮドライバ５０がＵＳＢポートをオープンしているか判断し、オープンしていた場合はＳ８０８に進み、オープンしていたＵＳＢポートをクローズしてから、ＴＷＡＩＮドライバ５０は終了する。ＵＳＢポートをオープンしていなかった場合は、ＵＳＢポートをクローズする処理を行わずにＴＷＡＩＮドライバ５０は終了する。
【００８２】
この図７、８に示したような処理により、単に起動及び読取指示を行っただけでは、ＯＳのＴＷＡＩＮ  ＤＳＭが通信用のチャネルの排他制御を行わないスキャナドライバを用いて読取処理を行わせる場合であっても、ＯＳに排他制御を行わせることができる。このとき、スキャナドライバは、通信用チャネルを使用しているプログラムを識別できなくとも、ＯＳの排他制御機能を使えば、通信用チャネルをクローズさせることができる。以上は図４に示した第１の例と同様である。そして、第２の例では、ＯＳにＵＳＢポートの排他制御を行わせることのみを目的としてＴＷＡＩＮドライバを起動させたとき、ＴＷＡＩＮドライバにＵＳＢポートをオープンさせない。これにより、ＴＷＡＩＮドライバがＵＳＢポートをオープンさせたり、クローズさせる処理を省略でき、処理負荷が低減される。また、通常、ＴＷＡＩＮドライバがＵＳＢポートをオープンしたとき、スキャナ１０を用いた読取処理を行うための初期化処理が実行されるが、第２の例によれば、それが行われないので、デバイス制御プログラムによる読取処理を早急に開始できる。
【００８３】
なお、以上の例では、スキャナとのインターフェースとしてＵＳＢを用いる例について説明したが、ＯＳが複数のプログラム間で通信用チャネルの排他制御を行うものであれば、他のインターフェースとしてもよい。これは、ローカルインターフェース、ネットワークインターフェースのいずれでもよい。
【００８４】
また、スキャナとコンピュータとは外部接続されるものにも限らず、以上の例におけるスキャナに相当する機能とコンピュータに相当する機能とが内部的に接続され、一体化されたものとしてもよい。
【００８５】
また、以上の例では、ＯＳがプログラムの起動により通信用チャネルの排他制御を行うものを、ＴＷＡＩＮ規格に準拠したものとしたが、ＴＷＡＩＮ以外のＡＰＩを用いたものでＯＳが排他制御を行うものであっても同様の処理を行うことが可能である。
【００８６】
また、周辺装置として、スキャナ以外のものを用いたものとしてもよい。例えば、周辺装置としてプリンタを用い、プリンタドライバが印刷用の画像データの通信を行う場合と、プリンタにおけるイベントを監視するプログラムがイベントの通信を行う場合とで通信用チャネルの排他制御を行うものであってもよい。即ち、周辺装置との間で画像データの通信を行うデバイスドライバと、周辺装置との間で行う通信を行う他の通信プログラムとの間での排他制御を、上述したようにＯＳの排他制御機能を用いるものとすればよい。
【００８７】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施例の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。また、プログラムは、１つのコンピュータで実行させても、複数のコンピュータが連動して実行するようにしてもよい。また、上記した処理の全てをソフトウェアで実現する必要はなく、一部または全部をハードウェアによって実現するようにしてもよい。
【００８８】
また、本発明は上記実施形態に限定されるものではなく、本発明の趣旨に基づき種々の変形（他の実施形態への応用、他の実施形態との組合せ等を含む）も可能である。
【図１】
0005473756.tif 000002
【図２】
0005473756.tif 000003
【図３】
0005473756.tif 000004
【図４】
0005473756.tif 000005
【図５】
0005473756.tif 000006
【図６】
0005473756.tif 000007
【図７】
0005473756.tif 000008
【図８】
0005473756.tif 000009