(57)【要約】【課題】外部デバイスに対する電源供給を停止している間に行われた外部デバイスの抜去または別の外部デバイスへの差し替えを検知し、情報処理装置が認識している外部デバイスの接続（抜去）状態と実際の外部デバイス３００の接続（抜去）状態との不整合を防止できるデバイス制御装置、デバイス制御方法およびプログラムを提供する。【解決手段】デバイス制御装置は外部デバイスに対する電源供給停止後に、外部デバイスに対して電源供給を再開するタイミングで外部デバイスの抜去または外部デバイスの差し替えを検知し、外部デバイスの抜去または外部デバイスの差し替え検知の結果を情報処理装置に通知して、デバイス状態管理情報における該当デバイスのデバイス情報を更新する。【選択図】図１
2018097758.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して情報処理装置と接続しているとともにデバイスとローカル接続されているデバイス制御装置であって、
前記デバイスの接続または抜去を検知するデバイス接続検知手段と、
前記デバイスのデバイス情報を管理するデバイス状態管理手段と、
前記デバイスに対して電源供給の開始または停止を制御する電源制御手段と、
を備え、
前記電源制御手段によって前記デバイスに対する電源供給を再開後に前記デバイス接続検知手段が当該デバイスの接続を検知しない場合、前記デバイス状態管理手段が前記抜去されたデバイスのデバイス情報を無効にする
ことを特徴とするデバイス制御装置。
【請求項２】
前記デバイス接続検知手段によって前記デバイスが抜去されたこと検知した場合、前記抜去された前記デバイスの状態を前記情報処理装置に通知するデバイス状態通知手段をさらに備えることを特徴とする請求項１に記載のデバイス制御装置。
【請求項３】
前記電源制御手段によって前記デバイスへの電源供給停止中に前記デバイス接続検知手段が前記デバイス制御装置に接続されている前記デバイスの差し替えを検知した場合、前記デバイス状態管理手段が前記抜去されたデバイスのデバイス情報を無効にし、新たに接続されたデバイスのデバイス情報を有効にすることを特徴とする請求項１または請求項２に記載のデバイス制御装置。
【請求項４】
前記デバイス接続検知手段によって前記デバイスの差し替えを検知した場合、前記抜去された前記デバイスの状態および新たに接続された前記デバイスの状態を前記情報処理装置に通知するデバイス状態通知手段をさらに備えることを特徴とする請求項３に記載のデバイス制御装置。
【請求項５】
前記情報処理装置に前記デバイスがローカル接続されたかのように制御する仮想化制御を開始または終了させる仮想化制御手段と、
前記デバイスへの電源供給を開始させる電源供給開始命令、前記デバイスへの電源供給を停止させる電源供給停止命令、前記情報処理装置に対して前記デバイスの仮想化制御を開始させる仮想化開始命令、前記情報処理装置に対して前記デバイスの仮想化制御を終了させる仮想化終了命令を受信する命令受信手段と、
を更に備え、
前記命令受信手段によって前記情報処理装置から前記電源供給開始命令または前記電源供給停止命令を受信したことに応じて、
前記電源制御手段が前記デバイスに対する電源供給の開始または停止を制御し、
前記命令受信手段によって前記情報処理装置から前記仮想化開始命令または前記仮想化終了命令を受信したことに応じて、
前記仮想化制御手段が前記情報処理装置による前記デバイスの仮想化制御の開始または終了を制御する
ことを特徴とする請求項１乃至請求項４のいずれか１項に記載のデバイス制御装置。
【請求項６】
ネットワークを介して情報処理装置と接続しているとともにデバイスとローカル接続されているデバイス制御装置によって実行されるデバイス制御方法であって、
前記デバイスの接続または抜去を検知するデバイス接続検知ステップと、
前記デバイスのデバイス情報を管理するデバイス状態管理ステップと、
前記デバイスに対して電源供給の開始または停止を制御する電源制御ステップと、
を備え、
前記電源制御ステップによって前記デバイスに対する電源供給を再開後に前記デバイス接続検知ステップが当該デバイスの接続を検知しない場合、前記デバイス状態管理ステップが前記抜去されたデバイスのデバイス情報を無効にする
ことを特徴とするデバイス制御方法。
【請求項７】
コンピュータを、請求項１乃至請求項５のいずれか１項に記載のデバイス制御装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークを介して接続された情報処理装置から送られる各種要求を処理
するためのデバイス制御装置、デバイス制御装置およびプログラムに関する。
【背景技術】
【０００２】
近年、ネットワークの普及によって、プリンタ、ストレージ、およびスキャナなどのデバイスを、ネットワーク上の情報処理装置であるホストコンピュータから共有デバイスとして利用することが行われている。その実現方法がいくつか提案されている。
【０００３】
例えば、クライアントＰＣが、デバイスサーバにローカル接続されたデバイスをローカル接続されたように認識し、デバイスの制御（以下、「仮想化制御」）を行うものがある（特許文献１参照）。
【０００４】
また、サーバコンピュータ（デバイスサーバ）における周辺機器（デバイス）の電源制御を行うものが提案されている。
【０００５】
例えば、サーバコンピュータ（デバイスサーバ）にローカル接続された周辺機器（デバイス）と、サーバコンピュータにネットワークを介して接続されたホストコンピュータ（クライアントＰＣ）から構成されるシステムにおいて、サーバコンピュータは周辺機器の抜き差しに応じて、周辺機器への電源供給や電源供給停止（以下、電源制御）を行うものがある（特許文献２参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２０１１／０５５８３１号公報
【特許文献２】特開２００７−３１０７９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１のデバイス制御システムにおいて、デバイスサーバに接続されたデバイスに対して電源制御（電源供給や電源供給停止）を行いたいというニーズがある。
【０００８】
しかし、特許文献１のデバイス制御システムに特許文献２のような既存の技術（電源制御の技術）を適用し、クライアントＰＣによってデバイスを仮想化制御している場合にデバイスサーバがデバイスの電源制御を行うことができたとしても以下の課題がある。
【０００９】
クライアントＰＣは、デバイスの仮想化制御を行っている場合、デバイスサーバによる外部デバイスへの電源供給停止中に行われたデバイスの抜去や差し替え（デバイスサーバに接続されていたデバイスを別のデバイスに差し替えること）を認識できない。そのため、クライアントＰＣが認識しているデバイスの接続（抜去）状態と実際のデバイスの接続（抜去）状態とで不整合が発生する。なお、デバイスの状態の不整合とは、例えば、デバイスサーバにデバイスは接続されてない状態にもかかわらず、クライアントＰＣは、デバイスサーバにデバイスが接続されている状態と認識することである。
【００１０】
上記の課題に鑑みて、本発明は、情報処理装置によって外部デバイスの仮想化制御が行われている場合、デバイスサーバによる外部デバイスへの電源供給停止中に行われた外部デバイスの抜去または別の外部デバイスへの差し替えを検知し、情報処理装置が認識している外部デバイスの接続（抜去）状態と実際の外部デバイス３００の接続（抜去）状態との不整合を防止することができるデバイス制御装置、デバイス制御方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記の課題を解決するために、請求項１に記載のデバイス制御装置は、ネットワークを介して情報処理装置と接続しているとともにデバイスとローカル接続されているデバイス制御装置であって、前記デバイスの接続または抜去を検知するデバイス接続検知手段と、前記デバイスのデバイス情報を管理するデバイス状態管理手段と、前記デバイスに対して電源供給の開始または停止を制御する電源制御手段と、を備え、前記電源制御手段によって前記デバイスに対する電源供給を再開後に前記デバイス接続検知手段が当該デバイスの接続を検知しない場合、前記デバイス状態管理手段が前記抜去されたデバイスのデバイス情報を無効にすることを特徴とする。
【発明の効果】
【００１２】
本発明によれば、デバイス制御装置が外部デバイスに対する電源供給を再開したときにデバイス接続ポートにおけるデバイスの存在（プラグインの有無）やデバイス情報（ベンダーＩＤ、製品ＩＤなど）を確認することで、外部デバイスに対する電源供給停止中に行われた外部デバイスの挿抜または別の外部デバイスへの差し替えを検知できる。
【００１３】
従って、デバイス制御装置に接続されている外部デバイスの抜去または別の外部デバイスへの差し替えが発生した場合でも、情報処理装置が認識している外部デバイスの接続（抜去）状態と実際の外部デバイス３００の接続（抜去）状態との不整合を防止できる。
【図面の簡単な説明】
【００１４】
【図１】本発明の第１の実施形態に係るデバイス制御システムの一例の構成を概略的に示すブロック図である。
【図２】図１に示すデバイス制御装置２００が有するデバイス状態管理情報２１６の一例を示す図である。
【図３】デバイス制御装置２００における外部デバイス３００の抜去検知制御の一例を示すフローチャートである。
【図４】デバイス制御装置２００による外部デバイス３００の抜去時の電源制御について説明するシーケンスである。
【図５】本発明の第２の実施形態に係るデバイス制御装置２００における外部デバイス３００の差し替え検知制御の一例を示すフローチャートである。
【図６】本発明の第２の実施形態に係るデバイス制御装置２００による外部デバイス３００の差し替え時の電源制御について説明するシーケンスである。
【発明を実施するための形態】
【００１５】
以下、本発明の実施形態によるデバイス制御システムの一例について図面を参照して説明する。
【００１６】
［第１の実施形態］
図１は、本発明の第１の実施形態に係るデバイス制御システムの一例の構成を概略的に示すブロック図である。なお、第１の実施形態では、後述するデバイス制御装置２００に接続された外部デバイス３００を情報処理装置１００が仮想化制御している際に、ユーザによって外部デバイス３００の抜去（プラグアウト）が行われた場合、デバイス制御装置２００が外部デバイス３００の抜去（プラグアウト）を検出して、情報処理装置１００に通知することによって、情報処理装置が外部デバイス３００のプラグアウトを認識できる例について説明する。
【００１７】
図示のデバイス制御システムにおいては、情報処理装置１００がローカルエリアネットワーク（ＬＡＮ）やワイドエリアネットワーク（ＷＡＮ）などのネットワークを介してデバイス制御装置２００に接続されている。ネットワークは有線回線または無線回線で構成される。そして、デバイス制御装置２００には、通信インターフェース（例えば、ＵＳＢまたＩＥＥＥ１３９４、および、ＨＤＭＩ（登録商標））によって外部デバイス３００がローカル接続されている。以降の説明では、通信インターフェースをＵＳＢとして説明する。
【００１８】
なお、図１に示すデバイス制御システムにおいては、情報処理装置１００、デバイス制御装置２００、および外部デバイス３００がそれぞれ１つのみ示されているが、情報処理装置１００、デバイス制御装置２００、および外部デバイス３００の台数は図示の例に限定されるものではない。また、デバイス制御装置２００は、例えば、プリンタ又は複合機等のオフィス機器であるが、デバイス制御装置２００はオフィス機器に限定されるものではなく、様々な組込み装置、携帯電話機、又はモバイル端末機器であってもよい。  
【００１９】
また、図１に示すデバイス制御システムでは、デバイス制御装置２００と外部デバイス３００をそれぞれ別体の装置で構成しているが、デバイス制御装置２００を外部デバイス３００のケーシング内に収まるように一体構造としてもよい。
【００２０】
＜情報処理装置１００の構成＞
情報処理装置１００は、パーソナルコンピュータ（ＰＣ）等の装置である。ハードウェア構成として、ＣＰＵ１０１、入力部１０２、表示部１０３、メモリ１０４、通信部１０５、および、記憶部１１０を備え、これらハードウェアは内部バスで相互に接続されている。
【００２１】
ＣＰＵ１０１は、情報処理装置１００の全体の制御を司る。入力部１０２は、例えば、キーボードおよびマウスを備えている。表示部１０３として、例えば、液晶モニタが用いられる。メモリ１０４はＲＡＭおよびＲＯＭ等である。通信部１０５はネットワークに接続するためのインターフェースであって、デバイス制御装置２００とデータ送受信を行う。
【００２２】
記憶部１１０には、ソフトウェアであるオペレーティングシステム（以下「ＯＳ」と呼ぶ：不図示）、アプリケーション１１１、デバイスドライバ１１２、仮想化制御部１１３および通信制御部１１４が記憶されるとともに、他の機能に係るソフトウェアが記憶されている。なお、これらソフトウェアはメモリ１０４に読み出されて、ＣＰＵ１０１の制御に従い動作する。
【００２３】
アプリケーション１１１は、デバイスドライバ１１２に対してデータ入出力要求を指示することにより、デバイス制御装置２００に接続された外部デバイス３００を制御するためのソフトウェアである。
【００２４】
デバイスドライバ１１２は、外部デバイス３００を制御するための機能部である。ＯＳまたはアプリケーション１１１からのデータ入出力要求を、外部デバイス３００に応じたデータ形式のデータ（以下「制御コマンド」と呼ぶ）に変換して、当該制御コマンドを仮想化制御部１１３に送る。さらに、デバイスドライバ１１２は制御コマンドに対する応答をアプリケーション１１１に通知する。このデバイスドライバ１１２は一般に、外部デバイス３００を製造したメーカーによって提供されるソフトウェアであって、情報処理装置１００は各デバイスに対応したデバイスドライバ１１２によって外部デバイス３００を制御することができる。
【００２５】
仮想化制御部１１３は、デバイスドライバ１１２から送られた制御コマンド（つまり、データ入出力要求）をＵＳＢデータ形式に準拠したパケットデータ（以下「ＵＳＢデータ」と呼ぶ）に変換し、通信制御部１１４に送る。また、仮想化制御部１１３は通信制御部１１４から送られてくるＵＳＢデータを制御コマンドと同様のデータ形式に変換してデバイスドライバ１１２に送る。
【００２６】
さらに、仮想化制御部１１３は、外部デバイス３００に対するデータ送受信要求に対して、外部デバイス３００が情報処理装置１００に直接的に接続（ローカル接続）されている際と同様の振る舞いをシミュレートする機能（以下「仮想化制御機能」と呼ぶ）を備えている。この仮想化制御機能により、情報処理装置１００は外部デバイス３００の接続状態が、外部デバイス３００をローカル接続した場合と同一の状態であると認識してデータの送受信を行うことができる。なお、仮想化制御部１１３が有する仮想化制御機能によって、情報処理装置１００がローカル接続した場合と同一の状態であると認識した外部デバイス３００を「仮想デバイス」と呼ぶ。
【００２７】
通信制御部１１４は、仮想化制御部１１３から送られるＵＳＢデータとネットワーク（ＬＡＮおよびＷＡＮ）を介してデバイス制御装置２００と通信する際のネットワークパケットとの変換処理を行い、デバイス制御装置２００と情報処理装置１００の間でデータ送受信の制御を行う。また、通信制御部１１４は、仮想化制御部１１３を介してアプリケーション１１１またはデバイスドライバ１１２から送られるデータ送受信要求に応じて、デバイス制御装置２００とのセッション（接続）を開始し、データの送受信が完了すると、セッションを終了（切断）する。なお、情報処理装置１００とデバイス制御装置２００との間のセッションは、情報処理装置１００が仮想化制御する外部デバイス３００の数だけ生成される。
【００２８】
＜デバイス制御装置２００の構成＞
デバイス制御装置２００は、例えば、プリンタまたは複合機等の周辺機器であって、ハードウェア構成として、ＣＰＵ２０１、入力部２０２、表示部２０３、メモリ２０４、通信部２０５、および、記憶部２１０を備えている。
【００２９】
ＣＰＵ２０１はデバイス制御装置２００全体の制御を司る。入力部２０２は、例えば、操作ボタン、テンキーを備えている。表示部２０３として、例えば、液晶モニタが用いられる。メモリ２０４はＲＡＭおよびＲＯＭ等である。
【００３０】
通信部２０５はネットワークに接続するに接続するためのインターフェースであって、情報処理装置１００とデータ送受信を行う。
【００３１】
記憶部２１０には、ソフトウェアであるＯＳ（不図示）、通信制御部２１１、仮想化制御部２１２、デバイス制御部２１３、電源供給制御部２１４、およびデバイス状態管理部２１５が記憶されるとともに、他の機能に係るソフトウェアが記憶されている。なお、これらソフトウェアはメモリ２０４に読み出されて、ＣＰＵ２０１の制御に従い動作する。
【００３２】
通信制御部２１１は、ＯＳの制御に従ってネットワーク経由で接続されている情報処理装置１００との間のセッション（接続）の開始および終了を制御する。
【００３３】
また、通信制御部２１１は、仮想化制御部２１２から送られるＵＳＢデータとＬＡＮおよびＷＡＮなどのネットワークを介して情報処理装置１００と通信する際のネットワークパケットとの変換処理を行い、デバイス制御装置２００と情報処理装置１００の間でデータ送受信の制御を行う。
【００３４】
仮想化制御部２１２は、外部デバイス３００があたかも情報処理装置１００に直接的に接続（ローカル接続）されているかのように情報処理装置１００へ認識させて制御できるようにするため、情報処理装置１００からのデータ送受信の制御要求に従って（連動して）デバイス制御部２１３の制御を行う。なお、情報処理装置１００によって外部デバイス３００の仮想化制御を開始しているときは「仮想化制御開始」となり、外部デバイス３００の仮想化制御を終了しているときは「仮想化制御終了」となる。
【００３５】
デバイス制御部２１３は、仮想化制御部２１２の制御に従い、自装置に接続された外部デバイス３００を制御する。また、外部デバイス３００の接続（プラグイン）、抜去（プラグアウト）、差し替えなどの検知や監視を行う。
【００３６】
電源供給制御部２１４は、デバイス制御部２１３と連携して、デバイス制御装置２００に接続された外部デバイス３００のバス接続状態の監視、および、バス電源の供給（電源オン）、停止（電源オフ）を制御する。
【００３７】
デバイス状態管理部２１５は、デバイス制御装置２００に接続された外部デバイス３００に関する情報（後述するデバイス状態管理情報２１６）を認識・管理する。
【００３８】
＜外部デバイス３００の構成＞
外部デバイス３００は、個体識別情報３０１および通信Ｉ／Ｆ３０２を備えており、デバイス制御装置２００にＵＳＢインターフェースによって外付けで接続されている。
【００３９】
個体識別情報３０１は、外部デバイス３００を識別するための情報であり、メーカーを識別するために機器を製造したメーカー毎に割り当てられたベンダーＩＤ（ＶＩＤ）、機種を識別するために機種毎に割り当てられた製品ＩＤ（ＰＩＤ）、機器の個体を識別するために機器毎に割り当てられたシリアル番号などである。
【００４０】
通信Ｉ／Ｆ３０２は、デバイス制御装置２００と通信を行うための機能部である。
【００４１】
＜デバイス状態管理情報２１６について＞
次に、デバイス制御装置２００が有するデバイス状態管理情報２１６について説明する。デバイス状態管理情報２１６は、デバイス制御装置２００に接続された外部デバイス３００のバス電源供給の状態を含む外部デバイス３００の情報である。
【００４２】
図２は、図１に示すデバイス状態管理情報２１６の一例を示す図である。デバイス状態管理情報２１６は、デバイス名、ベンダーＩＤ、製品ＩＤ、シリアル番号、デバイス制御装置デバイス接続ポート番号、デバイス電源状態から構成される。
【００４３】
デバイス名は、デバイス制御装置２００に接続された外部デバイス３００の名称を示し、主にＵＳＢディスクリプタ情報から取得されるデバイス名称である。なお、デバイス名はＵＳＢディスクリプタ情報から取得するだけでなく、外部デバイス３００を識別できるような情報であればよい。
【００４４】
ベンダーＩＤ、製品ＩＤ、シリアル番号は、前述のとおりである。
【００４５】
デバイス制御装置の接続ポート番号は、デバイス制御装置２００に接続された外部デバイス３００の物理的な接続位置をバスの接続階層に従い識別する情報である。
【００４６】
デバイス電源状態は、デバイス制御装置２００に接続された外部デバイス３００に対して、デバイス制御装置２００がバスの電源を供給しているか停止しているかを示す情報である。図２の例示では、デバイスＡとデバイスＢは「給電」されており、デバイスＣとデバイスＤは給電を「停止」されている。
【００４７】
＜デバイス制御装置２００における外部デバイス３００の抜去検知について＞
図３は、図１に示すデバイス制御装置２００における外部デバイス３００の抜去検知制御の一例を示すフローチャートである。なお、デバイス制御装置２００に外部デバイス３００が接続され、情報処理装置１００が外部デバイス３００を仮想化制御している状態から説明を開始する。なお、情報処理装置における外部デバイス３００の仮想化制御については、後述する図４のシーケンスを用いて説明する。また、外部デバイス３００の抜去検知とは、デバイス制御装置２００から外部デバイス３００の抜去（抜き取られたこと）を検知することである。
【００４８】
電源供給制御部２１４は、情報処理装置１００からの電源供給停止指示（電源供給停止命令）の受信に応じて、外部デバイス３００のデバイス接続ポートのバスに対する電源供給を停止する（ステップＳ１０１）。
【００４９】
デバイス制御装置２００は外部デバイス３００のプラグアウト（接続切断・抜去）を検知したか判断する（ステップＳ１０２）。ここで、外部デバイス３００のプラグアウトを検知しない場合（ステップＳ１０２でＮｏ）、ステップＳ１２１に進む。なお、プラグアウトを検知しない場合とは、例えば、電源供給制御部２１４によって外部デバイス３００に対して電源供給を停止したがデバイス状態管理情報２１６には外部デバイス３００のデバイス情報がプラグイン状態として記憶されているときやデバイス制御装置２００がデバイス接続ポート毎に外部デバイス３００に対する電源制御を行えないとき（デバイス制御装置２００が外部デバイス３００の接続ポート毎に電源制御を行うことができず、外部デバイス３００のプラグインの検知処理が未対応のとき）などである。
【００５０】
また、デバイス制御装置２００は、外部デバイス３００のプラグアウトを所定時間（タイプアウト）に達しない場合（ステップＳ１２１でＮｏ）、ステップＳ１０２に戻り、外部デバイス３００におけるプラグアウトの検知の監視を継続する。
【００５１】
デバイス制御装置２００は外部デバイス３００のプラグアウトを検知した場合（ステップＳ１０２でＹｅｓ）、デバイス状態管理部２１５は、デバイス状態管理情報２１６におけるプラグアウト（接続切断）を検知した外部デバイス３００のデバイス電源状態を「停止」に更新する（ステップＳ１０３）。
【００５２】
電源供給制御部２１４は、情報処理装置１００からの電源供給開始指示（電源供給開始命令）の受信に応じて、外部デバイス３００の接続ポートに対する電源供給を開始（再開）する（ステップＳ１０４）。
【００５３】
デバイス制御部２１３は、外部デバイス３００の接続検知の有無（プラグイン検知・プラグインの未検知）を判断する（ステップＳ１０５）。
【００５４】
デバイス制御部２１３は、外部デバイス３００の接続検知がない（プラグイン未検知）と判断した場合（ステップＳ１０５でＹｅｓ）、通信制御部２１１を介して情報処理装置１００に外部デバイス３００のプラグアウト（接続切断）を通知する（ステップＳ１０６）。
【００５５】
デバイス状態管理部２１５は、デバイス状態管理情報２１６からプラグインを検知しなかった外部デバイス３００の情報を削除または無効にする（ステップＳ１０７）。その後、本制御フローを終了する。
【００５６】
ステップＳ１０５において、デバイス制御部２１３は外部デバイス３００のプラグインを検知した場合（ステップＳ１０５でＮｏ）、デバイス状態管理部２１５は、デバイス状態管理情報２１６における該当の外部デバイス３００におけるデバイス電源状態を「給電」に更新（変更）する。（ステップＳ１１１）。その後、本制御フローを終了する。
【００５７】
一方、ステップＳ１２１において、デバイス制御部２１３は、外部デバイス３００のプラグアウトを所定時間経過（タイムアウト）後も検知できなかった場合（ステップＳ１２１でＹｅｓ）は、デバイス制御装置２００がデバイス接続ポート毎に外部デバイス３００に対する電源制御を行えないこと（デバイス制御装置２００に接続されている外部デバイス３００各々に対する電源制御未対応である旨）を情報処理装置１００に通知する（ステップＳ１２２）。その後、本制御フローを終了する。
【００５８】
＜第１の実施形態における電源制御シーケンス＞
図４は、図１に示すデバイス制御装置２００における外部デバイス３００抜去時の電源制御の一例について説明するシーケンス図である。なお、デバイス制御装置２００に外部デバイス３００が接続され情報処理装置１００がデバイス制御装置２００を介して外部デバイス３００のデバイス情報を取得している状態から説明を開始する。
【００５９】
初めに、情報処理装置１００による外部デバイス３００の仮想化制御の開始およびプラグインについて説明する。
【００６０】
入力部１０２を介したユーザ操作により、アプリケーション１１１は、仮想化制御を行う外部デバイス３００を選択し（ステップＳ２０１）、デバイスドライバ１１２に対して電源供給開始を含む仮想化開始要求を送信する（ステップＳ２０２）。
【００６１】
デバイスドライバ１１２は、ステップＳ２０２でアプリケーション１１１から送信された電源供給開始を含む仮想化開始要求に基づいて、電源供給開始を含む仮想化開始命令を生成し、仮想化制御部１１３に送信する（ステップＳ２０３）。
【００６２】
仮想化制御部１１３は、通信制御部１１４を介してデバイス制御装置２００の仮想化制御部２１２に対して電源供給開始を含む仮想化開始命令を送信する（ステップＳ２０４）。
【００６３】
仮想化制御部２１２は、ステップＳ２０４で情報処理装置１００から送信された電源供給開始を含む仮想化開始命令を受信し、デバイス制御部２１３に対して外部デバイス３００の電源供給開始命令を行う（ステップＳ２０５）。
【００６４】
デバイス制御部２１３は、外部デバイス３００の電源供給開始命令により通知されたバスの接続ポート番号を指定して電源供給開始命令を電源供給制御部２１４に送信する（ステップＳ２０６）。
【００６５】
電源供給制御部２１４は、指定された接続ポート番号に対してバスの電源供給を開始し（ステップＳ２０７）、外部デバイス３００に電源を供給する（ステップＳ２０８）。これにより、外部デバイス３００は、物理的に挿抜されなくとも、ＵＳＢインターフェースを介してデバイス制御装置２００に新たに挿入された時と同様に、物理的に接続された状態となる。
【００６６】
電源供給制御部２１４は、デバイス制御部２１３に電源供給開始通知を送信する（ステップＳ２１１）。
【００６７】
デバイス制御部２１３は、電源供給制御部２１４から送信された電源供給開始通知を受信する。その後、デバイス制御部２１３は、外部デバイス３００への電源供給後に外部デバイス３００の接続を検知した場合、外部デバイス３００への電源供給開始および外部デバイス３００の物理的な接続（以下、デバイス接続通知）をデバイス状態管理部２１５および仮想化制御部２１２に通知する（ステップＳ２１２、ステップＳ２１３）。
【００６８】
仮想化制御部２１２は、外部デバイス３００のデバイス接続通知の受信に応じて、外部デバイス３００の仮想化制御を開始する（ステップＳ２１４）。さらに、デバイス状態管理部２１５に仮想化制御の開始を通知する。
【００６９】
仮想化制御部２１２は、通信制御部２１１を介して情報処理装置１００の仮想化制御部１１３に対して電源供給開始を含む仮想化開始通知を送信する（ステップＳ２１５）。
【００７０】
仮想化制御部１１３は、デバイスドライバ１１２に対して外部デバイス３００の仮想化開始通知を送信する（ステップＳ２１６）。
【００７１】
デバイスドライバ１１２は、アプリケーション１１１に対して外部デバイス３００の仮想化開始通知を送信する（ステップＳ２１７）。このとき、情報処理装置１００は、外部デバイス３００が情報処理装置１００自身にあたかも物理的に接続されている（ローカル接続されている）かのように認識可能になる。
【００７２】
デバイス状態管理部２１５は、外部デバイス３００のデバイス状態管理情報２１６のデバイス電力状態を「給電中」に更新して記憶する（ステップＳ２１８）。
【００７３】
次に、情報処理装置１００による外部デバイス３００の仮想化制御の終了およびプラグアウトについて説明する。
【００７４】
まず、入力部１０２を介したユーザ操作により、アプリケーション１１１は、仮想化制御を終了させる外部デバイス３００を選択する（ステップＳ２２１）。例えば、情報処理装置１００の表示部１０３に操作画面を表示させ、ユーザ操作によって、仮想化制御の終了を要求する外部デバイス３００を選択する。
【００７５】
アプリケーション１１１は、デバイスドライバ１１２に対して外部デバイス３００への電源供給停止を含む仮想化終了要求を送信する（ステップＳ２２２）。なお、仮想化制御終了要求とは、情報処理装置１００における外部デバイス３００の仮想化制御を終了するための要求である。
【００７６】
デバイスドライバ１１２は、仮想化制御部１１３に対して、ステップＳ２２２でアプリケーション１１１から送信された外部デバイス３００への電源供給停止を含む仮想化終了要求に基づいて制御コマンド（電源供給停止を含む仮想化終了命令）を生成し、送信する（ステップＳ２２３）。
【００７７】
仮想化制御部１１３は、通信制御部１１４を介してデバイス制御装置２００の仮想化制御部２１２に対して電源供給停止を含む仮想化終了命令を送信する（ステップＳ２２４）。
【００７８】
仮想化制御部２１２は、ステップＳ２２４で情報処理装置１００から送信された電源供給停止を含む仮想化終了命令を受信し、デバイス制御部２１３に対して外部デバイス３００に対する電源供給停止命令を送信する（ステップＳ２２５）。
【００７９】
デバイス制御部２１３は、電源供給制御部２１４に対して外部デバイス３００の接続ポート番号を指定して電源供給停止命令を送信する（ステップＳ２２６）。
【００８０】
電源供給制御部２１４は、電源供給停止命令によって指定された接続ポート番号に対してバスの電源供給を停止する（ステップＳ２２７）。これにより、外部デバイス３００は、デバイス制御装置２００からプラグアウト（抜去）された時（物理的に接続されていない状態「デバイス接続切断状態」）と同一の状態となる。
【００８１】
ここで、ユーザにより、デバイス制御装置２００に接続されていた外部デバイス３００が抜去された（ステップＳ２２８）こととして、これ以降、デバイス制御装置２００は、外部デバイス３００のプラグアウト（抜去）の検知に関する処理について説明する。
【００８２】
電源供給制御部２１４は、ステップＳ２０７により外部デバイス３００のデバイス接続切断状態と同一の状態の場合、デバイス制御部２１３に電源供給停止を通知する（ステップＳ２３１）。
【００８３】
デバイス制御部２１３は、電源供給制御部２１４から外部デバイス３００の電源供給停止の通知を受信すると、外部デバイス３００のプラグアウト（抜去）を検知する（ステップＳ２３２）。
【００８４】
デバイス制御部２１３は、仮想化制御部２１２およびデバイス状態管理部２１５に対して外部デバイス３００の電源供給停止およびプラグアウトを通知する（ステップＳ２３３、ステップＳ２３４）。
【００８５】
仮想化制御部２１２は、外部デバイス３００の電源供給停止およびプラグアウトの通知に応じて、外部デバイス３００の仮想化制御を終了する（ステップＳ２３５）。さらに、デバイス状態管理部２１５に仮想化制御の終了を通知する。
【００８６】
その後、仮想化制御部２１２は、デバイス制御装置２００の通信制御部２１１を介して情報処理装置１００の仮想化制御部１１３に対して外部デバイス３００の電源供給停止およびプラグアウトを通知する（ステップＳ２３６）。
【００８７】
仮想化制御部１１３は、デバイスドライバ１１２に対して外部デバイス３００の電源供給停止およびプラグアウトを通知する（ステップＳ２３７）。
【００８８】
デバイスドライバ１１２は、アプリケーション１１１に対して外部デバイス３００の電源供給停止およびプラグアウトを通知する（ステップＳ２３８）。このとき、情報処理装置１００は、情報処理装置１００自身にあたかも物理的に接続されている（ローカル接続されている）かのように認識している外部デバイス３００（仮想デバイス）の仮想化制御の終了を検知する。なお、ステップＳ２３６〜ステップＳ２３８において、外部デバイス３００の電源供給停止およびプラグアウトに併せて、外部デバイス３００の仮想化制御終了を通知してもよい。
【００８９】
デバイス状態管理部２１５は、仮想化制御部２１２による外部デバイス３００の仮想化制御の終了、および、電源供給制御部２１４による外部デバイス３００に対する電源供給停止を受けて、デバイス状態管理情報２１６における該当の外部デバイス３００のデバイス電源状態を「停止」に更新する（ステップＳ２３９）。なお、ステップＳ２３４の後に、デバイス状態管理部２１５は、デバイス状態管理情報２１６における該当の外部デバイス３００のデバイス電源状態を「停止」に更新してもよい。
【００９０】
続いて、情報処理装置１００による外部デバイス３００の仮想化制御の開始および電源供給開始、デバイス制御装置２００による外部デバイス３００のプラグアウトの検知について説明する。
【００９１】
入力部１０２を介したユーザ操作により、アプリケーション１１１は、仮想化制御を行う外部デバイス３００を選択し（ステップＳ２４１）、デバイスドライバ１１２に対して電源供給開始を含む仮想化開始要求を送信する（ステップＳ２４２）。なお、仮想化制御開始要求とは、情報処理装置１００における外部デバイス３００の仮想化制御を開始するための要求である。
【００９２】
デバイスドライバ１１２は、ステップＳ１０２でアプリケーション１１１から送信された電源供給開始を含む仮想化開始要求に基づいて、電源供給開始を含む仮想化開始命令を生成し、仮想化制御部１１３に送信する（ステップＳ２４３）。
【００９３】
仮想化制御部１１３は、通信制御部１１４を介してデバイス制御装置２００の仮想化制御部２１２に対して電源供給開始を含む仮想化開始命令を送信する（ステップＳ２４４）。
【００９４】
仮想化制御部２１２は、ステップＳ２４４で情報処理装置１００から送信された電源供給開始を含む仮想化開始命令を受信し、デバイス制御部２１３に対して外部デバイス３００の電源供給開始命令を行う（ステップＳ２４５）。
【００９５】
デバイス制御部２１３は、外部デバイス３００の電源供給開始命令により通知されたバスの接続ポート番号を指定して電源供給開始命令を電源供給制御部２１４に送信する（ステップＳ２４６）。
【００９６】
電源供給制御部２１４は、指定された接続ポート番号に対してバスの電源供給を開始し（ステップＳ２４７）、外部デバイス３００に電源を供給する（ステップＳ２４８）。
【００９７】
電源供給制御部２１４は、デバイス制御部２１３に電源供給開始通知を送信する（ステップＳ２４９）。
【００９８】
電源供給制御部２１４から送信された電源供給開始通知を受信したデバイス制御部２１３は外部デバイス３００の接続を監視し、外部デバイス３００のプラグインの有無を判断する（ステップＳ２５０）。しかし、ステップＳ２２８において、外部デバイス３００はデバイス制御装置２００からプラグアウト（抜去）されているため、ここでは外部デバイス３００のプラグインを検知できない。
【００９９】
デバイス制御部２１３は、所定時間内に外部デバイス３００のプラグインを検出できないため、仮想化制御部２１２およびデバイス状態管理部２１５に対して外部デバイス３００のプラグアウトを通知する（ステップＳ２５１、ステップＳ２５２）。
【０１００】
仮想化制御部２１２は、通信制御部２１１を介して情報処理装置１００の仮想化制御部１１３に対してプラグアウト通知を送信する（ステップＳ２５３）。
【０１０１】
仮想化制御部１１３は、デバイスドライバ１１２に対して外部デバイス３００のプラグアウト通知を送信する（ステップＳ２５４）。
【０１０２】
デバイスドライバ１１２は、アプリケーション１１１に対して外部デバイス３００のプラグアウト通知を送信する（ステップＳ２５５）。
【０１０３】
デバイス状態管理部２１５は、デバイス制御部２１３によるプラグアウト通知の受信に応じて、デバイス状態管理情報２１６における該当の外部デバイス３００に関する情報を削除する（ステップＳ２５６）。なお、ステップＳ２５６において、デバイス状態管理部２１５は、デバイス制御部２１３によるプラグアウト通知の受信に応じて、デバイス状態管理情報２１６における該当の外部デバイス３００に関する情報を削除せずに無効（参照不可）にしてもよい。また、ステップＳ２３２の後に、デバイス状態管理部２１５は、デバイス状態管理情報２１６における該当の外部デバイス３００に関する情報を削除または無効にしてもよい。
【０１０４】
また、ステップＳ２３８において、デバイス制御装置２００に接続されていた外部デバイス３００を抜去すると説明したが、電源供給制御部２１４における電源供給開始（ステップＳ２４７）の前にデバイス制御装置２００に接続されていた外部デバイス３００が抜去されていればよい（ステップＳ２２８〜ステップＳ２４６の間であれば、外部デバイス３００はいつ抜去されてもよい）。
【０１０５】
さらに、ステップＳ２３６〜ステップＳ２３８において、外部デバイス３００への電源供給停止および外部デバイス３００のプラグアウトに関する通知を行うと説明したが、外部デバイス３００のプラグアウトの通知のみを行ってもよい。
【０１０６】
上述のように、本発明の第１の実施形態によれば、デバイス制御装置２００が電源供給停止中の外部デバイス３００に対して、電源供給を再開するタイミングでプラグインの有無を検知（判定）することにより、電源供給停止中に発生した外部デバイス３００のプラグアウト（抜去）を検知することができる。
【０１０７】
従って、外部デバイス３００のプラグアウト（抜去）が発生した際に情報処理装置１００が認識している外部デバイス３００の接続（抜去）状態と外部デバイス３００の接続（抜去）状態の不整合を防止できる。そのため、デバイス制御装置２００からプラグアウト（抜去）された外部デバイス３００に対して情報処理装置１００から不要な制御を防止できる。
【０１０８】
[第２の実施形態]
続いて、本発明の第２の実施形態によるデバイス制御システムの一例について説明する。
【０１０９】
デバイス制御装置２００に接続された外部デバイス３００を情報処理装置１００が仮想化制御している際に、ユーザによって外部デバイス３００の差し替えが行われる場合がある。本発明の第２の実施形態では、デバイス制御装置２００が外部デバイス３００の差し替え（挿抜）を検知し、情報処理装置１００に通知することによって、情報処理装置が外部デバイス３００の差し替えを認識できる例について説明する。
【０１１０】
＜システム構成＞
なお、第２の実施形態のおけるデバイス制御システムは、図１で示したデバイス制御システムと同様であるため、同様の参照番号を付し説明を省略する。
【０１１１】
＜デバイス制御装置２００における外部デバイス３００の差し替え検知について＞
図５は、図１に示すデバイス制御装置２００における外部デバイス３００の差し替え検知制御の一例を示すフローチャートである。なお、外部デバイスＡ３００Ａから外部デバイスＢ３００Ｂに差し替えられ場合について説明する。また、デバイス制御装置２００に外部デバイスＡ３００Ａが接続されている状態から説明を開始する。
【０１１２】
電源供給制御部２１４は、情報処理装置１００からの電源供給停止指示（電源供給停止命令）の受信に応じて、外部デバイス３００の接続ポートに対する電源供給を停止する（ステップＳ３０１）。
【０１１３】
デバイス制御装置２００は外部デバイス３００のプラグアウト（接続切断・抜去）を検知したか判断する（ステップＳ３０２）。ここで、外部デバイス３００のプラグアウトを検知しない場合（ステップＳ３０２でＮｏ）、ステップＳ３２１に進む。なお、プラグアウトを検知しない場合とは、例えば、電源供給制御部２１４によって外部デバイス３００に対して電源供給を停止したが、デバイス状態管理情報２１６において、外部デバイス３００が接続されている（プラグイン）状態やデバイス制御装置２００がデバイス接続ポート毎に外部デバイス３００に対する電源制御を行えないとき（デバイス制御装置２００が接続ポート毎の電源制御未対応のとき）などである。
【０１１４】
また、デバイス制御装置２００は、外部デバイス３００のプラグアウトを所定時間（タイプアウト）に達しない場合（ステップＳ３２１でＮｏ）、ステップＳ３０２に戻り、外部デバイス３００におけるプラグアウトの検知の監視を継続する。
【０１１５】
デバイス制御装置２００は外部デバイス３００のプラグアウトを検知した場合（ステップＳ３０２でＹｅｓ）、デバイス状態管理部２１５は、デバイス状態管理情報２１６におけるプラグアウト（接続切断）を検知した外部デバイス３００のデバイス電源状態を「停止」に更新する（ステップＳ３０３）。
【０１１６】
電源供給制御部２１４は、情報処理装置１００からの電源供給開始指示の受信に応じて、外部デバイス３００の接続ポートに対する電源供給を開始（再開）する（ステップＳ３０４）。
【０１１７】
デバイス制御部２１３は、ステップＳ３０２におけるプラグアウト発生時の外部デバイス３００（外部デバイスＡ３００Ａ）と異なる外部デバイス３００（外部デバイスＢ３００Ｂ）のプラグインを検知したか判断する（ステップＳ３０５）。
【０１１８】
デバイス制御部２１３は、ステップＳ３０２におけるプラグアウト発生時の外部デバイス３００（外部デバイスＡ３００Ａ）と異なる外部デバイス３００（外部デバイスＢ３００Ｂ）のプラグインを検知した場合（ステップＳ３０５でＹｅｓ）、通信制御部２１１を介して情報処理装置１００に外部デバイス３００（外部デバイスＡ３００Ａ）のプラグアウト（外部デバイスＡ３００Ａの接続切断・抜去）を通知する（ステップＳ３０６）。
【０１１９】
デバイス状態管理部２１５は、デバイス状態管理情報２１６の該当する外部デバイス３００の情報（プラグアウトが検知された外部デバイスＡ３００Ａの情報）を新しく接続された外部デバイス３００の情報（プラグインが検知された外部デバイスＢ３００Ｂの情報）に更新する（ステップＳ３０７）。また、デバイス状態管理部２１５は、外部デバイスＡ３００Ａの情報を削除または無効にし、外部デバイスＢ３００Ｂの情報を追加または有効（既に外部デバイスＢ３００Ｂの情報を記憶し、無効になっている場合）にしてもよい。
【０１２０】
デバイス制御装置２００は、情報処理装置１００に外部デバイス３００（外部デバイスＢ３００Ｂ）のプラグイン（接続）を通知する（ステップＳ３０８）。その後、ステップＳ３０９に進む。
【０１２１】
一方、ステップＳ３０５において、ステップＳ３０２のプラグアウト発生時の外部デバイス３００（外部デバイスＡ３００Ａ）と同一の外部デバイス３００のプラグインを検知した場合（ステップＳ３０５でＮｏ）も、ステップＳ３０９に進む。
【０１２２】
ステップＳ３０９において、デバイス状態管理部２１５は、デバイス状態管理情報２１６における該当の外部デバイス３００（外部デバイスＡ３００Ａまたは外部デバイスＢ３００Ｂ）におけるデバイス電源状態を「給電」に更新（変更）する。その後、本制御フローを終了する。
【０１２３】
ステップＳ３２１において、デバイス制御部２１３は、外部デバイス３００のプラグアウトを所定時間経過（タイムアウト）後も検知しなかった場合（ステップＳ３２１でＹｅｓ）は、デバイス制御装置２００がデバイス接続ポート毎に外部デバイス３００に対する電源制御を行えないこと（デバイス制御装置２００に接続されている外部デバイス３００各々に対する電源制御未対応である旨）を情報処理装置１００に通知する（ステップＳ３２２）。その後、本制御フローを終了する。
【０１２４】
なお、ステップＳ３０６における外部デバイスＡ３００Ａのプラグアウトの通知と、ステップＳ３０８における外部デバイスＢ３００Ｂのプラグインの通知を別々に情報処理装置に行うと説明したが、外部デバイスＡ３００Ａのプラグアウトと外部デバイスＢ３００Ｂのプラグインを一緒に通知してもよい。
【０１２５】
また、ステップＳ３０７において、デバイス状態管理部２１５は、デバイス状態管理情報２１６の該当する外部デバイス３００の情報（プラグアウトが検知された外部デバイスＡ３００Ａの情報）を新しく接続された外部デバイス３００の情報（プラグインが検知された外部デバイスＢ３００Ｂの情報）に更新すると説明したが、ステップＳ３０６における外部デバイスＡ３００Ａのプラグアウトの通知とステップＳ３０８における外部デバイスＢ３００Ｂのプラグインの通知の前や後にデバイス状態管理情報２１６を更新してよい。また、ステップＳ３０６〜ステップＳ３０８の処理は順序が入れ替わってもよい。
【０１２６】
＜第２の実施形態における電源制御シーケンス＞
図６は、本発明の第２の実施形態に係るデバイス制御装置２００による外部デバイス３００差し替え時の電源制御について説明するシーケンス図である。なお、デバイス制御装置２００に外部デバイスＡ３００Ａが接続され、情報処理装置１００が外部デバイスＡ３００Ａを仮想化制御している状態から説明を開始する。
【０１２７】
初めに、情報処理装置１００による外部デバイスＡ３００Ａの仮想化制御の終了およびプラグアウトについて説明する。
【０１２８】
まず、入力部１０２を介したユーザ操作により、アプリケーション１１１は、仮想化制御を終了させる外部デバイス３００を選択する（ステップＳ４０１）。例えば、情報処理装置１００の表示部１０３に操作画面を表示させ、ユーザ操作によって、仮想化制御の終了を要求する外部デバイス３００（外部デバイスＡ３００Ａ）を選択する。
【０１２９】
アプリケーション１１１は、デバイスドライバ１１２に対して外部デバイスＡ３００Ａへの電源供給停止を含む仮想化終了要求を送信する（ステップＳ４０２）。
【０１３０】
デバイスドライバ１１２は、仮想化制御部１１３に対して、ステップＳ４０２でアプリケーション１１１から送信された外部デバイスＡ３００Ａへの電源供給停止を含む仮想化終了要求に基づいて制御コマンド（電源供給停止を含む仮想化終了命令）を生成し、送信する（ステップＳ４０３）。
【０１３１】
仮想化制御部１１３は、通信制御部１１４を介してデバイス制御装置２００の仮想化制御部２１２に対して電源供給停止を含む仮想化終了命令を送信する（ステップＳ４０４）。
【０１３２】
仮想化制御部２１２は、ステップＳ４０４で情報処理装置１００から送信された電源供給停止を含む仮想化終了命令を受信し、デバイス制御部２１３に対して外部デバイスＡ３００Ａに対する電源供給停止命令を送信する（ステップＳ４０５）。
【０１３３】
デバイス制御部２１３は、電源供給制御部２１４に対して外部デバイスＡ３００Ａの接続ポート番号を指定して電源供給停止命令を送信する（ステップＳ４０６）。
【０１３４】
電源供給制御部２１４は、電源供給停止命令によって指定された接続ポート番号に対してバスの電源供給を停止する（ステップＳ４０７）。これにより、外部デバイスＡ３００Ａは、デバイス制御装置２００からプラグアウト（抜去）された時（物理的に接続されていない状態「デバイス接続切断状態」）と同一の状態となる。
【０１３５】
電源供給制御部２１４は、ステップＳ４０７により外部デバイスＡ３００Ａのデバイス接続切断状態と同一の状態の場合、デバイス制御部２１３に電源供給停止を通知する（ステップＳ４１１）。
【０１３６】
デバイス制御部２１３は、電源供給制御部２１４から外部デバイス３００の電源供給停止の通知を受信すると、外部デバイスＡ３００Ａのプラグアウト（抜去）を検知する（ステップＳ４１２）。
【０１３７】
デバイス制御部２１３は、仮想化制御部２１２およびデバイス状態管理部２１５に対して外部デバイスＡ３００Ａの電源供給停止およびプラグアウトを通知する（ステップＳ４１３、ステップＳ４１４）。
【０１３８】
仮想化制御部２１２は、外部デバイスＡ３００Ａの電源供給停止および外部デバイスＡ３００Ａのプラグアウトの通知に応じて、外部デバイスＡ３００Ａの仮想化制御を終了する（ステップＳ４１５）。さらに、デバイス状態管理部２１５に仮想化制御の終了を通知する。
【０１３９】
その後、仮想化制御部２１２は、デバイス制御装置２００の通信制御部２１１を介して情報処理装置１００の仮想化制御部１１３に対して外部デバイスＡ３００Ａの電源供給停止および外部デバイスＡ３００Ａのプラグアウトを通知する（ステップＳ４１６）。
【０１４０】
仮想化制御部１１３は、デバイスドライバ１１２に対して外部デバイスＡ３００Ａの電源供給停止および外部デバイスＡ３００Ａのプラグアウトを通知する（ステップＳ４１７）。
【０１４１】
デバイスドライバ１１２は、アプリケーション１１１に対して外部デバイスＡ３００Ａの電源供給停止および外部デバイスＡ３００Ａのプラグアウトを通知する（ステップＳ４１８）。このとき、情報処理装置１００は、情報処理装置１００自身にあたかも物理的に接続されている（ローカル接続されている）かのように認識している外部デバイスＡ３００Ａ（仮想デバイス）の仮想化制御の終了を検知する。なお、ステップＳ４１６〜ステップＳ４１８において、外部デバイスＡ３００Ａの電源供給停止および外部デバイスＡ３００Ａのプラグアウトに併せて、外部デバイスＡ３００Ａの仮想化制御終了を通知してもよい。
【０１４２】
デバイス状態管理部２１５は、仮想化制御部２１２による外部デバイスＡ３００Ａの仮想化制御の終了、および、電源供給制御部２１４による外部デバイス３００に対する電源供給停止を受けて、デバイス状態管理情報２１６における該当の外部デバイスＡ３００Ａのデバイス電源状態を「停止」に更新する（ステップＳ４１９）。なお、ステップＳ４１４の後に、デバイス状態管理部２１５は、デバイス状態管理情報２１６における該当の外部デバイス３００のデバイス電源状態を「停止」に更新してもよい。
【０１４３】
ここで、ユーザにより、デバイス制御装置２００に接続されていた外部デバイスＡ３００Ａが抜去され（ステップＳ４２１）、新たに外部デバイスＢ３００Ｂが接続された（ステップＳ４２２）こととして、これ以降は、デバイス制御装置２００における外部デバイスの差し替えの検知に関する処理について説明する。
【０１４４】
続いて、情報処理装置１００による外部デバイス３００の仮想化制御の開始および電源供給開始、デバイス制御装置２００による外部デバイス３００（外部デバイスＢ３００Ｂ）のプラグインの検知について説明する。
【０１４５】
入力部１０２を介したユーザ操作により、アプリケーション１１１は、仮想化制御を行う外部デバイス３００を選択し（ステップＳ４３１）、デバイスドライバ１１２に対して電源供給開始を含む仮想化開始要求を送信する（ステップＳ４３２）。
【０１４６】
デバイスドライバ１１２は、ステップＳ４３２でアプリケーション１１１から送信された電源供給開始を含む仮想化開始要求に基づいて、電源供給開始を含む仮想化開始命令を生成し、仮想化制御部１１３に送信する（ステップＳ４３３）。
【０１４７】
仮想化制御部１１３は、通信制御部１１４を介してデバイス制御装置２００の仮想化制御部２１２に対して電源供給開始を含む仮想化開始命令を送信する（ステップＳ４３４）。
【０１４８】
仮想化制御部２１２は、ステップＳ４３４で情報処理装置１００から送信された電源供給開始を含む仮想化開始命令を受信し、デバイス制御部２１３に対して外部デバイス３００の電源供給開始命令を行う（ステップＳ４３５）。
【０１４９】
デバイス制御部２１３は、外部デバイス３００の電源供給開始命令により通知されたバスの接続ポート番号を指定して電源供給開始命令を電源供給制御部２１４に送信する（ステップＳ４３６）。
【０１５０】
電源供給制御部２１４は、指定された接続ポート番号に対してバスの電源供給を開始し（ステップＳ４３７）、外部デバイス３００に電源を供給する（ステップＳ４３８）。
【０１５１】
電源供給制御部２１４は、デバイス制御部２１３に電源供給開始通知を送信する（ステップＳ４３９）。
【０１５２】
デバイス制御部２１３は、電源供給制御部２１４から送信された電源供給開始通知を受信する。その後、デバイス制御部２１３は、電源供給制御部２１４による外部デバイス３００への電源供給後に外部デバイス３００の接続を監視する。ここで、デバイス制御部２１３は外部デバイス３００の差し替え（外部デバイスＡ３００Ａから外部デバイスＢ３００Ｂに差し替え）を検知する（ステップＳ４４０）。なお、デバイス制御部２１３は、デバイス状態管理情報２１６を参照して、外部デバイス３００の差し替え（外部デバイスＡ３００Ａから外部デバイスＢ３００Ｂに差し替え）の発生を判断する。
【０１５３】
ここからは、デバイス制御装置２００における外部デバイス３００の差し替えに関する情報処理装置１００への通知について説明する。最初に外部デバイスＡ３００Ａのプラグアウトについての通知について説明する。
【０１５４】
デバイス制御部２１３は、ステップＳ４４０において、外部デバイス３００の差し替え（外部デバイスＡ３００Ａから外部デバイスＢ３００Ｂに差し替え）を検知した場合、仮想化制御部２１２およびデバイス状態管理部２１５に対して外部デバイスＡ３００Ａのプラグアウトを通知する（ステップＳ４４１、ステップＳ４４２）。
【０１５５】
仮想化制御部２１２は、通信制御部２１１を介して情報処理装置１００の仮想化制御部１１３に対して外部デバイスＡ３００Ａのプラグアウトを通知する（ステップＳ４４３）。
【０１５６】
仮想化制御部１１３は、デバイスドライバ１１２に対して外部デバイスＡ３００Ａのプラグアウトを通知する（ステップＳ４４４）。
【０１５７】
デバイスドライバ１１２は、アプリケーション１１１に対して外部デバイスＡ３００Ａのプラグアウトを通知する（ステップＳ４４５）。
【０１５８】
デバイス状態管理部２１５は、デバイス制御部２１３による外部デバイスＡ３００Ａのプラグアウト通知の受信に応じて、デバイス状態管理情報２１６における該当の外部デバイス３００（外部デバイスＡ３００Ａ）に関する情報を削除する（ステップＳ４４６）。なお、ステップＳ４４６において、デバイス状態管理部２１５は、デバイス制御部２１３によるプラグアウト通知の受信に応じて、デバイス状態管理情報２１６における該当の外部デバイス３００（外部デバイスＡ３００Ａ）に関する情報を削除せずに無効（参照不可）にしてもよい。またステップＳ４４２の後に、デバイス状態管理部２１５は、デバイス状態管理情報２１６における該当の外部デバイス３００（外部デバイスＡ３００Ａ）に関する情報を削除または無効にしてもよい。
【０１５９】
次に外部デバイスＢ３００Ｂのプラグインについての通知について説明する。
【０１６０】
デバイス制御部２１３は、ステップＳ４４０において、外部デバイス３００の接続および差し替え（外部デバイスＡ３００Ａから外部デバイスＢ３００Ｂに差し替え）を検知した場合、仮想化制御部２１２およびデバイス状態管理部２１５に対して外部デバイスＢ３００Ｂの電源供給開始および外部デバイスＢ３００Ｂのプラグインを通知する（ステップＳ４５１、ステップＳ４５２）。
【０１６１】
仮想化制御部２１２は、外部デバイス３００のプラグイン通知の受信に応じて、外部デバイス３００の仮想化制御を開始する（ステップＳ４５３）。さらに、デバイス状態管理部２１５に仮想化制御の開始を通知する。
【０１６２】
仮想化制御部２１２は、通信制御部２１１を介して情報処理装置１００の仮想化制御部１１３に対して外部デバイスＢ３００Ｂの仮想化制御開始および外部デバイスＢ３００Ｂのプラグインを通知する（ステップＳ４５４）。
【０１６３】
仮想化制御部１１３は、デバイスドライバ１１２に対して外部デバイスＢ３００Ｂの仮想化制御開始および外部デバイスＢ３００Ｂのプラグインを通知する（ステップＳ４５５）。
【０１６４】
デバイスドライバ１１２は、アプリケーション１１１に対して外部デバイスＢ３００Ｂの仮想化制御開始および外部デバイスＢ３００Ｂのプラグインを通知する（ステップＳ４５６）。
【０１６５】
デバイス状態管理部２１５は、デバイス制御部２１３によるプラグイン通知の受信に応じて、デバイス状態管理情報２１６における該当の外部デバイス３００（外部デバイスＢ３００Ｂ）に関する情報を追加し、更新する（ステップＳ４５７）。なお、ステップＳ４５７において、デバイス状態管理部２１５は、デバイス制御部２１３によるプラグアウト通知の受信に応じて、デバイス状態管理情報２１６における該当の外部デバイス３００（外部デバイスＢ３００Ｂ）に関する情報を既に記憶し、無効になっている場合は、該当の外部デバイス３００（外部デバイスＢ３００Ｂ）に関する情報を有効にしてもよい。またステップＳ４５２の後に、デバイス状態管理部２１５は、デバイス状態管理情報２１６における該当の外部デバイス３００（外部デバイスＢ３００Ｂ）に関する情報を追加し、更新してもよい。
【０１６６】
なお、ステップＳ４２１〜ステップＳ４２２において、デバイス制御装置２００における外部デバイス３００の差し替え（プラグアウトおよびプラグイン）を説明したが、電源供給制御部２１４における電源供給開始（ステップＳ４３７）の前に外部デバイス３００の差し替えが行われていればよい（ステップＳ４１１〜ステップＳ４３６の間であれば、外部デバイス３００はいつ差し替えられてもよい）。
【０１６７】
また、ステップＳ４４１〜ステップＳ４４５における外部デバイスＡ３００Ａのプラグアウトの通知に関連する処理とステップＳ４５１〜ステップＳ４５２、ステップＳ４５４〜ステップＳ４５６における外部デバイスＢ３００Ｂのプラグインの通知に関連する処理を別々に行うように説明したが、これらの処理を一緒に行ってもよい。
【０１６８】
また、ステップＳ４５４〜ステップＳ４５６の処理において、外部デバイスＢ３００Ｂの電源供給開始および外部デバイスＢ３００Ｂのプラグインを通知することに加えて、電源供給開始を通知してもよい。
【０１６９】
上述のように、本発明の第２の実施形態によれば、デバイス制御装置２００は、電源供給停止中の外部デバイス３００に対して、電源供給を再開するタイミングで外部デバイス３００の差し替え（プラグアウトおよびプラグイン）の有無を検知（判定）することにより、電源供給停止中に発生した外部デバイス３００の差し替えを検知することができる。
【０１７０】
従って、外部デバイス３００の差し替え（外部デバイスＡ３００Ａから外部デバイスＢ３００Ｂに差し替え）が発生した際に情報処理装置１００が認識している外部デバイス３００の接続（抜去）状態と外部デバイス３００の接続（抜去）状態の不整合を防止でき、差し替え後の外部デバイス３００（外部デバイスＢ３００Ｂ）を初期状態から制御可能になる。
【０１７１】
そのため、情報処理装置とデバイス制御装置との間におけるデバイス制御処理（処理シーケンス）の相違を解消し、外部デバイスの意図しない動作を防止できる。
【０１７２】
以上、本発明について上記の各実施形態に基づいて説明したが、本発明は、これらの実施形態に限定されるものではなく、この発明の要旨を逸脱しない範囲の様々な形態も本発明に含まれる。
【０１７３】
デバイス制御装置２００は、外部デバイス３００との接続ポートを内蔵する形態で説明したが、デバイス制御装置２００に別体のデバイス分岐装置（例：ＵＳＢハブ、不図示）を接続し、このデバイス分岐装置を介してデバイス制御装置２００と外部デバイス３００とを接続してもよい。
【０１７４】
例えば、上記の実施形態の機能の制御方法として、この制御方法をデバイス制御装置に実行させるようにすればよい。また、上述の実施形態の機能を有するプログラムを制御プログラムとして、当該制御プログラムをデバイス制御装置が備えるコンピュータに実行させるようにしてもよい。なお、制御プログラムは、例えば、コンピュータに読み取り可能な記録媒体に記録される。
【０１７５】
また、本発明は、以下の処理を実行することによっても実現される。つまり、上述した実施形態の機能を実現するソフトウェア（プログラムコード）を、ネットワークまたは各種の記録媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムコードを読み出して実行する処理である。
【０１７６】
この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶したコンピュータで読み取り可能な記憶媒体は本発明を構成することになる。
【０１７７】
また、プログラムコードの指示に基づき、コンピュータ上で稼働しているＯＳ等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現されるように構成してもよい。
【０１７８】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれたあと、このプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵ等が実際の処理の一部または全部を実行し、その処理に応じて上述した実施形態が実現される場合も含んでいる。
【０１７９】
なお、プログラムコードを供給するため、例えば、フロッピー（登録商標）ディスク、ハードディスク、光磁気ディスク、ＣＤやＤＶＤに代表される光ディスク、磁気テープ、不揮発性のメモリカード、ＲＯＭ等の記憶媒体を用いることができる。または、プログラムコードは、ネットワークを介してダウンロードしてもよい。
【符号の説明】
【０１８０】
１００：情報処理装置
１１１：アプリケーション
１１２：デバイスドライバ
１１３：仮想化制御部
１１４：通信制御部
２００：デバイス制御装置
２１１：通信制御部
２１２：仮想化制御部
２１３：デバイス制御部
２１４：電源供給制御部
２１５：デバイス状態管理部
３００：外部デバイス
３０１：個体識別情報
３０２：通信Ｉ／Ｆ
【図１】
2018097758.tif 000003
【図２】
2018097758.tif 000004
【図３】
2018097758.tif 000005
【図４】
2018097758.tif 000006
【図５】
2018097758.tif 000007
【図６】
2018097758.tif 000008