(57)【要約】      （修正有）【課題】汎用的なバスドライバーを用いて任意の種類の仮想デバイスを接続あるいは取り外しできる仮想デバイス挿抜装置及び仮想デバイス挿抜認識プログラムを提供する。【解決手段】ユーザ空間１０に、外部からの仮想デバイスの接続命令に対応する仮想デバイス接続命令機能と、外部からの仮想デバイスの取り外し命令に対応する仮想デバイス取り外し命令機能を有する仮想デバイス挿抜命令部１２を配置し、カーネル空間２０に、I/Oマネージャ２１と、仮想デバイス挿抜命令部から仮想デバイス接続命令または仮想デバイス取り外し命令を受領し、I/Oマネージャに、仮想デバイスの接続または取り外しを通知する汎用バスドライバー部２２と、仮想デバイスそれ自体の機能を有し、仮想デバイス接続命令または仮想デバイス取り外し命令に応じて接続または取り外した仮想デバイスの機能通りの応答を返すIRP応答返却機能を有するIRP応答返却部２３とを配置する。【選択図】図１
2016091093.tif 000002
【特許請求の範囲】
【請求項１】
ユーザ空間に、
外部からの仮想デバイスの接続命令に対応する仮想デバイス接続命令機能と、外部からの前記仮想デバイスの取り外し命令に対応する仮想デバイス取り外し命令機能を有する仮想デバイス挿抜命令部を配置し、
カーネル空間に、
OS(Operating System)の構成部分の一つを構成し、前記仮想デバイスへの要求の仲介や前記仮想デバイス挿抜の要求をするI/Oマネージャと、
前記I/Oマネージャを介して、前記仮想デバイス挿抜命令部から前記仮想デバイス接続命令を受領し、前記I/Oマネージャに対して、前記仮想デバイスの接続を認識したことを通知する仮想デバイス接続通知機能と、前記I/Oマネージャを介して、前記仮想デバイス挿抜命令部から前記仮想デバイス取り外し命令を受領し、前記I/Oマネージャに対して、前記仮想デバイスの取り外しを認識したことを通知する仮想デバイス取り外し通知機能を有する汎用バスドライバー部と、
前記仮想デバイスそれ自体の機能を有し、前記I/Oマネージャを介して受領した前記仮想デバイス接続命令あるいは前記仮想デバイス取り外し命令に応じて接続あるいは取り外した前記仮想デバイスの機能通りの応答を、前記I/Oマネージャを介して前記仮想デバイス挿抜命令部に返すIRP応答返却機能を有するIRP応答返却部とを配置する仮想デバイス挿抜装置。
【請求項２】
前記汎用バスドライバー部を１つ備える請求項１記載の仮想デバイス挿抜装置。
【請求項３】
前記IRP応答返却部は、実デバイスに応じて、複数個設ける請求項１または請求項２に記載の仮想デバイス挿抜装置。
【請求項４】
前記仮想デバイス挿抜命令部の仮想デバイス接続命令機能は、マシン外から、特定のハードウエアＩＤ（HW ID）を持つ特定の仮想デバイスをマシンに接続させる命令として、HW IDをコマンドとして入力すると起動し、前記汎用バスドライバー部に対象となるHW IDを持つ仮想デバイスを接続させる命令を生成する請求項１乃至請求項３のいずれか１項に記載の仮想デバイス挿抜装置。
【請求項５】
前記仮想デバイス挿抜命令部の仮想デバイス取り外し命令機能は、マシン外から、特定のハードウエアＩＤ（HW ID）を持つ特定の仮想デバイスをマシンから取り外す命令として、HW ID をコマンドとして入力すると起動し、前記汎用バスドライバー部に対象となるHW ID を持つ仮想デバイスを取り外す命令を生成する請求項１乃至請求項３のいずれか１項に記載の仮想デバイス挿抜装置。
【請求項６】
ユーザ空間に、
ユーザ空間で動作するプログラムであるアプリケーションを配置し、
カーネル空間に、
OS(Operating System)の構成部分の一つを構成し、前記仮想デバイスへの要求の仲介や前記仮想デバイス挿抜の要求をするI/Oマネージャと、
前記仮想デバイスそれ自体の機能を有し、前記I/Oマネージャから受信した入出力要求パケット（IRP）を解釈し、前記仮想デバイスの機能通りの応答を、前記I/Oマネージャに返すIRP応答返却機能を有するIRP応答返却部とを配置し、
前記アプリケーションから特定の仮想デバイスに対する所定の要求を受け、当該要求が前記I/Oマネージャに入力された場合、
前記I/Oマネージャは、要求内容を入出力要求パケット（IRP）に変換して、前記特定の仮想デバイスに関連する前記IRP応答返却部へ入力し、
前記特定の仮想デバイスに関連する前記IRP応答返却部は、実デバイスが実際に応答したときと同じ入出力要求パケット（IRP）を、前記変換後の入出力要求パケット（IRP）への応答として前記I/Oマネージャに返し、
前記I/Oマネージャは、前記入出力要求パケット（IRP）への応答を前記アプリケーションが解釈可能なようにして前記アプリケーションに返すことにより、前記アプリケーションに、前記特定の仮想デバイスから応答があったと認識させるIRP処理を実行する仮想デバイス挿抜装置。
【請求項７】
前記IRP応答返却部は、前記アプリケーションから前記特定の仮想デバイスへの要求時に送信される前記入出力要求パケット（IRP）を前記I/Oマネージャから受信したことを契機に起動する請求項６に記載の仮想デバイス挿抜装置。
【請求項８】
前記IRP応答返却部は、前記IRP処理の際、バスの操作を始めとする論理的な応答を行わない請求項６または請求項７に記載の仮想デバイス挿抜装置。
【請求項９】
ユーザ空間に、
ユーザ空間で動作するプログラムであるアプリケーションと、
外部からの仮想デバイスの接続命令に対応する仮想デバイス接続命令機能と、外部からの前記仮想デバイスの取り外し命令に対応する仮想デバイス取り外し命令機能を有する仮想デバイス挿抜命令部を配置し、
カーネル空間に、
OS(Operating System)の構成部分の一つを構成し、前記仮想デバイスへの要求の仲介や前記仮想デバイス挿抜の要求をするI/Oマネージャと、
前記I/Oマネージャを介して、前記仮想デバイス挿抜命令部から前記仮想デバイス接続命令を受領し、前記I/Oマネージャに対して、前記仮想デバイスの接続を認識したことを通知する仮想デバイス接続通知機能と、
前記I/Oマネージャを介して、前記仮想デバイス挿抜命令部から前記仮想デバイス取り外し命令を受領し、前記I/Oマネージャに対して、前記仮想デバイスの取り外しを認識したことを通知する仮想デバイス取り外し通知機能を有する汎用バスドライバー部と、
前記仮想デバイスを操作するためのインタフェースを前記アプリケーションに提供し、前記I/Oマネージャを介して受領した前記仮想デバイス接続命令あるいは前記仮想デバイス取り外し命令に応じて接続あるいは取り外した前記仮想デバイスの機能通りの応答を前記I/Oマネージャを返すファンクションドライバーと、
前記仮想デバイスそれ自体の機能を有し、前記I/Oマネージャを介して受領した前記仮想デバイス接続命令あるいは前記仮想デバイス取り外し命令に応じて接続あるいは取り外した前記仮想デバイスの機能通りの応答を、前記I/Oマネージャを介して前記仮想デバイス挿抜命令部に返すIRP応答返却機能を有し、前記ファンクションドライバーの下位のフィルタドライバーとして構成するIRP応答返却部とを、配置する仮想デバイス挿抜装置。
【請求項１０】
前記ファンクションドライバーは、実デバイスに応じて複数個設ける請求項９に記載の仮想デバイス挿抜装置。
【請求項１１】
前記アプリケーションから特定の仮想デバイスに対する所定の要求を受け、当該要求が前記I/Oマネージャに入力された場合、
前記I/Oマネージャは、要求内容を入出力要求パケット（IRP）に変換して、前記特定の仮想デバイスに関連する前記ファンクションドライバーへ入力し、
前記ファンクションドライバーから下位ドライバーへ発行された入出力要求パケット（IRP）を前記I/Oマネージャを介して前記特定の仮想デバイスに関連する前記IRP応答返却部へ入力し、
前記特定の仮想デバイスに関連する前記IRP応答返却部は、実デバイスが実際に応答したときと同じ入出力要求パケット（IRP）を、前記変換後の入出力要求パケット（IRP）への応答として前記I/Oマネージャに返し、
前記I/Oマネージャは、前記入出力要求パケット（IRP）への応答を前記ファンクションドライバーへ入力し、
前記ファンクションドライバーは、前記IRP応答返却部からの応答を処理して前記I/Oマネージャに応答を返し、
前記I/Oマネージャは、前記入出力要求パケット（IRP）への応答を前記アプリケーションが解釈可能なようにして前記アプリケーションに返すことにより、前記アプリケーションに、前記特定の仮想デバイスから応答があったと認識するIRP処理を実行する請求項９または請求項１０に記載の仮想デバイス挿抜装置。
【請求項１２】
前記IRP応答返却部は、前記アプリケーションからデバイスへの要求時に送信される入出力要求パケット（IRP）を、前記汎用バスドライバー部に伝達しない請求項９乃至請求項１１のいずれか１項に記載の仮想デバイス挿抜装置。
【請求項１３】
ユーザ空間に、
ユーザ空間で動作するプログラムであるアプリケーションと、
外部からの仮想デバイスの接続命令に対応する仮想デバイス接続命令機能と、外部からの前記仮想デバイスの取り外し命令に対応する仮想デバイス取り外し命令機能を有する仮想デバイス挿抜命令部と、
入出力要求パケット（IRP）を処理し、前記入出力要求パケット（IRP）に対するデバイス固有の応答処理を行うIRP応答処理用プロセスを配置し、
カーネル空間に、
OS(Operating System)の構成部分の一つを構成し、前記仮想デバイスへの要求の仲介や前記仮想デバイス挿抜の要求をするI/Oマネージャと、
前記I/Oマネージャを介して、前記仮想デバイス挿抜命令部から前記仮想デバイス接続命令を受領し、前記I/Oマネージャに対して、前記仮想デバイスの接続を認識したことを通知する仮想デバイス接続通知機能と、
前記I/Oマネージャを介して、前記仮想デバイス挿抜命令部から前記仮想デバイス取り外し命令を受領し、前記I/Oマネージャに対して、前記仮想デバイスの取り外しを認識したことを通知する仮想デバイス取り外し通知機能を有する汎用バスドライバー部と、
前記仮想デバイスそれ自体の機能を有し、前記I/Oマネージャを介して受領した前記仮想デバイス接続命令あるいは前記仮想デバイス取り外し命令に応じて接続あるいは取り外した前記仮想デバイスの機能通りの応答を、前記IRP応答処理用プロセスと連携して前記I/Oマネージャを介して前記仮想デバイス挿抜命令部に返すIRP応答返却機能を有するIRP応答返却部とを配置する仮想デバイス挿抜装置。
【請求項１４】
前記IRP応答返却部と前記IRP応答処理用プロセスは、前記入出力要求パケット（IRP）により通信を行う請求項１３に記載の仮想デバイス挿抜装置。
【請求項１５】
前記仮想デバイス挿抜命令部から前記IRP応答処理用プロセスに対して、挿抜される前記仮想デバイスの情報を送信し、
前記仮想デバイスが接続された場合に前記IRP応答処理用プロセスの要求待ちを開始し、前記仮想デバイスが取り外された場合に前記IRP応答処理用プロセスの要求待ちをキャンセルする請求項１３または請求項１４に記載の仮想デバイス挿抜装置。
【請求項１６】
前記IRP応答処理用プロセスは、前記I/Oマネージャを介して前記IRP応答返却部に対して要求待ちをし、
前記アプリケーションからの要求が、前記I/Oマネージャを介して前記IRP応答返却部に伝達され、
前記IRP応答返却部から、前記I/Oマネージャを介して前記IRP応答処理用プロセスに前記要求が伝達され、
前記IRP応答処理用プロセスは前記要求を処理し、前記I/Oマネージャを介して応答を前記IRP応答返却部に返し、
前記IRP応答返却部は、前記I/Oマネージャを介して前記アプリケーションに応答を返すことによりIRP処理を完結させる請求項１３乃至請求項１５のいずれか1項に記載の仮想デバイス挿抜装置。
【請求項１７】
外部に通信を仲介する仲介用デバイスを配置し、
前記IRP応答返却部と前記IRP応答処理用プロセスは、前記仲介用デバイスを仲介させて通信する請求項１３に記載の仮想デバイス挿抜装置。
【請求項１８】
前記IRP応答処理用プロセスは、前記I/Oマネージャを介して前記仲介用デバイスに対して要求待ちをし、
前記アプリケーションからの前記要求が、前記I/Oマネージャを介して前記IRP応答返却部に伝達され、
前記IRP応答返却部から前記I/Oマネージャを介した前記仲介用デバイスを通じて前記IRP応答処理用プロセスに前記要求が伝達され、
前記IRP応答返却部は、前記I/Oマネージャを介して前記仲介用デバイスに対して応答待ちをし、
前記IRP応答処理用プロセスが前記要求を処理し、前記I/Oマネージャを介して前記 IRP応答処理用プロセスから前記仲介用デバイスを通じて前記IRP応答返却部に前記応答が伝達され、
前記IRP応答返却部は、前記I/Oマネージャを介して前記アプリケーションに前記応答を返してIRP処理を完結させる請求項１７に記載の仮想デバイス挿抜装置。
【請求項１９】
別のマシンを用意し、前記別マシンのユーザ空間に、前記IRP応答処理用プロセスを配置する請求項１３または請求項１７に記載の仮想デバイス挿抜装置。
【請求項２０】
仮想デバイス挿抜装置のユーザ空間に、
外部からの仮想デバイスの接続命令に対応する仮想デバイス接続命令機能と、外部からの前記仮想デバイスの取り外し命令に対応する仮想デバイス取り外し命令機能と、
前記仮想デバイス挿抜装置のカーネル空間に、
前記仮想デバイスへの要求の仲介や前記仮想デバイス挿抜の要求をする機能と、
前記仮想デバイス接続命令を受領し、前記仮想デバイスの接続を認識したことを通知する仮想デバイス接続通知機能と、
前記仮想デバイス取り外し命令を受領し、前記仮想デバイスの取り外しを認識したことを通知する仮想デバイス取り外し通知機能と、
前記仮想デバイスそれ自体の機能を有し、受領した前記仮想デバイス接続命令あるいは前記仮想デバイス取り外し命令に応じて接続あるいは取り外した前記仮想デバイスの機能通りの応答を返すIRP応答返却機能とを、
実現させるための仮想デバイス挿抜認識プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、仮想デバイス挿抜装置および仮想デバイス挿抜認識プログラムに関する。
【背景技術】
【０００２】
アプリケーションの開発に際して、仮想デバイスと呼ばれる仮想の端末環境を作成し、その仮想デバイスを使用してアプリケーションの動作確認することが行われている。
【０００３】
一般的に、仮想デバイス用の専用のバスドライバーは、ＯＳとの間で仮想デバイス用の命令を処理し、仮想デバイスの接続あるいは取り外しを認識する必要がある。
【０００４】
しかしながら、専用のバスドライバーは、仮想デバイスのデバイス種別ごとに作成しなければならず、その開発コストが高いという、問題があった。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第４１２７３１５号公報
【特許文献２】特許第５３３５９６２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明が解決しようとする課題は、汎用的なバスドライバーを用いて任意の種類の仮想デバイスを接続あるいは取り外しできるようにし、仮想デバイスを接続あるいは取り外し可能な環境の構築コストを削減することができる仮想デバイス挿抜装置および仮想デバイス挿抜認識プログラムを提供することである。
【課題を解決するための手段】
【０００７】
実施形態の仮想デバイス挿抜装置は、ユーザ空間に、外部からの仮想デバイスの接続命令に対応する仮想デバイス接続命令機能と、外部からの前記仮想デバイスの取り外し命令に対応する仮想デバイス取り外し命令機能を有する仮想デバイス挿抜命令部を配置し、カーネル空間に、OS(Operating System)の構成部分の一つを構成し、前記仮想デバイスへの要求の仲介や前記仮想デバイス挿抜の要求をするI/Oマネージャと、前記I/Oマネージャを介して、前記仮想デバイス挿抜命令部から前記仮想デバイス接続命令を受領し、前記I/Oマネージャに対して、前記仮想デバイスの接続を認識したことを通知する仮想デバイス接続通知機能と、前記I/Oマネージャを介して、前記仮想デバイス挿抜命令部から前記仮想デバイス取り外し命令を受領し、前記I/Oマネージャに対して、前記仮想デバイスの取り外しを認識したことを通知する仮想デバイス取り外し通知機能を有する汎用バスドライバー部と、前記仮想デバイスそれ自体の機能を有し、前記I/Oマネージャを介して受領した前記仮想デバイス接続命令あるいは前記仮想デバイス取り外し命令に応じて接続あるいは取り外した前記仮想デバイスの機能通りの応答を、前記I/Oマネージャを介して前記仮想デバイス挿抜命令部に返すIRP応答返却機能を有するIRP応答返却部とを配置する。
【図面の簡単な説明】
【０００８】
【図１】第１の実施形態に係る仮想デバイス挿抜装置の概略構成を示すブロック図である。
【図２】第１の実施形態に係る仮想デバイス挿抜装置における仮想デバイス接続の認識および取り外しの認識における動作フローを示す図である。
【図３】第１の実施形態に係るIRP応答返却部によるIRP処理における各部位間の信号の流れを示す図である。
【図４】第１の実施形態に係るIRP応答返却部によるIRP処理における各部位間の信号の流れを示す図である。
【図５】USBデバイスの接続処理における各部位間の信号の流れを示す図である。
【図６】USBデバイスの接続処理における各部位間の信号の流れを示す図である。
【図７】USBデバイスの接続処理における各部位間の信号の流れを示す図である。
【図８】USBデバイスの接続処理における各部位間の信号の流れを示す図である。
【図９】USBデバイスの接続処理における各部位間の信号の流れを示す図である。
【図１０】USBデバイスの取り外し処理における各部位間の信号の流れを示す図である。
【図１１】USBデバイスの取り外し処理における各部位間の信号の流れを示す図である。
【図１２】USBデバイスの取り外し処理における各部位間の信号の流れを示す図である。
【図１３】USBデバイスの取り外し処理における各部位間の信号の流れを示す図である。
【図１４】USBデバイスの取り外し処理における各部位間の信号の流れを示す図である。
【図１５】第２の実施形態に係るIRP応答返却部による仮想デバイス挿抜処理における各部位間の信号の流れを示す図である。
【図１６】第２の実施形態に係るIRP応答返却部によるIRP処理における各部位間の信号の流れを示す図である。
【図１７】第２の実施形態に係るIRP応答返却部によるIRP処理における各部位間の信号の流れを示す図である。
【図１８】第２の実施形態に係るIRP応答返却部によるIRP処理における各部位間の信号の流れを示す図である。
【図１９】第２の実施形態に係るIRP応答返却部によるIRP処理における各部位間の信号の流れを示す図である。
【図２０】第３の実施形態に係る仮想デバイス挿抜装置における仮想デバイス接続の認識および取り外しの認識における動作フローを示す図である。
【図２１】第３の実施形態に係るIRP応答返却部によるIRP処理における各部位間の信号の流れを示す図である。
【図２２】第３の実施形態に係るIRP応答返却部によるIRP処理における各部位間の信号の流れを示す図である。
【図２３】第３の実施形態に係るIRP応答返却部によるIRP処理における各部位間の信号の流れを示す図である。
【図２４】第３の実施形態に係るIRP応答返却部によるIRP処理における各部位間の信号の流れを示す図である。
【図２５】第３の実施形態に係るIRP応答返却部によるIRP処理における各部位間の信号の流れを示す図である。
【図２６】第４の実施形態に係る仮想デバイス挿抜装置における仮想デバイス接続の認識および取り外しの認識における動作フローを示す図である。
【図２７】第４の実施形態に係るIRP応答返却部によるIRP処理における各部位間の信号の流れを示す図である。
【図２８】第４の実施形態に係るIRP応答返却部によるIRP処理における各部位間の信号の流れを示す図である。
【図２９】第４の実施形態に係るIRP応答返却部によるIRP処理における各部位間の信号の流れを示す図である。
【図３０】第４の実施形態に係るIRP応答返却部によるIRP処理における各部位間の信号の流れを示す図である。
【図３１】第４の実施形態に係るIRP応答返却部によるIRP処理における各部位間の信号の流れを示す図である。
【図３２】第４の実施形態に係るIRP応答返却部によるIRP処理における各部位間の信号の流れを示す図である。
【図３３】第５の実施形態に係る仮想デバイス挿抜装置における仮想デバイス接続の認識および取り外しの認識における動作フローを示す図である。
【図３４】第５の実施形態に係るIRP応答返却部によるIRP処理を説明する図である。
【発明を実施するための形態】
【０００９】
以下、本発明の一実施の形態について、図面を参照して説明する。尚、各図において同一箇所については同一の符号を付すとともに、重複した説明は省略する。
【００１０】
まず、本実施形態で用いる主要な用語について説明する。
【００１１】
「ユーザ空間」とは、ユーザのプログラムが使用するメモリ領域をいう。
【００１２】
「カーネル空間」とは、OSのカーネルが使用するメモリ領域をいう。ここで動作するプログラムは、ユーザ空間のものに比べて開発コストが高い。
【００１３】
「アプリケーション」とは、ユーザ空間で動作するプログラムをいう。本実施形態では、デバイスに要求を出す役割を負う。
【００１４】
「デバイス」とは、マシンに接続され、さまざまな機能を提供するものをいう。プリンタ、スキャナ、カードリーダなどである。
【００１５】
「デバイス種別」とは、USBやシリアル、専用ポートなど、接続方式の異なるデバイス群をいう。
【００１６】
「仮想デバイス」とは、プログラムとして機能のみが提供されるデバイスをいう。
【００１７】
「I/Oマネージャ」とは、OSの構成部分の一つで、デバイスへの要求の仲介やデバイスドライバーにデバイス挿抜の要求をする。
【００１８】
「デバイスドライバー」とは、カーネル空間で動作する、デバイスを操作するためのプログラムをいう。
【００１９】
「ファンクションドライバー」とは、あるデバイスを操作するためのインタフェースをアプリケーションに提供するためのデバイスドライバーをいう。一般的な役割は、(１)アプリケーションからの要求を変換した後にバスドライバーに要求を伝達、(２)バスドライバーからの応答を変換した後にアプリケーションに伝達、である。
【００２０】
「バスドライバー」とは、デバイスと上位デバイスドライバーとの仲介をする。詳細には、デバイスドライバー内のI/O要求パケット(IRP)とデバイス用信号の変換をしている。
【００２１】
デバイスの存在認識をする。存在に変化のあったデバイスのHW ID(デバイス固有のID)をI/Oマネージャに伝達し、そのデバイスに関するファンクションドライバーにデバイス挿抜処理をさせる。
【００２２】
「フィルタドライバー」とは、あるデバイスドライバーの上位や下位に挿入されるデバイスドライバーをいう。
【００２３】
「入出力要求パケットIRP（I/O Request Packet）」とは、デバイスドライバー間でやりとりされるパケットをいう。デバイスへの要求を伝える。
【００２４】
「デバイスドライバーの階層構造」は、ユーザ空間にアプリケーションがインストールされ、カーネル空間にI/Oマネージャ、ファンクションドライバー、バスドライバーが配置される。I/Oマネージャが、アプリケーションとファンクションドライバー間、ファンクションドライバーとバスドライバー間の全ての通信を仲介して、各層間の通信を実現する。一方、バスドライバーは、直接、マシン外のデバイスと通信が行われる。
【００２５】
（第１の実施形態）
次に、本発明の第１の実施形態に係る仮想デバイス挿抜装置について説明する。図１は、第１の実施形態に係る仮想デバイス挿抜装置の概略構成を示すブロック図である。この装置は汎用のコンピュータ（例えばパーソナルコンピュータ（ＰＣ）等）と、同コンピュータ上で動作するソフトウェアとを用いて実現される。コンピュータとしては、ＣＡＤ（Computer Aided Design）やＣＡＥ（Computer Aided Engineering）に好適なエンジニアリングワークステーション（ＥＷＳ）等も含む。本実施形態はこのようなコンピュータにおいて、仮想デバイス挿抜装置のユーザ空間に、外部からの仮想デバイスの接続命令に対応する仮想デバイス接続命令機能と、外部からの仮想デバイスの取り外し命令に対応する仮想デバイス取り外し命令機能と、仮想デバイス挿抜装置のカーネル空間に、仮想デバイスへの要求の仲介やデバイスドライバーに対して仮想デバイス挿抜の要求をする機能と、仮想デバイス接続命令を受領し、仮想デバイスの接続を認識したことを通知する仮想デバイス接続通知機能と、仮想デバイス取り外し命令を受領し、仮想デバイスの取り外しを認識したことを通知する仮想デバイス取り外し通知機能と、仮想デバイスそれ自体の機能を有し、受領した仮想デバイス接続命令あるいは仮想デバイス取り外し命令に応じて接続あるいは取り外した仮想デバイスの機能通りの応答を返すIRP応答返却機能とを、実現させるためのプログラムとして実施することもできる。
【００２６】
図１に示すように、本実施形態に係る仮想デバイス挿抜装置１（以下、マシンと称する場合がある）は、メモリ領域として、ユーザのプログラムが使用するメモリ領域であるユーザ空間１０と、OSのカーネルが使用するメモリ領域であるカーネル空間２０とを有している。
【００２７】
ユーザ空間１０には、ユーザ空間で動作するプログラムであるアプリケーション１１と、仮想デバイス挿抜命令部１２が配置される。
【００２８】
アプリケーション１１は、ユーザ空間１０で動作するプログラムで、ユーザがマシン上で実行したい作業を実施する機能を直接的に有している。
【００２９】
仮想デバイス挿抜命令部１２は、マシン外部から、仮想デバイスの接続命令（コマンド）あるいは仮想デバイスの取り外し命令（コマンド）を受けて起動する。仮想デバイス挿抜命令部１２は、仮想デバイスの接続命令に対応する仮想デバイス接続命令機能と、仮想デバイスの取り外し命令に対応する仮想デバイス取り外し命令機能を有している。尚、仮想デバイスの接続および仮想デバイスの取り外しを総称して、仮想デバイス（の）挿抜ともいう。仮想デバイス接続命令機能および仮想デバイス取り外し命令機能の詳細は、後述する。
【００３０】
カーネル空間２０には、I/Oマネージャ２１と、汎用バスドライバー部２２と、IRP応答返却部２３が配置される。
【００３１】
I/Oマネージャ２１は、OS(Operating System)の構成部分の一つである。I/Oマネージャ２１は、仮想デバイスへの要求の仲介やデバイスドライバーに対して仮想デバイス挿抜の要求をする。
【００３２】
汎用バスドライバー部２２は、仮想デバイス接続通知機能と、仮想デバイス取り外し通知機能を有している。仮想デバイス接続通知機能は、I/Oマネージャ２１に対して、仮想デバイスの接続を認識したことを通知する。仮想デバイス取り外し通知機能は、I/Oマネージャ２１に対して、仮想デバイスの取り外しを認識したことを通知する。
【００３３】
従来、バスドライバーは、デバイス種別ごとに複数個設けられるが、本実施形態では、１つである。
【００３４】
IRP応答返却部２３は、仮想デバイスそのものの機能を備えるとともにIRP応答返却機能を有している。IRP応答返却部２３は、アプリケーション１１からデバイスへの要求時に送信される入出力要求パケット（IRP）をI/Oマネージャ２１から受信したことを契機に起動する。IRP応答返却機能は、I/Oマネージャ２１から受信したIRPを解釈し、接続した仮想デバイスの機能通りの応答をI/Oマネージャ２１に返す。仮想デバイスの機能は、仮想デバイスによって異なる。
【００３５】
ここで、IRPをそのデバイス用に解釈するのは、従来、バスドライバーが備える機能である。また、接続した仮想デバイスの機能どおりの応答を生成するのは、従来、仮想デバイスが備える機能である。さらに、応答のデータをIRPに変換してI/Oマネージャ２１に返すのは、従来、バスドライバーの備える機能である。
【００３６】
本実施形態では、IRP応答返却部２３は、実デバイスに応じて、複数個設けられる。
【００３７】
IRP応答返却部２３は、ドライバーの種別としてはファンクションドライバーに相当するが、従来のものとは異なり、アプリケーション１１からデバイスへの要求時に送信される入出力要求パケット（IRP）を下位デバイスドライバーである汎用バスドライバー部２２に一切伝達しない、すなわち、バスの操作等の論理的な応答を行わない。
【００３８】
以上のように構成された仮想デバイス挿抜装置の作用について詳述する。図２は、第１の実施形態に係る仮想デバイス挿抜装置における仮想デバイス接続の認識および取り外しの認識における動作フローを示す図である。
【００３９】
＜仮想デバイスの接続の認識＞
仮想デバイス挿抜命令部１２の仮想デバイス接続命令機能は、マシン外から、特定のハードウエアＩＤ（以下、HW IDと略称する）を持つ特定の仮想デバイスをマシンに接続させる命令として、HW IDをコマンドとして入力すると、起動する。起動した仮想デバイス接続命令機能は、汎用バスドライバー部２２に対象となるHW IDを持つ仮想デバイスを接続させる命令を生成する。仮想デバイス接続命令の生成後、仮想デバイス挿抜命令部１２は、I/Oマネージャ２１を呼び出し、生成された仮想デバイス接続命令は、I/Oマネージャ２１を介して汎用バスドライバー部２２に送られる。
【００４０】
汎用バスドライバー部２２は、接続する仮想デバイスのHW ID を伴うI/Oマネージャ２１の呼び出しに応じて起動する。汎用バスドライバー部２２は、仮想デバイス接続通知機能を使い、対象のHW ID を持つ仮想デバイスの接続を認識したことをI/Oマネージャ２１に対して通知する。
【００４１】
I/Oマネージャ２１は、対象となるHW IDに関連するIRP応答返却部２３に対して、デバイス接続の命令を出す。
【００４２】
I/Oマネージャ２１から、対象のHW ID を持つ仮想デバイスの接続を行った結果が、汎用バスドライバー部２２に返される。汎用バスドライバー部２２は、対象のHW ID を持つ仮想デバイスの接続を行った結果を、I/Oマネージャ２１に返す。I/Oマネージャ２１は、対象のHW ID を持つ仮想デバイスの接続を行った結果を、仮想デバイス挿抜命令部１２に返し、仮想デバイスの接続の認識が完了する。
【００４３】
＜仮想デバイスの取り外しの認識＞
仮想デバイス挿抜命令部１２の仮想デバイス取り外し命令機能は、マシン外から、特定のハードウエアＩＤ（以下、HW IDと略称する）を持つ特定の仮想デバイスをマシンから取り外す命令として、HW IDをコマンドとして入力すると、起動する。起動した仮想デバイス取り外し命令機能は、汎用バスドライバー部２２に対象となるHW IDを持つ仮想デバイスを取り外す命令を生成する。仮想デバイス取り外し命令の生成後、仮想デバイス挿抜命令部１２は、I/Oマネージャ２１を呼び出し、生成された仮想デバイス取り外し命令は、I/Oマネージャ２１を介して汎用バスドライバー部２２に送られる。
【００４４】
汎用バスドライバー部２２は、取り外す仮想デバイスのHW ID を伴うI/Oマネージャ２１の呼び出しに応じて起動する。汎用バスドライバー部２２は、仮想デバイス取り外し通知機能を使い、対象のHW ID を持つ仮想デバイスの取り外しを認識したことをI/Oマネージャ２１に対して通知する。
【００４５】
I/Oマネージャ２１は、対象となるHW IDに関連するIRP応答返却部２３に対して、デバイス取り外し命令を出す。
【００４６】
I/Oマネージャ２１から、対象のHW ID を持つ仮想デバイスの取り外しを行った結果が、汎用バスドライバー部２２に返される。汎用バスドライバー部２２は、対象のHW ID を持つ仮想デバイスの取り外しを行った結果を、I/Oマネージャ２１に返す。I/Oマネージャ２１は、対象のHW ID を持つ仮想デバイスの取り外しを行った結果を、仮想デバイス挿抜命令部１２に返し、仮想デバイスの取り外しの認識が完了する。
【００４７】
＜IRP処理＞
次に、本実施形態のIRP応答返却部２３によるIRP処理について説明する。図３〜図４は、第１の実施形態に係るIRP応答返却部２３によるIRP処理における各部位間の信号の流れを示す図である。
【００４８】
図３に示すように、アプリケーション１１から、特定の仮想デバイスに対して所定の要求、例えば、デバイスの状態要求やデバイスのモード変更要求などがあった場合には、当該要求がI/Oマネージャ２１に入力される。
【００４９】
I/Oマネージャ２１は、要求内容をIRPに変換して、対象となる仮想デバイスに関連するIRP応答返却部２３へ入力する。ここで、対象となる仮想デバイスの判別手法は、複数のものが考えられる。例えば、次のような手法による。まず、アプリケーション１１が要求先のデバイスを判別した上で「デバイスAのモードを変更したい」という具合に、デバイスを指定して要求を出す。この際、I/Oマネージャ２１は、上記の接続の認識で詳述したように、どのIRP応答返却部２３がデバイスAのものか記憶しているので、正しいIRP応答返却部２３に振り分けることができる。
【００５０】
図４に示すように、対象となる仮想デバイスに関連するIRP応答返却部２３は、デバイスが実際に応答したときと同じIRPを、IRPへの応答としてI/Oマネージャ２１に返す。IRP中には、「デバイスからの応答データ」を格納する領域があり、該領域にデバイスが応答するであろうデータが書き込まれ、これを、適切なタイミングで返却する。書き込むデータやタイミングは、デバイスによって様々であり、デバイスの仕様書から分かる。
【００５１】
IRPへの応答の際、IRP応答返却部２３は、汎用バスドライバー部２２にIRPを伝達しないで処理をする。
【００５２】
I/Oマネージャ２１は、IRPへの応答をアプリケーション１１が解釈できる形にして、応答内容をアプリケーション１１に返す。アプリケーション１１は、IRPが返却された＝デバイスから応答があった、と理解する。
【００５３】
第１の実施形態によれば、汎用的なバスドライバーを用いて任意の種類の仮想デバイスを接続あるいは取り外しできるようにし、仮想デバイスを接続あるいは取り外し可能な環境の構築コストを削減することができる。
【００５４】
［実施例］
次に、マシンに挿抜する仮想デバイスをUSBデバイスとする実施例について説明する。マシンの外部から、直接USBデバイスに対応するHW IDが指定されるものとする。尚、HW IDによる指定に限定されることはない。すなわち、デバイス名や型番などの情報による指定であっても、仮想デバイス挿抜命令部１２において、デバイス名や型番などの情報をHW IDに変換可能であれば、デバイス名や型番などの情報でもよい。
【００５５】
本実施例においては、IRP応答返却部２３は、デバイスドライバーの種別としてファンクションドライバーとして構成される。
【００５６】
＜USBデバイスの接続処理＞
図５乃至図９は、USBデバイスの接続処理における各部位間の信号の流れを示す図である。
【００５７】
まず、図５に示すように、外部から仮想デバイス挿抜命令部１２に接続したいUSBデバイスのHW IDが与えられる。
【００５８】
次に、図６に示すように、仮想デバイス挿抜命令部１２で受け取られたUSBデバイスのHW IDは、I/Oマネージャ２１を介して、汎用バスドライバー部２２に転送される。
【００５９】
USBデバイスのHW IDを受領した汎用バスドライバー部２２は、仮想デバイス挿抜命令部１２の仮想デバイス接続命令機能により、当該HW IDを持ったUSBデバイスが接続されたと認識する。
【００６０】
続いて、図７に示すように、汎用バスドライバー部２２は仮想デバイス接続通知機能を使い、I/Oマネージャ２１にUSBデバイスのHW IDを返す。USBデバイスのHW IDを受領したI/Oマネージャ２１は、USBデバイスのHW IDに関連するIRP応答返却部２３に対してデバイス接続の命令を出す。
【００６１】
次に、図８に示すように、I/Oマネージャ２１からUSBデバイス接続の結果が汎用バスドライバー部２２に返される。
【００６２】
続いて、図９に示すように、汎用バスドライバー部２２からUSBデバイス接続の結果がI/Oマネージャ２１に送られる。USBデバイス接続の結果を受領したI/Oマネージャ２１は、仮想デバイス挿抜命令部１２にUSBデバイス接続の結果を返す。
【００６３】
＜USBデバイスの取り外し処理＞
図１０乃至図１４は、USBデバイスの取り外し処理における各部位間の信号の流れを示す図である。
【００６４】
図１０に示すように、外部から仮想デバイス挿抜命令部１２に取り外したいUSBデバイスのHW IDが与えられる。
【００６５】
次に、図１１に示すように、仮想デバイス挿抜命令部１２で受け取られたUSBデバイスのHW IDは、I/Oマネージャ２１を介して、汎用バスドライバー部２２に転送される。
【００６６】
USBデバイスのHW IDを受領した汎用バスドライバー部２２は、仮想デバイス挿抜命令部１２の仮想デバイス取り外し命令機能により、当該HW IDを持ったUSBデバイスが取り外されたと認識する。
【００６７】
続いて、図１２に示すように、汎用バスドライバー部２２は仮想デバイス取り外し通知機能を使い、I/Oマネージャ２１にUSBデバイスのHW IDを返す。USBデバイスのHW IDを受領したI/Oマネージャ２１は、USBデバイスのHW IDに関連するIRP応答返却部２３に対してデバイス取り外しの命令を出す。
【００６８】
次に、図１３に示すように、I/Oマネージャ２１からUSBデバイス取り外しの結果が汎用バスドライバー部２２に返される。
【００６９】
続いて、図１４に示すように、汎用バスドライバー部２２からUSBデバイス取り外しの結果がI/Oマネージャ２１に送られる。USBデバイス取り外しの結果を受領したI/Oマネージャ２１は、仮想デバイス挿抜命令部１２にUSBデバイス取り外しの結果を返す。
【００７０】
一般的に、仮想USBデバイスには専用の仮想USBバスドライバーが必要であり、USB特有の信号を伝達できるように開発されなければならないため、開発コストが高い。
【００７１】
以上説明したように、本実施例によれば、USB非対応の汎用バスドライバー部を使用することによって、仮想USBデバイスを利用する環境構築が容易に可能となる。
【００７２】
（第２の実施形態）
次に、第２の実施形態に係る仮想デバイス挿抜装置２について説明する。第２の実施形態に係る仮想デバイス挿抜装置２では、第１の実施形態の構成に加えて、カーネル空間２０に、デバイスを操作するためのインタフェースをアプリケーション１１に提供するファンクションドライバー２４をさらに備えるものである。第２の実施形態におけるファンクションドライバー２４は、従来のものを採用することができ、実デバイスに応じて、複数個設けられる。第２の実施形態においても、仮想デバイス挿抜命令部１２と汎用バスドライバー部２２の役割は、第１の実施形態と変わらない。
【００７３】
このように、第２の実施形態ではファンクションドライバー２４が存在するので、IRP応答返却部２３Ａはドライバーの種別としてファンクションドライバー２４の下位フィルタドライバーとして構成することができる。  
第２の実施形態においても、従来のフィルタドライバーとは異なり、IRP応答返却部２３Ａは、アプリケーション１１からデバイスへの要求時に送信されるIRPを下位デバイスドライバーである汎用バスドライバー部２２に一切伝達しない。
【００７４】
図１５は、第２の実施形態に係るIRP応答返却部２３Ａによる仮想デバイス挿抜処理における各部位間の信号の流れを示す図である。
【００７５】
図１５に示すように、HW IDに対応するファンクションドライバー２４にデバイス挿抜の要求が来る際、その下位フィルタドライバーであるIRP応答返却部２３Ａにもデバイス挿抜の要求が来る。
【００７６】
第２の実施形態における仮想デバイス挿抜のシーケンスは、実施例における図７（接続の場合）、図１２（取り外しの場合）に示す処理が上記したように異なるのみで、他の処理（図５乃至図９のうち図７を除いた接続処理、図１０乃至図１４のうち図１２を除いた取り外し処理）は同様である。
【００７７】
図１６乃至図１９は、第２の実施形態に係るIRP応答返却部２３ＡによるIRP処理における各部位間の信号の流れを示す図である。
【００７８】
図１６に示すように、アプリケーション１１から、特定の仮想デバイスに対して所定の要求、例えば、デバイスの状態要求やデバイスのモード変更要求などがあった場合には、当該要求がI/Oマネージャ２１に入力される。I/Oマネージャ２１は、要求内容をIRPに変換して、ファンクションドライバー２４へ入力する。
【００７９】
図１７に示すように、ファンクションドライバー２４は、実デバイスが実際に応答したときと同じIRPを、下位ドライバーへ発行するIRPに変換してIRPへの応答としてI/Oマネージャ２１に返す。I/Oマネージャ２１は、下位ドライバーへ発行されたIRPをIRP応答返却部２３Ａに送る。
【００８０】
図１８に示すように、IRP応答返却部２３Ａは、IRPへの応答を生成し、I/Oマネージャ２１に返す。
【００８１】
I/Oマネージャ２１は、IRPへの応答をファンクションドライバー２４に送る。
【００８２】
IRPへの応答の際、IRP応答返却部２３Ａは、汎用バスドライバー部２２にIRPを伝達しないで処理をする。
【００８３】
図１９に示すように、ファンクションドライバー２４は、IRP応答返却部２３Ａからの応答を処理し、I/Oマネージャ２１に応答を返す。
【００８４】
I/Oマネージャ２１は、IRPへの応答をアプリケーション１１が解釈できる形にして、応答内容をアプリケーション１１に返す。アプリケーション１１は、IRPが返却された＝デバイスから応答があった、と理解する。
【００８５】
第２の実施形態によれば、従来のファンクションドライバー２４をそのまま用いることができる。この利点として、従来のファンクションドライバー２４中で、IRPに対して複雑な処理をしている場合に、その処理内容を流用することができる。
【００８６】
（第３の実施形態）
次に、第３の実施形態に係る仮想デバイス挿抜装置３について説明する。第３の実施形態に係る仮想デバイス挿抜装置３においては、第１の実施形態におけるIRP応答返却部２３のIRP応答返却機能を、ユーザ空間１０に設けるIRP応答処理用プロセスを内容とするプログラム（以下、IRP応答処理用プロセスと略称する）１３と連携させて実現させるものである。例えば、IRP応答処理用プロセス１３とIRP応答返却部２３Ｂは、IRPにより通信する手法を採用することができる。図２０は、第３の実施形態に係る仮想デバイス挿抜装置３における仮想デバイス接続の認識および取り外しの認識における動作フローを示す図である。図２０に示すように、IRP応答処理用プロセス１３は、第１の実施形態におけるIRP応答返却部２３の一部の機能を果たす。
【００８７】
第３の実施形態において、IRP応答返却部２３Ｂにデバイス挿抜の命令が出るときの、仮想デバイス挿抜命令部１２と汎用バスドライバー部２２の役割と構成は、第１の実施形態と変わらない。仮想デバイス挿抜命令部１２からIRP応答処理用プロセス１３に対して、挿抜される仮想デバイスの情報を送信するようにし、仮想デバイスが接続されたときにIRP応答処理用プロセス１３の要求待ちを開始したり、仮想デバイスが取り外されたときにIRP応答処理用プロセス１３の要求待ちをキャンセルしたりするように実現してもよい。
【００８８】
＜IRP応答返却部によるIRP処理＞
次に、第３の実施形態に係るIRP応答返却部２３ＢによるIRP処理について説明する。図２１〜図２５は、第３の実施形態に係るIRP応答返却部２３ＢによるIRP処理における各部位間の信号の流れを示す図である。
【００８９】
まず、図２１に示すように、IRP応答処理用プロセス１３は、I/Oマネージャ２１を介してIRP応答返却部２３Ｂに対して要求待ちをする。
【００９０】
次に、図２２に示すように、アプリケーション１１からの要求が、I/Oマネージャ２１を介してIRP応答返却部２３Ｂに伝達する。
【００９１】
次に、図２３に示すように、IRP応答返却部２３Ｂから、I/Oマネージャ２１を介してIRP応答処理用プロセス１３に要求が伝達する。
【００９２】
続いて、図２４に示すように、IRP応答処理用プロセス１３は要求を処理し、I/Oマネージャ２１を介して応答をIRP応答返却部２３Ｂに返す。
【００９３】
次に、図２５に示すように、IRP応答返却部２３Ｂは、I/Oマネージャ２１を介してアプリケーション１１に応答を返し、IRP処理を完結させる。
【００９４】
第１の実施形態に係る仮想デバイス挿抜装置１の構成、あるいは第２の実施形態に係る仮想デバイス挿抜装置２の構成において、IRP応答返却部２３あるいはIRP応答返却部２３ＡのIRP応答返却機能をデバイスドライバーとして実装するのは、カーネルプログラミングとなるため、開発コストが高い。
【００９５】
それに対し、第３の実施形態によれば、IRP応答返却部２３のIRP応答返却機能の一部である、 IRPに対するデバイス固有の応答処理について、IRP応答処理用プロセス１３に委譲することにより、委譲した部分はユーザ空間１０のプログラミングとなり、開発が容易となる。
【００９６】
（第４の実施形態）
次に、第４の実施形態に係る仮想デバイス挿抜装置４について説明する。第４の実施形態に係る仮想デバイス挿抜装置４においては、第３の実施形態におけるIRP応答返却部２３ＢのIRP応答返却機能を、ユーザ空間１０に設けるIRP応答処理用プロセス１３と連携させて実現させるものである。
【００９７】
例えば、IRP応答返却部２３ＣとIRP応答処理用プロセス１３は、仮想デバイス挿抜装置４外に設ける仲介用デバイス３０を仲介させて通信する手法を採用することができる。尚、仲介用デバイス３０は、仮想デバイスとして実現しても良い。図２６は、第４の実施形態に係る仮想デバイス挿抜装置４における仮想デバイス接続の認識および取り外しの認識における動作フローを示す図である。図２６に示すように、IRP応答処理用プロセス１３は、仲介用デバイス３０を仲介させて第１の実施形態におけるIRP応答返却部２３の一部の機能を果たす。
【００９８】
第４の実施形態においては、IRP応答返却部２３Ｃにデバイス挿抜の命令が出るときの、仮想デバイス挿抜命令部１２と汎用バスドライバー部２２の役割と構成は、第１の実施形態と変わらない。仮想デバイス挿抜命令部１２からIRP応答処理用プロセス１３に対して、挿抜される仮想デバイスの情報を送信するようにし、仮想デバイスが接続されたときにIRP応答処理用プロセス１３の要求待ちを開始したり、仮想デバイスが取り外されたときにIRP応答処理用プロセス１３の要求待ちをキャンセルしたりするように実現してもよい。
【００９９】
＜IRP応答返却部によるIRP処理＞
次に、第４の実施形態に係るIRP応答返却部２３ＣによるIRP処理について説明する。図２７〜図３２は、第４の実施形態に係るIRP応答返却部２３ＣによるIRP処理における各部位間の信号の流れを示す図である。
【０１００】
まず、図２７に示すように、IRP応答処理用プロセス１３は、I/Oマネージャ２１を介して仲介用デバイス３０に対して要求待ちをする。
【０１０１】
次に、図２８に示すように、アプリケーション１１からの要求が、I/Oマネージャ２１を介してIRP応答返却部２３Ｃに伝達する。
【０１０２】
次に、図２９に示すように、IRP応答返却部２３ＣからI/Oマネージャ２１を介して仲介用デバイス３０を通じてIRP応答処理用プロセス１３に要求が伝達する。
【０１０３】
続いて、図３０に示すように、IRP応答返却部２３Ｃは、I/Oマネージャ２１を介して仲介用デバイス３０に対して応答待ちをする。
【０１０４】
次に、図３１に示すように、IRP応答処理用プロセス１３が要求を処理し、I/Oマネージャ２１を介して IRP応答処理用プロセス１３から仲介用デバイス３０を通じてIRP応答返却部２３Ｃに応答が伝達する。
【０１０５】
次に、図３２に示すように、IRP応答返却部２３Ｃは、I/Oマネージャ２１を介してアプリケーション１１に応答を返し、IRP処理を完結させる。
【０１０６】
第１の実施形態に係る仮想デバイス挿抜装置１の構成、あるいは第２の実施形態に係る仮想デバイス挿抜装置２の構成において、IRP応答返却部２３のIRP応答返却機能をデバイスドライバーとして実装するのは、カーネルプログラミングとなるため、開発コストが高い。
【０１０７】
それに対し、第４の実施形態によれば、IRP応答返却部２３のIRP応答返却機能の一部である、IRPに対するデバイス固有の応答処理について、IRP応答処理用プロセス１３に委譲することにより、委譲した部分はユーザ空間１０のプログラミングとなり、開発が容易となる。
【０１０８】
第３の実施形態に比べて、IRP応答返却部２３ＢのIRP応答返却機能の一部である、IRP応答処理用プロセス１３との通信機能が、さらに仲介用デバイス３０に委譲されることで、IRP応答返却部２３Ｃの開発がさらに容易になる。
【０１０９】
（第５の実施形態）
次に、第５の実施形態に係る仮想デバイス挿抜装置５について説明する。第３の実施形態に係る仮想デバイス挿抜装置３、あるいは第４の実施形態に係る仮想デバイス挿抜装置４において、IRP応答返却部２３ＢあるいはIRP応答返却部２３ＣのIRP応答返却機能の一部であるIRP応答処理用プロセス１３は、別のマシンＢのユーザ空間プログラム、すなわち、IRP応答処理用プロセス１３Ａとして実現してもよい。
【０１１０】
第５の実施形態においては、例えば、IRP応答返却部２３Ｄ側のマシンＡに通信用のユーザ空間プログラム（以下、通信用プロセスと称する）１４を用意することで、双方のマシンＡ−Ｂ間で通信する手法を採用することができる。
【０１１１】
図３３は、第５の実施形態に係る仮想デバイス挿抜装置５における仮想デバイス接続の認識および取り外しの認識における動作フローを示す図である。図３３に示すように、通信用プロセス１４およびIRP応答処理用プロセス１３Ａは、第１の実施形態におけるIRP応答返却部２３の一部の機能を果たす。
【０１１２】
IRP応答返却部２３Ｄにデバイス挿抜の命令が出るときの、仮想デバイス挿抜命令部１２と汎用バスドライバー部２２の役割と構成は、第１の実施形態と変わらない。
【０１１３】
仮想デバイス挿抜命令部１２から通信用プロセス１４に対して、挿抜される仮想デバイスの情報を送信するようにし、仮想デバイスが接続されたときに通信用プロセス１４の要求待ちを開始したり、仮想デバイスが取り外されたときに通信用プロセス１４の要求待ちをキャンセルしたりするように実現してもよい。
【０１１４】
尚、IRP応答返却部２３Ｄと通信用プロセス１４間の通信方法は、第３の実施形態の構成でも第４の実施形態の構成でも実現可能である。図３３に示す例では、第３の実施形態の構成を適用した場合を示している。
【０１１５】
＜IRP応答返却部によるIRP処理＞
次に、第５の実施形態に係るIRP応答返却部２３ＤによるIRP処理について説明する。図３４は、第５の実施形態に係るIRP応答返却部２３ＤによるIRP処理を説明する図である。図３４に示す例では、マシンＡのIRP応答返却部２３Ｄから第３の実施形態や第４の実施形態と同じ構成で通信用プロセス１４に伝達し、通信用プロセス１４とマシンＢのIRP応答処理用プロセス１３Ａ間でネットワーク通信するときの構成を示している。尚、ネットワーク通信に、仮想デバイスを用いることも好適である。
【０１１６】
図３４に示すように、まず、アプリケーション１１からの要求をマシンＡのIRP応答返却部２３ＤからマシンＢのIRP処理用プロセス１３Ａに伝達し応答を返す。次に、通信用プロセス１４は、I/Oマネージャ２１を介してIRP応答返却部２３Ｄに対して要求待ちをする。
【０１１７】
次に、アプリケーション１１からの要求がI/Oマネージャ２１を介してIRP応答返却部２３Ｄに伝達する。続いて、IRP応答返却部２３ＤからI/Oマネージャ２１を介して通信用プロセス１４に要求が伝達する。
【０１１８】
次に、IRP応答返却部２３ＤはI/Oマネージャ２１を介して通信用プロセス１４に対して応答待ちをする。次に、通信用プロセス１４は、ネットワーク通信によりIRP応答処理用プロセス１３Ａに要求を伝達する。
【０１１９】
続いて、IRP応答処理用プロセス１３Ａが要求を処理し、ネットワーク通信により通信用プロセス１４に応答を返す。
【０１２０】
次に、通信用プロセス１４からI/Oマネージャ２１を介してIRP応答返却部２３Ｄに応答が伝達する。続いて、IRP応答返却部２３ＤはI/Oマネージャ２１を介してアプリケーション１１に応答を返し、IRP処理を完結させる。
【０１２１】
第５の実施形態によれば、仮想デバイスのIRP応答処理をマシンＡ側でプログラムできない場合であっても、仮想デバイスを挿抜することができる。
【０１２２】
（第６の実施形態）
次に、第６の実施形態に係る仮想デバイス挿抜装置について説明する第６の実施形態は、第３、第４、第５の実施形態の言わば、変形例である。第３、第４、第５の実施形態において、IRP応答返却部２３Ｂ、２３Ｃ、２３Ｄはアプリケーション１１に応答するためのデータをあらかじめIRP応答処理用プロセス１３、１３Ａから受信しておいたり自身の中で保持するなどの方法で用意しておき、特定の要求に対してIRP応答返却部２３Ｂ、２３Ｃ、２３Ｄのみで処理してもよい。
【０１２３】
例えば、仮想デバイスの構成情報はデバイス接続時に必ず要求される。予め仮想デバイスの構成情報をIRP応答返却部２３Ｂ、２３Ｃ、２３Ｄに保持しておくことで、IRP応答処理用プロセス１３、１３Ａと通信することなくIRP応答返却部２３Ｂ、２３Ｃ、２３Ｄ内で処理することができる。
【０１２４】
例えば、仮想デバイスのステータスをポーリングするデバイス要求の場合、ステータスが変化した際にIRP応答処理用プロセス１３、１３ＡからIRP応答返却部２３に通知するようにしておくことで、アプリケーション１１からの要求に対してはIRP応答返却部２３Ｂ、２３Ｃ、２３Ｄ内で処理することができる。この場合、ステータスが変化するまでは同じステータスを応答し続ければよい。
【０１２５】
第６の実施形態によれば、アプリケーション１１からの要求に対して、IRP応答返却部２３Ｂ、２３Ｃ、２３ＤとIRP応答処理用プロセス１３、１３Ａ間で毎回通信しないで済むため、仮想デバイスの応答性を高めることができる。
【０１２６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１２７】
１、２、３、４、５・・・仮想デバイス挿抜装置
１０・・・ユーザ空間
１１・・・アプリケーション
１２・・・仮想デバイス挿抜命令部
１３、１３Ａ・・・IRP応答処理用プロセス
１４・・・通信用プロセス
２０・・・カーネル空間
２１・・・I/Oマネージャ
２２・・・汎用バスドライバー部
２３、２３Ａ、２３Ｂ、２３Ｃ、２３Ｄ・・・IRP応答返却部
２４・・・ファンクションドライバー
３０・・・仲介用デバイス
【図１】
2016091093.tif 000003
【図２】
2016091093.tif 000004
【図３】
2016091093.tif 000005
【図４】
2016091093.tif 000006
【図５】
2016091093.tif 000007
【図６】
2016091093.tif 000008
【図７】
2016091093.tif 000009
【図８】
2016091093.tif 000010
【図９】
2016091093.tif 000011
【図１０】
2016091093.tif 000012
【図１１】
2016091093.tif 000013
【図１２】
2016091093.tif 000014
【図１３】
2016091093.tif 000015
【図１４】
2016091093.tif 000016
【図１５】
2016091093.tif 000017
【図１６】
2016091093.tif 000018
【図１７】
2016091093.tif 000019
【図１８】
2016091093.tif 000020
【図１９】
2016091093.tif 000021
【図２０】
2016091093.tif 000022
【図２１】
2016091093.tif 000023
【図２２】
2016091093.tif 000024
【図２３】
2016091093.tif 000025
【図２４】
2016091093.tif 000026
【図２５】
2016091093.tif 000027
【図２６】
2016091093.tif 000028
【図２７】
2016091093.tif 000029
【図２８】
2016091093.tif 000030
【図２９】
2016091093.tif 000031
【図３０】
2016091093.tif 000032
【図３１】
2016091093.tif 000033
【図３２】
2016091093.tif 000034
【図３３】
2016091093.tif 000035
【図３４】
2016091093.tif 000036