(57)【要約】【課題】プリンタやストレージなどのデバイス（周辺機器）をネットワーク上のクライアントＰＣで共用する場合、サーバ側の処理負荷を低減し、ユーザに手動操作を強いることなく、必要なときだけデバイスにアクセスするように制御する手段を提供する。【解決手段】クライアントＰＣは、ネットワークを介して取得したデバイスの接続情報をもとに接続シミュレート手段によって当該デバイスが直接接続されているようにシミュレートし、アプリケーション層からの入出力指示があると、デバイスに対する制御コマンドを生成し、制御コマンドの入出力ポートがオープンされると、接続シミュレート手段に対しサーバとのセッション開始を指示し、セッション接続が開始されるとサーバを介してデバイスとの間でデータの入出力を行い、当該入出力ポートがクローズされると、接続シミュレート手段に対してサーバとのセッション終了を指示し、セッションを終了させる。【選択図】図６
2010113606.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介してサーバに接続されたデバイスとの間でデータの入出力を行うクライアントであって、
前記デバイスへの入出力を指示するアプリケーション層と、
前記ネットワークを介して前記デバイスの接続情報を取得するデバイス接続情報取得手段と、
前記デバイスの接続情報をもとに当該デバイスが直接接続されているようにシミュレートする接続シミュレート手段と、
前記接続シミュレート手段により接続がシミュレートされたデバイスに対する制御コマンドの入出力ポートを生成する入出力ポート生成手段と、
前記アプリケーション層からの入出力指示に応じて前記デバイスに対する制御コマンドを生成する制御コマンド生成手段と、
当該デバイスに対する前記入出力ポートに当該制御コマンドを送信する制御コマンド送信手段と、
前記入出力ポートを前記アプリケーション層からの入出力指示の発生によりオープンし、当該入出力指示の終了によりクローズする入出力ポート制御手段と、
前記入出力ポート制御手段が前記入出力ポートをオープンしたとき、前記接続シミュレート手段に対して前記サーバとのセッション開始を指示するセッション開始手段と、
前記入出力ポート制御手段が前記入出力ポートをクローズしたとき、前記接続シミュレート手段に対して前記サーバとのセッション終了を指示するセッション終了手段と、
を備えることを特徴とするクライアント。
【請求項２】
前記セッション開始手段は、前記入出力ポート制御手段が前記入出力ポートをオープンし且つ前記制御コマンド送信手段が送信した制御コマンドが当該入出力ポートを通過したとき、前記接続シミュレート手段に対して前記サーバとのセッション開始を指示すること
を特徴とする請求項１に記載のクライアント。
【請求項３】
前記接続シミュレート手段は、前記セッション終了手段から前記サーバとのセッション終了の指示があると、規定時間が経過した後に当該セッションを終了すること
を特徴とする請求項１に記載のクライアント。
【請求項４】
前記規定時間が経過する前に前記アプリケーション層からの入出力指示があると、前記接続シミュレート手段は前記セッション終了の指示を実行せず、前記入出力ポート制御手段が当該入出力ポートをオープンにして、前記制御コマンド送信手段により当該デバイスに対する制御コマンドの送信を開始すること
を特徴とする請求項３に記載のクライアント。
【請求項５】
前記デバイスの接続情報を当該クライアント内に保持している場合、前記デバイス接続情報取得手段は、前記ネットワークを介して当該デバイスの接続情報を取得せず、
前記接続シミュレート手段は、当該クライアント内に保持しているデバイスの接続情報をもとに、当該デバイスの接続をシミュレートすること
を特徴とする請求項１に記載のクライアント。
【請求項６】
前記デバイスの接続情報を当該クライアント内に保持していない場合、前記デバイス接続情報取得手段は、前記ネットワークを介して当該デバイスの接続情報を取得し、
前記接続シミュレート手段は、該取得したデバイスの接続情報をもとに、当該デバイスの接続をシミュレートすること
を特徴とする請求項１に記載のクライアント。
【請求項７】
デバイスと、サーバと、ネットワークを介して前記サーバに接続された前記デバイスとの間でデータの入出力を行うクライアントから構成されるデバイス共有システムにおいて、
前記クライアントは、
前記デバイスへの入出力を指示するアプリケーション層と、
前記ネットワークを介して前記デバイスの接続情報を取得するデバイス接続情報取得手段と、
前記デバイスの接続情報をもとに当該デバイスが直接接続されているようにシミュレートする接続シミュレート手段と、
前記接続シミュレート手段により接続がシミュレートされたデバイスに対する制御コマンドの入出力ポートを生成する入出力ポート生成手段と、
前記アプリケーション層からの入出力指示に応じて前記デバイスに対する制御コマンドを生成する制御コマンド生成手段と、
当該デバイスに対する前記入出力ポートに当該制御コマンドを送信する制御コマンド送信手段と、
前記入出力ポートを前記アプリケーション層からの入出力指示の発生によりオープンし、当該入出力指示の終了によりクローズする入出力ポート制御手段と、
前記入出力ポート制御手段が前記入出力ポートをオープンしたとき、前記接続シミュレート手段に対して前記サーバとのセッション開始を指示するセッション開始手段と、
前記入出力ポート制御手段が前記入出力ポートをクローズしたとき、前記接続シミュレート手段に対して前記サーバとのセッション終了を指示するセッション終了手段と、
から構成されることを特徴とするデバイス共有システム。
【請求項８】
前記セッション開始手段は、前記入出力ポート制御手段が前記入出力ポートをオープンし且つ前記制御コマンド送信手段が送信した制御コマンドが当該入出力ポートを通過したとき、前記接続シミュレート手段に対して前記サーバとのセッション開始を指示すること
を特徴とする請求項７に記載のデバイス共有システム。
【請求項９】
前記接続シミュレート手段は、前記セッション終了手段から前記サーバとのセッション終了の指示があると、規定時間が経過した後に当該セッションを終了すること
を特徴とする請求項７に記載のデバイス共有システム。
【請求項１０】
前記規定時間が経過する前に前記アプリケーション層からの入出力指示があると、前記接続シミュレート手段は前記セッション終了の指示を実行せず、前記入出力ポート制御手段が当該入出力ポートをオープンにして、前記制御コマンド送信手段により当該デバイスに対する制御コマンドの送信を開始すること
を特徴とする請求項９に記載のデバイス共有システム。
【請求項１１】
前記デバイスの接続情報を当該クライアント内に保持している場合、前記デバイス接続情報取得手段は、前記ネットワークを介して前記デバイスの接続情報を取得せず、
前記接続シミュレート手段は、当該クライアント内に保持しているデバイスの接続情報をもとに、当該デバイスの接続をシミュレートすること
を特徴とする請求項７に記載のデバイス共有システム。
【請求項１２】
前記デバイスの接続情報を当該クライアント内に保持していない場合、前記デバイス接続情報取得手段は、前記ネットワークを介して前記デバイスの接続情報を取得し、
前記接続シミュレート手段は、該取得したデバイスの接続情報をもとに、当該デバイスの接続をシミュレートすること
を特徴とする請求項７に記載のデバイス共有システム。
【請求項１３】
ネットワークを介してサーバに接続されたデバイスをクライアントによって共有するデバイス共有方法であって、
前記ネットワークを介して前記デバイスの接続情報を取得するデバイス接続情報取得ステップと、
前記デバイスの接続情報をもとに当該デバイスが直接接続されているようにシミュレートする接続シミュレートステップと、
前記接続シミュレートステップにおいて接続がシミュレートされたデバイスに対する制御コマンドの入出力ポートを生成する入出力ポート生成ステップと、
前記デバイスへの入出力を指示するアプリケーション層からの入出力指示に応じて前記デバイスに対する制御コマンドを生成する制御コマンド生成ステップと、
当該デバイスに対する前記入出力ポートに当該制御コマンドを送信する制御コマンド送信ステップと、
前記入出力ポートを前記アプリケーション層からの入出力指示の発生によりオープンし、当該入出力指示の終了によりクローズする入出力ポート制御ステップと、
前記入出力ポート制御ステップにおいて前記入出力ポートがオープンされたとき、前記接続シミュレートステップにおいて前記サーバとのセッション開始を指示させるセッション開始ステップと、
前記入出力ポート制御ステップにおいて前記入出力ポートがクローズされたとき、前記接続シミュレートステップにおいて前記サーバとのセッション終了を指示させるセッション終了ステップと、
を実行することを特徴とするデバイス共有方法。
【請求項１４】
前記セッション開始ステップでは、前記入出力ポート制御ステップで入出力ポートがオープンされ且つ前記制御コマンド送信ステップで送信された制御コマンドが当該入出力ポートを通過したとき、前記接続シミュレートステップにおいて前記サーバとのセッション開始を指示させること
を特徴とする請求項１３に記載のデバイス共有方法。
【請求項１５】
前記接続シミュレートステップでは、前記セッション終了ステップにおいて前記サーバとのセッション終了の指示があると、規定時間が経過した後に当該セッションを終了させること
を特徴とする請求項１３に記載のデバイス共有方法。
【請求項１６】
前記規定時間が経過する前に前記アプリケーション層からの入出力指示があると、前記接続シミュレートステップでは前記セッション終了の指示を実行せず、前記入出力ポート制御ステップにおいて当該入出力ポートをオープンさせて、前記制御コマンド送信ステップにおいて当該デバイスに対する制御コマンドの送信を開始させること
を特徴とする請求項１５に記載のデバイス共有方法。
【請求項１７】
前記デバイスの接続情報を当該クライアント内に保持している場合、前記デバイス接続情報取得ステップでは、前記ネットワークを介して当該デバイスの接続情報を取得せず、
前記接続シミュレートステップにおいて、当該クライアント内に保持しているデバイスの接続情報をもとに、当該デバイスの接続をシミュレートすること
を特徴とする請求項１３に記載のデバイス共有方法。
【請求項１８】
前記デバイスの接続情報を当該クライアント内に保持していない場合、前記デバイス接続情報取得ステップでは、前記ネットワークを介して当該デバイスの接続情報を取得し、
前記接続シミュレートステップにおいて、該取得したデバイスの接続情報をもとに、当該デバイスの接続をシミュレートすること
を特徴とする請求項１３に記載のデバイス共有方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークを介してデバイスを共有する機能を備えたシステム、クライアント、及びその制御方法に関するものである。
【背景技術】
【０００２】
ネットワークの普及により、従来、パーソナルコンピュータ（ＰＣ）などにローカル接続して利用していたデバイス（周辺機器）をネットワーク上のクライアントＰＣから利用できるように工夫したデバイスサーバが発表されている。
【０００３】
例えば、プリンタ、ストレージ、スキャナなどのデバイスを、ネットワーク上のクライアントＰＣからデバイスサーバを介して共有デバイスとして利用可能とするための実現方法がいくつか提案されている。
【０００４】
ひとつの実現方法として、クライアントＰＣのオペレーティングシステム（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ；以下、ＯＳ）に対して、ローカル接続されているデバイスとして仮想的に認識させる方法がある。
【０００５】
この方法では、クライアントＰＣに専用のアプリケーションソフトウェア（以下、ユーティリティ）を導入しておき、ユーザがデバイスにアクセスしようとするときにユーティリティを操作し、クライアントＰＣに対してローカル接続したデバイスとして仮想的に認識させることで、ネットワーク上のクライアントＰＣから、ローカル接続した状態と同様にアクセスできるようにしている。
【０００６】
図１６は、クライアントＰＣに導入したユーティリティをユーザが操作し、デバイスを使用する場合の基本的な動作を示すフローチャートである。ここでは、デバイスとしてプリンタを使用するものとして説明する。
【０００７】
ユーザは、まず、プリンタを使用するためにクライアントＰＣのユーティリティを起動する。そして、ユーザがクライアントＰＣのユーティリティを操作すると、デバイスサーバとの間でＵＤＰ（Ｕｓｅｒ
Ｄａｔａｇｒａｍ Ｐｒｏｔｏｃｏｌ）などを用いてデータ通信し、デバイスサーバを介して接続されているプリンタの状態を確認する（ステップＳ１６０１）。
【０００８】
デバイスサーバは、自らに接続されたプリンタの状態に関する情報を、デバイスサーバが他のクライアントＰＣとの間でセッション接続中か否かの情報とともに応答情報としてクライアントＰＣへ返す。
【０００９】
クライアントＰＣでは、ユーティリティがこの応答情報に基づきデバイスサーバがセッション接続中か否かを判断する（ステップＳ１６０２）。
【００１０】
デバイスサーバがセッション接続中の場合、若しくはデバイスサーバから正常に応答がない場合（ステップＳ１６０２でＮｏ）、セッション接続ができないため、ユーティリティを介してユーザにその旨を通知することで、本フローによる処理は終了となる。
【００１１】
デバイスサーバ及びプリンタが正常であり、他のクライアントＰＣとの間でセッション接続中でない場合（ステップＳ１６０２でＹｅｓ）、ユーザがクライアントＰＣのユーティリティにより接続操作を行うと、ユーティリティから接続開始命令が発行され（ステップＳ１６０３）、デバイスサーバを介して接続されているプリンタの情報（以下、デバイス情報）を取得し、このデバイス情報に基づいて当該プリンタの使用に必要となるソフトウェア（以下、デバイスドライバ）をロードする（ステップＳ１６０４）。
【００１２】
クライアントＰＣのユーティリティは、デバイスドライバのロードが完了すると、デバイスドライバを介し、デバイスサーバに対してセッション開始要求を送る（ステップＳ１６０５）。
【００１３】
デバイスサーバとの間でセッション接続が開始されると（ステップＳ１６０６でＹｅｓ）、プリンタへのアクセスが可能となり、クライアントＰＣはデバイスサーバを介してプリンタとの間でデータやコマンドの送受信を行い、プリンタにおいて印刷処理が実行される（ステップＳ１６０７）。なお、セッション接続が開始できない場合（ステップＳ１６０６でＮｏ）、本フローによる処理は終了となる。
【００１４】
印刷処理が完了してプリンタのアクセスを終了するときは、ユーザがクライアントＰＣのユーティリティを操作してプリンタの終了操作を実行する（ステップＳ１６０８）。
【００１５】
プリンタの終了操作が実行されると、クライアントＰＣのユーティリティはデバイスドライバを介し、デバイスサーバに対してセッション終了要求を送る（ステップＳ１６０９）。
【００１６】
クライアントＰＣのユーティリティは、デバイスサーバからセッション終了の「ＯＫ」応答を受信するとセッション接続を終了し（ステップＳ１６１０）、プリンタのデバイスドライバをアンロードする（ステップＳ１６１１）。
【００１７】
図１７は、図１６のフローチャートに基づいて動作する複数台のクライアントＰＣ（ＰＣ１，ＰＣ２）がプリンタにアクセスするときの過程を示したタイミングチャートである。
【００１８】
まず、ＰＣ１のユーザは、ＰＣ１のユーティリティを操作することにより、デバイスサーバを介してプリンタの状態を確認し、デバイスサーバが他のクライアントＰＣ（ここではＰＣ２）との間でセッション接続中か否かを確認する。
【００１９】
デバイスサーバ及びプリンタが正常であり、他のクライアントＰＣとの間でセッション接続中でない場合に、ＰＣ１のユーザがユーティリティによりプリンタの接続操作を行うと、ＰＣ１から接続開始命が発行され、デバイスサーバを介してプリンタのデバイス情報を取得し、当該プリンタの使用に必要となるデバイスドライバをロードする。
【００２０】
ＰＣ１は、デバイスドライバのロードが完了すると、このデバイスドライバを介してデバイスサーバに対してセッション開始要求を送り、デバイスサーバとの間でセッション接続が開始されるとプリンタへのアクセスが可能となる。
【００２１】
そして、ＰＣ１はデバイスサーバを介してプリンタとの間でデータやコマンドの送受信を行い、プリンタにおいて印刷処理などが実行される。
【００２２】
ＰＣ１とデバイスサーバがセッション接続中は、ＰＣ１によってデバイスサーバとのセッションが専有されているため、別のＰＣ２からプリンタにアクセスすることができない。
【００２３】
ＰＣ１によるプリンタへのアクセスが終了し、ＰＣ１のユーザがユーティリティによりプリンタの終了操作を実行すると、ＰＣ１のデバイスドライバから、デバイスサーバへセッション終了要求が送られる。そして、ＰＣ１は、デバイスサーバからセッション終了の「ＯＫ」応答を受信すると、プリンタのデバイスドライバをアンロードし、デバイスサーバとの間のセッション接続を終了する。
【００２４】
ここで、ＰＣ２のユーザがユーティリティによりプリンタの接続操作を行うと、他のクライアントＰＣによってデバイスサーバとのセッション接続が専有されていないので、ＰＣ２からプリンタへのアクセスが開始される。
【００２５】
このように、ユーティリティを使ってセッション接続の開始・終了を行うことによって、複数のクライアントＰＣからプリンタを共有することができる。
【００２６】
しかし、この方法では、ユーザによるセッション接続の開始・終了操作が必要であり、ユーザがユーティリティを使ってプリンタの終了操作をしない限り、デバイスサーバとのセッションが専有されてしまうため、他のクライアントＰＣがプリンタを使用することができないという問題が生じる。
【００２７】
かかる問題を解決するために、ブロックヘッダで特定されるデータ長のブロックデータが伝送される間だけ、特定のクライアントＰＣによるデータ伝送専有状態として、当該クライアントＰＣとプリンタとの間のデータ伝送を許可するデバイスサーバを用いたネットワークファイル管理システムが開示されている（特許文献１参照）。
【００２８】
【特許文献１】特開２００７−３１７０６７号公報
【発明の開示】
【発明が解決しようとする課題】
【００２９】
しかし、特許文献１に開示されたネットワークファイル管理システムでは、複数のクライアントＰＣから手動操作を行うことなく、ストレージを共有することはできるものの、多数のアクセス要求を処理し、特定のクライアントＰＣに対するデータ伝送専有状態の設定・解除を制御するために、デバイスサーバには高い処理性能が要求されるので、デバイスサーバの高価格化は避けられない。
【００３０】
上記問題に鑑みて、本発明は、ストレージやプリンタなどのデバイス（周辺機器）をネットワーク上のクライアントＰＣで共用する場合、サーバ側の処理負荷を低減するとともに、ユーザに手動操作を強いることなく、必要なときだけデバイスにアクセスするように制御する手段を提供することを目的とする。
【課題を解決するための手段】
【００３１】
上記目的を達するために、請求項１に記載のクライアントは、ネットワークを介してサーバに接続されたデバイスとの間でデータの入出力を行うクライアントであって、前記デバイスへの入出力を指示するアプリケーション層と、前記ネットワークを介して前記デバイスの接続情報を取得するデバイス接続情報取得手段と、前記デバイスの接続情報をもとに当該デバイスが直接接続されているようにシミュレートする接続シミュレート手段と、
前記接続シミュレート手段により接続がシミュレートされたデバイスに対する制御コマンドの入出力ポートを生成する入出力ポート生成手段と、前記アプリケーション層からの入出力指示に応じて前記デバイスに対する制御コマンドを生成する制御コマンド生成手段と、当該デバイスに対する前記入出力ポートに当該制御コマンドを送信する制御コマンド送信手段と、前記入出力ポートを前記アプリケーション層からの入出力指示の発生によりオープンし、当該入出力指示の終了によりクローズする入出力ポート制御手段と、前記入出力ポート制御手段が前記入出力ポートをオープンしたとき、前記接続シミュレート手段に対して前記サーバとのセッション開始を指示するセッション開始手段と、前記入出力ポート制御手段が前記入出力ポートをクローズしたとき、前記接続シミュレート手段に対して前記サーバとのセッション終了を指示するセッション終了手段とを備えることを特徴とする。
【００３２】
また、上記目的を達するために、請求項７に記載のデバイス共有システムは、デバイスと、サーバと、ネットワークを介して前記サーバに接続された前記デバイスとの間でデータの入出力を行うクライアントから構成されるデバイス共有システムにおいて、前記クライアントは、前記デバイスへの入出力を指示するアプリケーション層と、前記ネットワークを介して前記デバイスの接続情報を取得するデバイス接続情報取得手段と、前記デバイスの接続情報をもとに当該デバイスが直接接続されているようにシミュレートする接続シミュレート手段と、前記接続シミュレート手段により接続がシミュレートされたデバイスに対する制御コマンドの入出力ポートを生成する入出力ポート生成手段と、前記アプリケーション層からの入出力指示に応じて前記デバイスに対する制御コマンドを生成する制御コマンド生成手段と、当該デバイスに対する前記入出力ポートに当該制御コマンドを送信する制御コマンド送信手段と、前記入出力ポートを前記アプリケーション層からの入出力指示の発生によりオープンし、当該入出力指示の終了によりクローズする入出力ポート制御手段と、前記入出力ポート制御手段が前記入出力ポートをオープンしたとき、前記接続シミュレート手段に対して前記サーバとのセッション開始を指示するセッション開始手段と、
前記入出力ポート制御手段が前記入出力ポートをクローズしたとき、前記接続シミュレート手段に対して前記サーバとのセッション終了を指示するセッション終了手段と、から構成されることを特徴とする。
【００３３】
また、上記目的を達するために、請求項１３に記載のデバイス共有方法は、ネットワークを介してサーバに接続されたデバイスをクライアントによって共有するデバイス共有方法であって、前記ネットワークを介して前記デバイスの接続情報を取得するデバイス接続情報取得ステップと、前記デバイスの接続情報をもとに当該デバイスが直接接続されているようにシミュレートする接続シミュレートステップと、前記接続シミュレートステップにおいて接続がシミュレートされたデバイスに対する制御コマンドの入出力ポートを生成する入出力ポート生成ステップと、前記デバイスへの入出力を指示するアプリケーション層からの入出力指示に応じて前記デバイスに対する制御コマンドを生成する制御コマンド生成ステップと、当該デバイスに対する前記入出力ポートに当該制御コマンドを送信する制御コマンド送信ステップと、前記入出力ポートを前記アプリケーション層からの入出力指示の発生によりオープンし、当該入出力指示の終了によりクローズする入出力ポート制御ステップと、前記入出力ポート制御ステップにおいて前記入出力ポートがオープンされたとき、前記接続シミュレートステップにおいて前記サーバとのセッション開始を指示させるセッション開始ステップと、前記入出力ポート制御ステップにおいて前記入出力ポートがクローズされたとき、前記接続シミュレートステップにおいて前記サーバとのセッション終了を指示させるセッション終了ステップと、を実行することを特徴とする。
【発明の効果】
【００３４】
本発明によれば、クライアントＰＣのユーティリティなどでユーザが手動操作して行っていたセッション接続の開始・終了の操作が不要となり、ユーザはデバイスがネットワーク共有されていることを意識せずに使用することが可能となる。
【００３５】
また、ネットワーク上でデバイスを共有する際、特許文献１に開示されているような高い処理機能をデバイスサーバへ組み込む必要がなくなるため、デバイスサーバの負荷が軽減され、安価なネットワークシステム構成で複数のクライアントＰＣからデバイスを共有することが可能となる。
【００３６】
さらに、本発明によれば、クライアントＰＣは、デバイスドライバをロードするときのタイミングとデバイスにアクセスするときのセッション接続のタイミングを切り離して実行するので、必要なときだけデバイスサーバとの間でセッション接続が行われることになり、
一台のクライアントＰＣによるセッション接続の専有時間が短縮され、複数台のクライアントＰＣによってネットワーク共有されているデバイスを効率的に使用することができる。
【発明を実施するための最良の形態】
【００３７】
以下、本発明の第１の実施の形態について図面を参照して詳細に説明する。
【００３８】
図１は、本発明を実現するためのネットワークシステムの概略構成であり、ＰＣ１００Ａ，ＰＣ１００Ｂと、デバイスサーバ２００と、プリンタ３００（デバイス）などから構成されている。
【００３９】
このネットワークシステムでは、デバイスサーバ２００とプリンタ３００をＵＳＢ（Ｕｎｉｖｅｒｓａｌ
Ｓｅｒｉａｌ Ｂｕｓ）やＩＥＥＥ１３９４などのインターフェースに準拠した接続ケーブル４００でローカル接続する。また、デバイスサーバ２００とＰＣ１００（ＰＣ１００Ａ，ＰＣ１００Ｂ）は、有線又は無線のネットワーク５００で接続する。
【００４０】
また、図１のネットワークシステムでは、デバイスサーバ２００、プリンタ３００をそれぞれ別体の装置で構成しているが、この構成に限定されるものではなく、同等の機能を実現できる構成であれば種々の構成を採り得ることは勿論である。例えば、デバイスサーバ２００をプリンタ３００のケーシング内に収まるように一体構造としても良い。
【００４１】
なお、以降の説明においては、クライアントＰＣのＯＳをＷｉｎｄｏｗｓ（登録商標）、デバイスをプリンタ、デバイスサーバとデバイスの接続インターフェースをＵＳＢとした場合の構成で説明するが、これらに限定されず、別のＯＳや接続インターフェースを使用しても良い。
【００４２】
次に、図１のネットワークシステムを構成する各装置について順次説明してゆく。
【００４３】
まず、クライアントであるＰＣ１００について説明する。ＰＣ１００（ＰＣ１００Ａ，ＰＣ１００Ｂ）は、例えば、パーソナルコンピュータのような装置であり、ネットワーク５００と接続し、デバイスサーバ２００を介してプリンタ３００を利用することが可能な構成となっている。
【００４４】
図２は、ＰＣ１００（ＰＣ１００Ａ，ＰＣ１００Ｂ）のハードウェア構成及びソフトウェア構成の一例を示すブロック図である。
【００４５】
ＰＣ１００は、ＣＰＵ１０１、入力部１０２、表示部１０３、メモリ１０４、通信部１０５、外部記憶部１０６などから構成されており、これらが内部バス１０７で接続されている。
【００４６】
外部記憶部１０６は、ＯＳ１１０、アプリケーションプログラム１１１、本発明を実現するためのソフトウェア群１１２〜１１８（後述）など各種ソフトウェアが記録されている。ここで、アプリケーションプログラム１１１とは、プリンタ３００に対して印刷処理を実行させることができるソフトウェアプログラムを指す。
【００４７】
外部記憶部１０６に記憶されたこれらソフトウェアは、ＣＰＵ１０１の制御に従い、メモリ１０４上に読み出されて実行される。
【００４８】
通信部１０５は、ネットワーク５００（有線又は無線ネットワーク）に接続するためのインターフェースであり、デバイスサーバ２００との間でデータ通信を行うことで、ＰＣ１００からデバイスサーバ２００を介したプリンタ３００へのアクセスを可能とする。
【００４９】
本発明を実現するためのソフトウェア群１１２〜１１８について説明する。
【００５０】
ネットワークインターフェース層１１２は、Ｅｔｈｅｒｎｅｔ（登録商標）のような有線ネットワーク、若しくは、ＩＥＥＥ８０２．１１ａやＩＥＥＥ８０２．１１ｂのような無線ネットワークなどネットワーク５００に対応したネットワークパケットによる送受信や通信制御を行うためのソフトウェアである。
【００５１】
ネットワークプロトコル層１１３は、ＵＳＢパケットに対してＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）ヘッダの付加、取り外しの処理を行い、ネットワーク５００を介して接続されているデバイスサーバ２００との間のデータ通信を制御するソフトウェアである。
【００５２】
常駐サービス１１４は、クライアントＰＣ１００が起動するとともに動作を開始してデバイスサーバ２００を監視するソフトウェアである。また、後述するＵＳＢ仮想バスドライバ１１５をロードするソフトウェアである。
【００５３】
さらに、常駐サービス１１４は、ネットワークプロトコル層１１３とネットワークインターフェース層１１２を介してＵＤＰなどを用いてデバイスサーバ２００と通信し、デバイスサーバ２００との接続状態及びプリンタ３００との接続状態を定期的に確認する。
【００５４】
ここで、デバイスサーバ２００との間の接続状態とは、ネットワーク５００との物理的な接続状態及び他のクライアントＰＣとのセッションの有無などが含まれる。また、プリンタ３００の接続状態とは、プリンタ３００とでデバイスサーバ２００をローカル接続している接続ケーブル４００の接続状態及びプリンタ３００の電源オン・オフなどの状態が含まれる。
【００５５】
ＵＳＢ仮想バスドライバ１１５は、クライアントＰＣに擬似的にプリンタ３００（デバイス）が接続されたようにシミュレートし、ＯＳ１１０のモジュールであるＵＳＢプリンタクラスドライバ１１６をロードするソフトウェアである。また、後述するＵＳＢフィルタドライバ１１７からの通知に基づいてデバイスサーバ２００との間のセッション制御を行うソフトウェアである。
【００５６】
ＵＳＢプリンタクラスドライバ１１６は、プラグアンドプレイイベントを生成し、また、制御コマンドを送受信するためのＵＳＢポートを作成するとともに、その上位にＵＳＢフィルタドライバ１１７及びプリンタドライバ１１８をロードするソフトウェアである。さらに、後述するプリンタドライバ１１８で生成される制御コマンドをＵＳＢパケットに変換し、ＵＳＢパケットを制御コマンドに変換するソフトウェアである。
【００５７】
ＵＳＢフィルタドライバ１１７は、ＵＳＢポートの「オープン」、「クローズ」やＵＳＢポートを通過する制御コマンドの送受信を監視するソフトウェアである。また、監視した情報（以下、監視結果）をもとに、ＵＳＢ仮想バスドライバ１１５と連携することで、セッション接続の開始、終了を制御するソフトウェアである。
【００５８】
なお、セッション接続の開始、終了は、ＵＳＢポートの「オープン」、「クローズ」の監視結果をもとにして制御するが、さらにＵＳＢポートを通過する制御コマンドの送受信の監視結果を組み合わせて制御することも可能である。本発明の実施の形態では、ＵＳＢポートの「オープン」、「クローズ」の監視結果とＵＳＢポートを通過する制御コマンドの送受信の監視結果を組み合わせて制御する場合を例にして説明する。
【００５９】
プリンタドライバ１１８は、ＯＳ１１０やアプリケーションプログラム１１１など上位層のソフトウェア（以下、上位層のソフトウェア）の指示により、デバイスであるプリンタ３００に対する制御コマンドを生成し、この制御コマンドに対する応答を待つソフトウェアである。また、上位層のソフトウェアの指示に応じてＵＳＢポートの「オープン」、「クローズ」を制御するソフトウェアである。
【００６０】
次に、デバイスサーバ２００について説明する。デバイスサーバ２００は、ＰＣ１００Ａ，１００Ｂとデバイスであるプリンタ３００と間の接続制御を行う装置である。
【００６１】
図３は、デバイスサーバ２００のハードウェア構成及びソフトウェア構成の一例を示すブロック図である。
【００６２】
デバイスサーバ２００は、ＣＰＵ２０１、入力部２０２、表示部２０３、ＲＯＭ２０４、ＲＡＭ２０５、通信部２０６、ＵＳＢ
Ｉ／Ｆ（インターフェース）２０７などから構成されており、これらが内部バス２０８で接続されている。
【００６３】
ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０４には、ＯＳ２１０、制御プログラム２１１、本発明を実現するためのソフトウェア群２１２〜２１３（後述）など各種ソフトウェアが記録されており、これらソフトウェアは、ＣＰＵ２０１の制御に従い、ＲＡＭ２０５上に読み出されて実行される。
【００６４】
ＵＳＢインターフェース２０７は、接続ケーブル４００を介してプリンタ３００とローカル接続するためのインターフェースである。
【００６５】
通信部２０６は、ネットワーク５００（有線又は無線ネットワーク）に接続してＰＣ１００との間でデータ通信するためのインターフェースである。
【００６６】
本発明を実現するためのソフトウェア群２１２〜２１３について説明する。
【００６７】
通信層２１２は、ネットワークに接続された通信部２０６の制御を行うとともに、ネットワーク５００に接続されているＰＣ１００との間のセッション制御やネットワークパケットによる通信を行うソフトウェアである。
【００６８】
また、ＵＳＢコマンド層２１３との間で通信するため、ネットワークパケットとＵＳＢパケットとの変換を行う。ネットワークパケットはＵＳＢパケットにＩＰヘッダを付加して作成するため、変換にはＩＰヘッダの取り付け及び取り外しを行う。
【００６９】
ＵＳＢコマンド層２１３は、ＵＳＢパケットに基づいて、プリンタ３００との間でデータ通信を行うソフトウェアである。
【００７０】
なお、通信層２１２、ＵＳＢコマンド層２１３は、プリンタ３００内に内蔵する構成であっても良い。また、通信層２１２の機能を備えたソフトウェアを別筐体内に設け、デバイス（プリンタ３００）に接続可能なインターフェースを有した外付けアダプタの形態として構成してもよい。この場合は、ＵＳＢコマンド層２１３の機能を持つソフトウェアは、プリンタ３００側のＲＡＭや外部記憶装置などに記録しておく構成とする。
【００７１】
プリンタ３００は、ＰＣ１００で作成した文字データや画像データ、図形データなどを紙やシートなどの媒体に印刷する装置（デバイス）である。
【００７２】
なお、本発明の実施の形態は、デバイスとしてプリンタを例に説明しているが、例えば、ストレージやスキャナなど、別の機能を備えたデバイスであってもよく、更に、多機能周辺装置（ＭＦＰ）のように複数の機能を備えたデバイスであってもよい。
【００７３】
ここで、上述した図２及び図３で各ソフトウェア構成を説明したＰＣ１００とデバイスサーバ２００間の通信、ＰＣ１００とプリンタ３００間の通信の大まかな流れについて図４を参照しながら説明する。
【００７４】
まず、ＰＣ１００からプリンタ３００へデータ送信を行う場合について説明する。
【００７５】
ＰＣ１００においてプリンタ３００へのアクセス要求が発生すると、プリンタドライバ１１８は、アクセス要求の内容に応じて制御コマンドを生成し、ＵＳＢポートを「オープン」させる。そして、生成した制御コマンドをＵＳＢポートからＵＳＢフィルタドライバ１１７を経由してＵＳＢプリンタクラスドライバ１１６へ送る。
【００７６】
ＵＳＢフィルタドライバ１１７は、ＵＳＢポートが「オープン」し、制御コマンドが当該ＵＳＢポートを通過するとこれを検知してＵＳＢ仮想バスドライバ１１５に通知し、ＵＳＢ仮想バスドライバ１１５は、デバイスサーバ２００との間でセッション接続が開始されていない場合、デバイスサーバ２００に対してセッション開始要求を送る。
【００７７】
ＵＳＢプリンタクラスドライバ１１６は、ＵＳＢフィルタドライバ１１７を経由して送られてきた制御コマンドをＵＳＢパケットに変換し、ＵＳＢ仮想バスドライバ１１５へ送る。
【００７８】
ＵＳＢ仮想バスドライバ１１５では、デバイスサーバ２００との間でセッション接続を開始すると、ＵＳＢプリンタクラスドライバ１１６から送られてくるＵＳＢパケットをネットワークプロトコル層１１３に送る。
【００７９】
ネットワークプロトコル層１１３は、ＵＳＢ仮想バスドライバ１１５から送られてきたＵＳＢパケットにＩＰヘッダを付加し、ネットワーク５００に適した形式のデータであるネットワークパケットを作成する。
【００８０】
ネットワークインターフェース層１１６は、ネットワークプロトコル層１１５で作成されたネットワークパケットをネットワーク５００を介してデバイスサーバ２００に送出する。
【００８１】
このように、デバイスサーバ２００の通信層２１２とＰＣ１００のＵＳＢ仮想バスドライバ１１５の間は、信頼性のあるＴＣＰプロトコルを用いており、セッション接続の開始・終了は、ＰＣ１００のＵＳＢフィルタドライバ１１７がＵＳＢポートの「オープン」、「クローズ」の状態やＵＳＢポートにおけるコマンドデータの送受信状態を監視し、ＵＳＢ仮想バスドライバ１１５と連携することによって制御している。
【００８２】
サーバ２００では、まず、通信層２１２で、ＰＣ１００からネットワーク５００を介して送信されたネットワークパケットを受信し、ネットワークパケットからＩＰヘッダを取り外すことでＵＳＢパケットに変換し、これをＵＳＢコマンド層２１３へ送る。
【００８３】
ＵＳＢコマンド層２１３では、通信層２１２から送られたＵＳＢパケットを、接続ケーブル４００を介してプリンタ３００へ送る。
【００８４】
プリンタ３００は、デバイスサーバ２００から送られてきたＵＳＢパケットを制御コマンドに変換して解析し、解析結果に応じた印刷処理を実行する。
【００８５】
次に、プリンタ３００からＰＣ１００へデータ送信（応答）を行う場合について説明する。
【００８６】
上述した印刷処理などを行ったプリンタ３００は、その結果をＰＣ１００に対する応答コマンドとしてＵＳＢパケットでデバイスサーバ２００へ送る。
【００８７】
デバイスサーバ２００では、ＵＳＢコマンド層２１３がプリンタからの応答コマンドであるＵＳＢパケットを受け取り、それを通信層２１２へ送る。
【００８８】
通信層２１２では、ＵＳＢコマンド層２１３からのＵＳＢパケットにＩＰヘッダを付加し、ネットワーク５００に適した形式のデータであるネットワークパケットを作成し、ネットワーク５００を介してＰＣ１００に送出する。
【００８９】
このようにして、ＰＣ１００とプリンタ３００との間でデバイスサーバ２００を介したデータ通信が実行されることになる。
【００９０】
次に、ＰＣ１００（ＰＣ１００Ａ，ＰＣ１００Ｂ）の基本制御フローについて、図５及び図６を参照しながら説明する。まず、図５は、ＰＣ１００がプリンタ３００にアクセスして印刷処理を実行するために必要なデバイスドライバをロードするまでの制御動作の手順を示すフローチャートである。
【００９１】
ユーザがＰＣ１００を起動すると、ＰＣ１００内のソフトウェア群の中の常駐サービス１１４が動作し、ＵＤＰなどを用いてデバイスサーバ２００と通信して、デバイスサーバ２００との間の接続状態などの監視を開始するとともに、デバイスサーバ２００に接続されているプリンタ３００の接続状態を確認する。（ステップＳ５０１）。
【００９２】
常駐サービス１１４は、デバイスサーバ２００からの応答により、デバイスサーバ２００が他のクライアントＰＣとセッション接続中か否か判断するとともに、プリンタ３００との接続状態を判断する（ステップＳ５０２）。
【００９３】
プリンタ３００との接続が正常な状態でない、又は、デバイスサーバ２００が他のクライアントＰＣとセッション接続中の場合（ステップＳ５０２でＮｏ）、再び、ステップＳ５０１の処理に戻り、定期的にデバイスサーバ２００の状態及びプリンタ３００の接続状態の確認を行う。
【００９４】
プリンタ３００との接続が正常であり、デバイスサーバ２００が他のクライアントＰＣとセッション接続中でない場合（ステップＳ５０２でＹｅｓ）、常駐サービス１１４はＵＳＢ仮想バスドライバ１１５をロードする（ステップＳ５０３）。
【００９５】
常駐サービス１１４は、ＵＳＢ仮想バスドライバ１１５をロードが完了すると、デバイスドライバのマウント命令を発行する（ステップＳ５０４）。
【００９６】
ＵＳＢ仮想バスドライバ１１５は、デバイスドライバのマウント命令が発行されると、デバイスサーバ２００に対してセッション開始要求を送る（ステップＳ５０５）。
【００９７】
デバイスサーバ２００との間でセッション接続が開始できなかった場合（ステップＳ５０６でＮｏ）、常駐サービス１１４は、アンマウント命令を発行し（ステップＳ５１３）、ＵＳＢ仮想バスドライバ１１５をアンロードして（ステップＳ５１４）、再びステップＳ５０１の処理に戻る。
【００９８】
デバイスサーバ２００との間のセッション接続が開始されると（ステップＳ５０６でＹｅｓ）、ＵＳＢ仮想バスドライバ１１５は、デバイスサーバ２００に対して、プリンタ３００のデバイスドライバをロードするために必要となるデバイス情報を要求する（ステップＳ５０７）。
【００９９】
このとき、デバイスサーバ２００は、ＰＣ１００からのデバイス情報の要求をプリンタ３００に送り、プリンタ３００からデバイス情報の応答があると、このデバイス情報をＰＣ１００に返す。
【０１００】
ＰＣ１００では、ＵＳＢ仮想バスドライバ１１５がデバイス情報の応答を受けて、プリンタ３００が擬似的に接続されたようにシミュレートし、取得したデバイス情報に基づき、ＵＳＢプリンタクラスドライバ１１６をロードする。（ステップＳ５０８）。
【０１０１】
ＵＳＢプリンタクラスドライバ１１６は、ＵＳＢポートを作成するとともに、その上位にＵＳＢフィルタドライバ１１７及びプリンタドライバ１１８をロードする（ステップＳ５０９、ステップＳ５１０）。
【０１０２】
プリンタドライバ１１８のロードが完了すると、ＵＳＢ仮想バスドライバ１１５は、デバイスサーバ２００に対してセッション終了要求を送る（ステップＳ５１１）。そして、デバイスサーバ２００との間のセッションの終了処理を行い、ＰＣ１００とデバイスサーバ２００との間のセッションを終了する（ステップＳ５１２）。
【０１０３】
セッションが終了すると、ＰＣ１００には、プリンタ３００にアクセスして印刷するために必要なデバイスドライバが全てロードされた状態となる。そして、上位層のソフトウェア）から実行指示（以下、印刷実行命令）が発行されるまでの間、待機状態となる。
【０１０４】
次に、ＰＣ１００（ＰＣ１００Ａ，ＰＣ１００Ｂ）において、上位層のソフトウェアから印刷実行命令が発行されてプリンタ３００に印刷処理を実行させるときの制御動作の手順を図６に示すフローチャートを参照しながら説明する。
【０１０５】
なお、上述した図５で説明したように、ＰＣ１００には、必要なデバイスドライバが全てロードされており、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態にあるものとして説明する。
【０１０６】
ＰＣ１００によりプリンタ３００で印刷処理を実行させるとき、上位層のソフトウェアから印刷実行命令が発行される（ステップＳ６０１）。
【０１０７】
上位層のソフトウェアから印刷実行命令が発行されると、ＰＣ１００のプリンタドライバ１１８は、印刷実行命令に応じた制御コマンドを生成し、ＵＳＢポートを「オープン」する（ステップＳ６０２）。
【０１０８】
そして、生成した制御コマンドをＵＳＢポートからＵＳＢフィルタドライバ１１７を経由してプリンタクラスドライバ１１６に送る。プリンタクラスドライバ１１６では、制御コマンドをＵＳＢパケットに変換し、ＵＳＢ仮想バスドライバ１１５に送る（ステップＳ６０３）。
【０１０９】
ＵＳＢフィルタドライバ１１７は、ＵＳＢポートが「オープン」し、制御コマンドが当該ＵＳＢポートを通過するとこれを検知してＵＳＢ仮想バスドライバ１１５に通知し、ＵＳＢ仮想バスドライバ１１５は、セッションが接続されていない場合、デバイスサーバ２００に対してセッション開始要求を送る（ステップ６０４）。
【０１１０】
このセッション開始要求に対し、デバイスサーバ２００から「ＮＧ」応答があり、セッション接続を開始できない場合（ステップＳ６０５でＮｏ）、ステップＳ６０４へ戻り、セッション接続が開始可能となるまで、デバイスサーバ２００に対して定期的にセッション開始要求を送る。
【０１１１】
一方、デバイスサーバ２００から「ＯＫ」応答があると（ステップＳ６０５でＹｅｓ）、ＰＣ１００はデバイスサーバ２００とのセッション接続を開始する（ステップＳ６０６）。これによって、ＰＣ１００は、デバイスサーバ２００を介してプリンタ３００へアクセスして印刷処理が可能となる。
【０１１２】
ＰＣ１００は、上位層のソフトウェアからの指示に応じた制御コマンドを生成してデバイスサーバ２００に送り、プリンタ３００は、デバイスサーバ２００から受信した制御コマンドに応じた印刷処理を実行し、その結果などをデバイスサーバ２００に応答する(ステップＳ６０７)。
【０１１３】
そして、上位層のソフトウェアから終了指示（以下、印刷終了命令）が発行されるまでステップＳ６０７の処理が繰り返される（ステップＳ６０８でＮｏ）。
【０１１４】
ＰＣ１００の上位層のソフトウェアから印刷終了命令が発行されるとプリンタドライバ１１８は印刷終了命令に応じた制御コマンド（以下、終了コマンド）を生成し、ＵＳＢ仮想バスドライバ１１５を介して終了コマンドをデバイスサーバ２００に送信する（ステップＳ６０８でＹｅｓ）。
【０１１５】
このとき、デバイスサーバ２００では、ＰＣ１００から受信した終了コマンドをプリンタ３００に送信し、プリンタ３００からの終了コマンドに対する応答を受信してＰＣ１００Ａに送る処理を実行する。
【０１１６】
ＰＣ１００のプリンタドライバ１１８は、終了コマンドに対する応答を受信すると、ＵＳＢポートを「クローズ」し、ＵＳＢフィルタドライバ１１７は、ＵＳＢポートの「クローズ」をＵＳＢ仮想バスドライバ１１５に通知する（ステップＳ６０９）。
【０１１７】
ＵＳＢ仮想バスドライバ１１５は、ＵＳＢポート「クローズ」の通知を受けると、デバイスサーバ２００に対してセッション終了要求を送る（ステップＳ６１０）。
【０１１８】
デバイスサーバ２００からセッション終了「ＯＫ」の応答を受信すると、ＵＳＢ仮想バスドライバ１１５は、ＰＣ１００Ａとデバイスサーバ２００との間のセッションを終了する（ステップＳ６１１）。そして、再び、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。
【０１１９】
なお、クライアントＰＣは、セッションが終了した後も常駐サービス１１４によって定期的に（例えば、１分間隔）デバイスサーバ２００との間の接続状態を監視し、プリンタ３００との接続状態を確認している。
【０１２０】
従って、デバイスサーバ２００との間のネットワーク５００が終了、電源断、又は、プリンタ３００の接続ケーブル断、電源断などの異常を検出した場合、常駐サービス１１４からアンマウント命令を発行し、ロードされているデバイスドライバ（プリンタドライバ１１８、ＵＳＢフィルタドライバ１１７、ＵＳＢプリンタクラスドライバ１１６、ＵＳＢ仮想デバイスドライバ１１５）をアンロードするようにしてもよい。
【０１２１】
本実施の形態では、デバイスドライバのロードが完了した際にセッション接続を一旦終了させる（図５参照）。そして、クライアントＰＣにおけるＵＳＢポートの「オープン」及び「クローズ」の状態と当該ＵＳＢポートを通過する制御コマンドの送受信状態に基づいてセッション接続の開始、終了を行うことを特徴とする（図６参照）。
【０１２２】
次に、デバイスサーバ２００の制御動作について図７を参照しながら説明する。
【０１２３】
デバイスサーバ２００では、ＰＣ１００からのパケットの受信を監視している。
【０１２４】
セッション開始要求のパケットを受信した場合（ステップＳ７０１でＹｅｓ）、他のＰＣ１００とセッション接続中であるか否かを確認する（ステップＳ７０２）。
【０１２５】
既にセッション接続が開始されている場合（ステップＳ７０２でＹｅｓ）、このＰＣ１００に対して「ＮＧ」を返す（ステップＳ７０３）。
【０１２６】
セッション接続が開始されていない場合（ステップＳ７０２でＮｏ）、このＰＣ１００とセッション接続を開始し（ステップ７０４）、セッション接続が完了すると、応答コマンドとして「ＯＫ」を返す（ステップＳ７０５）。
【０１２７】
一方、上述したステップＳ７０１の処理において、セッション開始終了要求以外のパケットを受信したが送られてきた場合（ステップＳ７０１でＮｏ）、セッション終了要求であれば（ステップＳ７０６でＹｅｓ）、セッション接続中のＰＣ１００との間のセッションを終了し（ステップＳ７０７）、応答コマンドとして「ＯＫ」を返す（ステップＳ７０８）。
【０１２８】
一方、上述したステップＳ７０６の処理において、セッション終了要求以外のパケットを受信した場合（ステップＳ７０６でＮｏ）、そのパケットの種類に応じた応答処理を実行する（ステップＳ７０９）。
【０１２９】
次に、上述したネットワークシステムにおいて、ＰＣ１００Ａからプリンタ３００にアクセスして印刷処理を実行させて終了するまでの具体的なタイミングチャートについて説明する。
【０１３０】
簡略化して分り易く説明するために、まず、ＰＣ１００Ａ一台だけがプリンタ３００にアクセスする場合（１対１で接続する場合）について、図８を参照しながら説明する。
【０１３１】
はじめに、図５で示したように、ＰＣ１００において、プリンタ３００のアクセスに必要なデバイスドライバが全てロードされ、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となるまでの過程を説明する。
【０１３２】
ここでは、他のクライアントＰＣからのセッション開始要求の有無を考慮せず、ＰＣ１００Ａからのセッション開始要求に対して、デバイスサーバ２００は常に「ＯＫ」を応答するものとする。
【０１３３】
ユーザがＰＣ１００Ａを起動すると、ＰＣ１００Ａ内のソフトウェア群の中の常駐サービス１１４が動作する。そして、ＵＤＰなどを用いてデバイスサーバ２００と通信して、デバイスサーバ２００との間の接続状態などの監視を開始するとともに、デバイスサーバ２００に接続されているプリンタ３００の接続状態を確認する（タイミングＴ８０１）。
【０１３４】
ＰＣ１００Ａの常駐サービス１１４は、デバイスサーバ２００からの応答により、デバイスサーバ２００が他のクライアントＰＣとセッション接続中でなく、プリンタ３００が正常に接続されていることを確認すると、ＵＳＢ仮想バスドライバ１１５をロードし、デバイスドライバのマウント命令を発行する（タイミングＴ８０２）。
【０１３５】
ＵＳＢ仮想バスドライバ１１５のロードが完了すると、ＵＳＢ仮想バスドライバ１１５は、デバイスサーバ２００に対してセッション開始要求を送る（タイミングＴ８０３）。
【０１３６】
デバイスサーバ２００が、ＰＣ１００Ａに対して「ＯＫ」を応答すると、ＰＣ１００Ａとデバイスサーバ２００の間のセッション接続が開始される（タイミングＴ８０４）。
【０１３７】
セッション接続が開始され、デバイスサーバ２００を介してプリンタ３００へのアクセスが可能となると、ＰＣ１００Ａは、デバイスサーバ２００に対してデバイス情報を要求する（タイミングＴ８０５）。
【０１３８】
デバイスサーバ２００は、ＰＣ１００Ａからのデバイス情報の要求をプリンタ３００に送り（タイミングＴ８０６）、プリンタ３００からデバイス情報の応答があると（タイミングＴ８０７）、このデバイス情報をＰＣ１００Ａに返す（タイミングＴ８０８）。
【０１３９】
ＰＣ１００Ａでは、取得したデバイス情報に基づき、ＵＳＢ仮想バスドライバ１１５によって擬似的にプリンタ３００が接続されたようにシミュレートし、ＯＳ１１０のモジュールであるＵＳＢプリンタクラスドライバ１１６をロードする。
【０１４０】
ＵＳＢプリンタクラスドライバ１１６は、ＵＳＢポートを作成するとともに、その上位にＵＳＢフィルタドライバ１１７及びプリンタドライバ１１８をロードする（タイミングＴ８０９）。
【０１４１】
プリンタドライバ１１８のロードが完了すると、ＵＳＢ仮想バスドライバ１１５は、デバイスサーバ２００に対してセッション終了要求を送り、ＰＣ１００Ａとデバイスサーバ２００との間のセッションを終了する（タイミングＴ８１０）。
【０１４２】
この時点で、ＰＣ１００Ａには、プリンタ３００のアクセスに必要なデバイスドライバが全てロードされ、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。
【０１４３】
続いて、図６で示したように、待機状態のＰＣ１００Ａがプリンタ３００に印刷処理を実行させるまでの過程を説明する。
【０１４４】
プリンタ３００に印刷処理を実行させるため、上位層のソフトウェアから印刷実行命令が発行されると（タイミングＴ８１１）、ＰＣ１００Ａのプリンタドライバ１１８は、印刷実行命令に応じた制御コマンドを生成し、ＵＳＢポートを「オープン」する（タイミングＴ８１２）。
【０１４５】
そして、生成した制御コマンドをＵＳＢポートからＵＳＢフィルタドライバ１１７を経由してＵＳＢプリンタクラスドライバ１１６に送る。ＵＳＢプリンタクラスドライバ１１６では、送られてきた制御コマンドをＵＳＢコマンドに変換してＵＳＢ仮想バスドライバ１１５に送る（タイミングＴ８１３）。
【０１４６】
ＵＳＢフィルタドライバ１１７は、ＵＳＢポートが「オープン」し、制御コマンドが当該ＵＳＢポートを通過するとこれを検知してＵＳＢ仮想バスドライバ１１５に通知し、セッションが接続されていない場合、ＵＳＢ仮想バスドライバ１１５は、デバイスサーバ２００に対してセッション開始要求を送る（タイミングＴ８１４）。
【０１４７】
デバイスサーバ２００から、セッション開始要求に対する「ＯＫ」応答を受信すると、ＰＣ１００Ａはデバイスサーバ２００との間のセッション接続を開始する（タイミングＴ８１５）。
【０１４８】
ＰＣ１００ＡのＵＳＢ仮想バスドライバ１１５では、デバイスサーバ２００から「ＯＫ」応答があり、セッション接続が開始されると、プリンタ３００に対する制御コマンドをデバイスサーバ２００へ送信する（タイミングＴ８１６）。
【０１４９】
デバイスサーバ２００は、制御コマンドを受信すると、これをプリンタ３００に送信する（タイミングＴ８１７）。プリンタ３００は、この制御コマンドに応じて印刷処理を実行し、その実行結果の応答をデバイスサーバ２００に返す（タイミングＴ８１８）。デバイスサーバ２００はプリンタ３００からの応答をＰＣ１００Ａに送る（タイミングＴ８１９）。
【０１５０】
この後、デバイスサーバ２００を介してＰＣ１００Ａとプリンタ３００との間でデータ通信が行われ、印刷処理が実行される。
【０１５１】
ＰＣ１００Ａの上位層のソフトウェアから印刷終了命令が発行されると、プリンタドライバ１１８は、終了コマンドを生成し、ＵＳＢ仮想バスドライバ１１５を介してデバイスサーバ２００に送信する（タイミングＴ８２０）。
【０１５２】
デバイスサーバ２００は、受信した終了コマンドをプリンタ３００に送信し（タイミングＴ８２１）、プリンタ３００から終了コマンドに対する応答を受信すると（タイミングＴ８２２）、この応答をＰＣ１００Ａに送る（タイミングＴ８２３）。
【０１５３】
ＰＣ１００Ａのプリンタドライバ１１８は、終了コマンドに対する応答を受信すると、ＵＳＢポートを「クローズ」し、ＵＳＢフィルタドライバ１１７は、ＵＳＢポートの「クローズ」をＵＳＢ仮想バスドライバ１１５に通知する（タイミングＴ８２４）。
【０１５４】
ＵＳＢ仮想バスドライバ１１５は、ＵＳＢポート「クローズ」の通知を受けると、デバイスサーバ２００に対してセッション終了要求を送る（タイミングＴ８２５）。そして、デバイスサーバ２００との間でセッション終了処理を実行し、セッション終了「ＯＫ」の応答を受信すると、ＰＣ１００Ａとデバイスサーバ２００との間のセッションが終了する（タイミングＴ８２６）。
【０１５５】
次に、実際の運用により近いケースとして、前述のネットワークシステムにおいて、複数台のＰＣ１００（ＰＣ１００Ａ，ＰＣ１００Ｂ）がプリンタ３００にアクセスする場合（Ｎ対１で接続する場合）について、図９を参照しながら説明する。
【０１５６】
図９は、ＰＣ１００Ａがセッション接続中のとき、若しくは、プリンタ３００にアクセス中のときに、別のＰＣ１００Ｂからプリンタ３００にアクセスしたときのタイミングチャートを示した説明図である。なお、ＰＣ１００Ａについては、前述した図８と同じ動作であるため、詳細な説明は省略する。
【０１５７】
まず、ＰＣ１００Ａがデバイスドライバのロード中に、ＰＣ１００Ｂからプリンタ３００にアクセスしようとした場合について説明する。
【０１５８】
ＰＣ１００Ａは、常駐サービス１１４によりＵＤＰなどでデータ通信して、デバイスサーバ２００との間の接続状態などの監視を開始するとともに、デバイスサーバ２００に接続されているプリンタ３００の接続状態を確認する（タイミングＴ９０１）。
【０１５９】
ＰＣ１００Ｂも同様に、常駐サービス１１４によりＵＤＰなどでデータ通信して、デバイスサーバ２００との間の接続状態などの監視を開始するとともに、デバイスサーバ２００に接続されているプリンタ３００の接続状態を確認する（タイミングＴ９０２）。
【０１６０】
ＰＣ１００Ａの常駐サービス１１４は、デバイスサーバ２００からの応答により、デバイスサーバ２００が他のクライアントＰＣとセッション接続中でないことを確認すると、ＵＳＢ仮想バスドライバ１１５をロードし、デバイスドライバのマウント命令を発行する（タイミングＴ９０３）。
【０１６１】
ここまでは、ＰＣ１００Ａ、ＰＣ１００Ｂはともに、常駐サービス１１４によりＵＤＰなどでデバイスサーバ２００とデータ通信するため、セッションを使用（専有）することはない。
【０１６２】
ここで、ＰＣ１００Ａにおいて、ロードが完了したＵＳＢ仮想バスドライバ１１５からデバイスサーバ２００に対してセッション開始要求が送られ、デバイスサーバ２００から「ＯＫ」の応答があると、ＰＣ１００Ａとデバイスサーバ２００との間でセッション接続が開始される（タイミングＴ９０４）。
【０１６３】
ＰＣ１００Ａとデバイスサーバ２００との間でセッション接続を開始すると、ＰＣ１００Ａがデバイスドライバのロードを完了するまでの間、デバイスサーバ２００と間のセッションの接続は継続される（タイミングＴ９０５）。
【０１６４】
ＰＣ１００Ｂが、ＵＳＢ仮想バスドライバ１１５をロードし、デバイスドライバのマウント命令を発行し（タイミングＴ９０６）、デバイスサーバ２００に対してセッション開始要求を送った場合、既に、ＰＣ１００Ａとの間でセッション接続が開始されているため、ＰＣ１００Ａにおいてデバイスドライバのロードが完了するまでの間（セッションが終了されるまでの間）、デバイスサーバ２００はＰＣ１００Ｂに対して「ＮＧ」応答を返す（タイミングＴ９０７）。
【０１６５】
ＰＣ１００Ｂでは、「ＮＧ」応答を受信すると、常駐サービス１１４によりデバイスサーバ２００のセッションの接続状態を定期的に確認する。
【０１６６】
デバイスサーバ２００では、ＰＣ１００Ａにおいて必要なデバイスドライバのロードが完了し、セッション接続が終了した後（タイミングＴ９０８）、ＰＣ１００Ｂからセッション開始要求を受信すると、ＰＣ１００Ｂとの間でセッション接続を開始し（タイミングＴ９０９）、ＰＣ１００Ｂがデバイスドライバのロードを完了するまでの間、ＰＣ１００Ｂと間のセッション接続は継続される。
【０１６７】
デバイスサーバ２００は、ＰＣ１００Ｂとの間でセッション接続中は、上述と同様にＰＣ１００Ａなど他のクライアントＰＣからのセッション開始要求に対して「ＮＧ」応答を返す。
【０１６８】
上述したように、セッション接続中のクライアントＰＣに必要なデバイスドライバのロードが完了するまでの間、他のクライアントＰＣとの間でセッション接続を行わないため、デバイスドライバのロード中は排他制御される。また、セッション接続したときにデバイス情報を取得するので、プリンタ３００の最新のデバイス情報を得ることが可能である。
【０１６９】
続いて、ＰＣ１００Ａがプリンタ３００にアクセス中（印刷処理中）に、ＰＣ１００Ｂからプリンタ３００にアクセスしようとした場合について説明する。
【０１７０】
この時点で、ＰＣ１００Ａ、ＰＣ１００Ｂには、プリンタ３００にアクセスして印刷するために必要なデバイスドライバが全てロードされた状態であるものとする。
【０１７１】
まず、ＰＣ１００Ａでは、上位層のソフトウェアから印刷実行命令が発行され（タイミングＴ９１０）、デバイスサーバ２００との間でセッション接続が開始されると（タイミングＴ９１１）、デバイスサーバ２００を介してプリンタ３００へのアクセスが可能となり、デバイスサーバ２００に対して制御コマンドを送信し、プリンタ３００で印刷処理が実行される（タイミングＴ９１２）。
【０１７２】
ＰＣ１００Ａがプリンタ３００へアクセス中（印刷処理中）の間、デバイスサーバ２００との間はセッション接続中のままである。
【０１７３】
このとき、ＰＣ１００Ｂによって印刷実行命令が発行されると（タイミングＴ９１３）、ＰＣ１００Ａと同様に、ＰＣ１００Ｂのプリンタドライバ１１８がプリンタ３００に対する制御コマンドを生成し、ＵＳＢポートを「オープン」する（タイミングＴ９１４）。
【０１７４】
そして、ＰＣ１００ＢのＵＳＢフィルタドライバ１１７は、ＵＳＢポートが「オープン」し、制御コマンドが当該ＵＳＢポートを通過するとこれを検知して仮想バスドライバ１１５に通知し、仮想バスドライバ１１５がデバイスサーバ２００に対してセッション開始要求を送る（タイミングＴ９１５）。
【０１７５】
しかし、既に、ＰＣ１００Ａがプリンタ３００にアクセスし、印刷処理が実行中であるため、デバイスサーバ２００は、ＰＣ１００Ａと間のセッション接続が終了されるまでの間、ＰＣ１００Ｂのセッション開始要求に対して「ＮＧ」応答を返す（タイミングＴ９１６）。
【０１７６】
ＰＣ１００Ｂでは、「ＮＧ」応答を受信すると、常駐サービス１１４によりデバイスサーバ２００のセッション接続を定期的に確認する。
【０１７７】
デバイスサーバ２００では、ＰＣ１００Ａとの間のセッション接続が終了された後（タイミングＴ９１７）、ＰＣ１００Ｂからの「セッション開始要求」を受信すると、ＰＣ１００Ｂとの間でセッション接続を開始する（タイミングＴ９１８）。そして、ＰＣ１００Ｂによるプリンタ３００へのアクセスが完了するまでの間、ＰＣ１００Ｂとデバイスサーバ２００との間のセッション接続は継続される。
【０１７８】
このように、第１の実施の形態におけるクライアントＰＣは、プリンタ３００にアクセス可能な状態のときにユーザの手動操作に頼ることなく自動的にデバイスサーバ２００とのセッション接続を開始してデバイス情報を取得し、デバイスドライバをロード後、セッション接続を終了して、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。
【０１７９】
そして、上位層のソフトウェアから印刷実行命令が発行されると、プリンタ３００にアクセスが可能であれば、ユーザの手動操作に頼ることなく自動的にデバイスサーバ２００とのセッション接続を開始してプリンタ３００における印刷実行に必要なコマンドを送受信し、印刷が終了するとユーザの手動操作に頼ることなく自動的にセッション接続を終了する。これにより、ユーザがセッション接続の開始・終了を意識しなくても、複数台のクライアントＰＣでデバイスを共有することが可能となる。
【０１８０】
次に、第２の実施の形態について説明する。本実施の形態は、デバイスドライバをロードするまでの過程において、セッション接続を必要としないＵＤＰなどによりデバイスサーバ２００とデータ通信してデバイス情報を取得する点が第１の実施の形態と異なる。
【０１８１】
図１０は、第１の実施の形態で説明した図５と同様、ＰＣ１００（ＰＣ１００Ａ，ＰＣ１００Ｂ）の制御フローであり、ＰＣ１００がプリンタ３００にアクセスして印刷処理を実行するために必要なデバイスドライバをロードするまでの制御動作の手順を示すフローチャートである。
【０１８２】
ユーザがＰＣ１００を起動すると、ＰＣ１００内のソフトウェア群の中の常駐サービス１１４が動作し、ＵＤＰなどを用いてデバイスサーバ２００と通信して、デバイスサーバ２００との間の接続状態などの監視を開始するとともに、デバイスサーバ２００に接続されているプリンタ３００の接続状態を確認する。（ステップＳ１００１）。
【０１８３】
続いて、常駐サービス１１４は、デバイスサーバ２００からの応答により、デバイスサーバ２００との接続を確認する（ステップＳ１００２）。
【０１８４】
ここで、デバイスサーバ２００又はプリンタ３００との接続が正常でない場合（ステップＳ１００２でＮｏ）、再び、ステップＳ１００１の処理に戻り、定期的にデバイスサーバ２００の状態を確認する。
【０１８５】
デバイスサーバ２００からの応答により、デバイスサーバ２００及びプリンタ３００との接続が正常である場合（ステップＳ１００２でＹｅｓ）、常駐サービス１１４は、ＵＳＢ仮想バスドライバ１１５をロードする（ステップＳ１００３）。
【０１８６】
ＵＳＢ仮想バスドライバ１１５をロードが完了すると、常駐サービス１１４は、デバイスドライバのマウント命令を発行する（ステップＳ１００４）。
【０１８７】
マウント命令が発行されると、ＵＳＢ仮想ドライバ１１５は、デバイスサーバ２００との間をセッション接続が必要ないＵＤＰなどを用いてデータ通信する。そして、デバイスサーバ２００に対して、プリンタ３００のデバイスドライバをロードするために必要となるデバイス情報を要求する（ステップＳ１００５）。
【０１８８】
このとき、デバイスサーバ２００では、ＰＣ１００から受信したデバイス情報の要求をプリンタ３００に送信し、プリンタ３００から応答情報としてデバイス情報を受信してＰＣ１００Ａに送る処理を実行する。
【０１８９】
ＰＣ１００では、取得したデバイス情報に基づき、ＵＳＢ仮想バスドライバ１１５によって擬似的にプリンタ３００が接続されたようにシミュレートし、ＵＳＢプリンタクラスドライバ１１６をロードする（ステップＳ１００６）。
【０１９０】
ＵＳＢプリンタクラスドライバ１１６は、ＵＳＢポートを作成するとともに、その上位にＵＳＢフィルタドライバ１１７及びプリンタドライバ１１８をロードする（ステップＳ１００７、ステップＳ１００８）。
【０１９１】
プリンタドライバ１１８のロードが完了すると、プリンタ３００にアクセスして印刷するために必要なデバイスドライバがＰＣ１００に全てロードされた状態となる。そして、上位層のソフトウェアからの印刷実行命令が発行されるまでの間、待機状態となる。
【０１９２】
本実施の形態において、ＰＣ１００は、ＵＤＰなどを用いてデバイスサーバ２００とデータ通信しているので、セッション接続せずに必要なデバイスドライバをロードすることができる。なお、データ通信はセッション接続を必要としないプロトコルであればよく、ＵＤＰに限定されるものではない。
【０１９３】
図９と同様に、前述のネットワークシステムにおいて、複数台のＰＣ１００（ＰＣ１００Ａ，ＰＣ１００Ｂ）がプリンタ３００にアクセスする場合（Ｎ対１で接続する場合）の実施の形態について、図１１を参照しながら説明する。
【０１９４】
図１１は、ＰＣ１００Ａがデバイスドライバのロード中に、別のＰＣ１００Ｂからプリンタ３００にアクセスしたときのタイミングチャートを示した説明図である。なお、ＰＣ１００Ａ及びＰＣ１００Ｂにおいて、デバイスドライバがロードされた後の動作については、第１の実施の形態（図９）と同じであるため、説明は省略する。
【０１９５】
ＰＣ１００Ａ、ＰＣ１００Ｂはともに、常駐サービス１１４によってセッション接続が必要ないＵＤＰなどを用いてデバイスサーバ２００と通信して、デバイスサーバ２００との間の接続状態などの監視を開始するとともに、デバイスサーバ２００に接続されているプリンタ３００の接続状態を確認する（タイミングＴ１１０１）。
【０１９６】
次に、ＰＣ１００Ａ、ＰＣ１００Ｂの常駐サービス１１４は、デバイスサーバ２００からの応答により、デバイスサーバ２００及びプリンタ３００との接続が正常であることを確認すると、ＵＳＢ仮想バスドライバ１１５をロードし、デバイスドライバのマウント命令を発行する（タイミングＴ１１０２）。
【０１９７】
そして、ＰＣ１００Ａ、ＰＣ１００ＢのＵＳＢ仮想バスドライバ１１５は、ＵＤＰなどを用いてデバイスサーバ２００と通信してデバイス情報を要求する（タイミングＴ１１０３）。
【０１９８】
デバイスサーバ２００はＰＣ１００Ａ、ＰＣ１００Ｂからのデバイス情報の要求をプリンタ３００に送り、プリンタ３００からデバイス情報の応答があると、このデバイス情報をＰＣ１００Ａ、ＰＣ１００Ｂに対して返す（タイミングＴ１１０４）。
【０１９９】
ＰＣ１００Ａ、ＰＣ１００Ｂは、取得したデバイス情報に基づき、それぞれのＵＳＢ仮想バスドライバ１１５によって、ＵＳＢプリンタクラスドライバ１１６、ＵＳＢフィルタドライバ１１７、プリンタドライバ１１８を順にロードしてゆく（タイミングＴ１１０５）。
【０２００】
このように、第２の実施の形態におけるクライアントＰＣは、プリンタ３００にアクセス可能な状態のときにユーザの手動操作に頼ることなく自動的にセッション接続が必要ないＵＤＰでデバイスサーバ２００と通信してデバイス情報を取得し、デバイスドライバをロード後、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。
【０２０１】
そして、上位層のソフトウェアから印刷実行命令が発行されると、プリンタ３００にアクセスが可能であれば、ユーザの手動操作に頼ることなく自動的にデバイスサーバ２００とのセッション接続を開始してプリンタ３００における印刷実行に必要なコマンドを送受信し、印刷が終了するとユーザの手動操作に頼ることなく自動的にセッション接続を終了する。これにより、ユーザがセッション接続の開始、終了を意識しなくても、複数台のクライアントＰＣでデバイスを共有することが可能となる。
【０２０２】
次に、第３の実施の形態について説明する。本実施の形態は、ＰＣ１００内にデバイスドライバのロードに必要な情報をキャッシュしている場合、このキャッシュされた情報に基づいて、デバイスサーバ２００とデータ通信せずにデバイスドライバをロードする点が上述の実施の形態と異なる。
【０２０３】
図１２は、ＰＣ１００がプリンタ３００にアクセスして印刷処理を実行するために必要なデバイスドライバをロードするまでの制御動作の手順を示すフローチャートである。
【０２０４】
ユーザがＰＣ１００を起動すると、ＰＣ１００内のソフトウェア群の中の常駐サービス１１４が動作し、ＵＤＰなどを用いてデバイスサーバ２００と通信して、デバイスサーバ２００との間の接続状態などの監視を開始するとともに、デバイスサーバ２００に接続されているプリンタ３００の接続状態を確認する。（ステップＳ１２０１）。
【０２０５】
常駐サービス１１４は、デバイスサーバ２００からの応答により、デバイスサーバ２００及びプリンタ３００との接続状態を確認する（ステップＳ１２０２）。
【０２０６】
デバイスサーバ２００及びプリンタ３００との接続状態が正常でない場合（ステップＳ１２０２でＮｏ）、再び、ステップＳ１２０１の処理に戻り、定期的にデバイスサーバ２００及びプリンタ３００との接続状態の確認を行う。
【０２０７】
デバイスサーバ２００からの応答により、デバイスサーバ２００及びプリンタ３００との接続状態が正常である場合（ステップＳ１２０２でＹｅｓ）、常駐サービス１１４は、ＵＳＢ仮想バスドライバ１１５をロードする（ステップＳ１２０３）。
【０２０８】
常駐サービス１１４は、ＵＳＢ仮想バスドライバ１１５をロードが完了すると、デバイスドライバのマウント命令を発行する（ステップＳ１２０４）。
【０２０９】
マウント命令が発行されると、ＵＳＢ仮想ドライバ１１５は、プリンタ３００のデバイスドライバのロードに必要となるデバイス情報をＰＣ１００内(自装置内)に既に保持（キャッシュ）しているかを確認する（ステップＳ１２０５）。
【０２１０】
ＰＣ１００内(自装置内)にキャッシュされた情報（以下、キャッシュ情報）がない場合（ステップＳ１２０５でＮｏ）、ＰＣ１００は、ＵＤＰによりデバイスサーバ２００とデータ通信して、デバイスドライバのロードに必要となるデバイス情報を取得する（ステップＳ１２０６）。
【０２１１】
ＰＣ１００内(自装置内)にキャッシュ情報がある場合（ステップＳ１２０５でＹｅｓ）、ステップＳ１２０７の処理はスキップし、次の処理ステップＳ１２０８に移る。
【０２１２】
ＵＳＢ仮想バスドライバ１１５は、キャッシュ情報若しくは、サーバ２００を介して取得したデバイス情報に基づき、擬似的にプリンタ３００が接続されたようにシミュレートし、ＯＳ１１０のモジュールであるＵＳＢプリンタクラスドライバ１１６をロードする（ステップＳ１２０７）。
【０２１３】
ＵＳＢプリンタクラスドライバ１１６は、ＵＳＢポートを作成するとともに、その上位にＵＳＢフィルタドライバ１１７及びプリンタドライバ１１８をロードする（ステップＳ１２０８、ステップＳ１２０９）。
【０２１４】
プリンタドライバ１１８のロードが完了すると、プリンタ３００にアクセスして印刷するために必要なデバイスドライバがＰＣ１００に全てロードされた状態となる。そして、上位層のソフトウェアからの印刷実行命令が発行されるまでの間、待機状態となる。
【０２１５】
第３の実施の形態において、ＰＣ１００は、自装置内にキャッシュ情報がある場合、デバイスサーバ２００との間でデータ通信を行うことなく、デバイスドライバをロードすることができる。
【０２１６】
一方、自装置内にキャッシュ情報がない場合、上述した第２の実施の形態と同様、ＵＤＰによりデバイスサーバ２００と通信してデバイス情報を取得するので、セッション接続する必要がない。なお、デバイスサーバ２００との通信はＵＤＰに限定されるものではない。
【０２１７】
ＰＣ１００Ａ及びＰＣ１００Ｂにおいて、キャッシュ情報に基づいてデバイスドライバをロードするときのタイミングチャートについて図１３を用いて説明する。なお、ＰＣ１００Ａ及びＰＣ１００Ｂにおいて、デバイスドライバがロードされた後の動作については、前述した第１の実施の形態（図９）と同じであるため、説明は省略する。
【０２１８】
また、自装置内にキャッシュ情報がなく、ＵＤＰなどを用いてデバイスサーバ２００と通信してデバイス情報を取得する場合の動作については、前述した第２の実施の形態（図１０、図１１）と同じであるため説明及び図１３中における図示は省略する。
【０２１９】
ＰＣ１００Ａ及びＰＣ１００Ｂは、プリンタ３００のネットワーク共有を行うための初期設定や、常駐サービス１１４、プリンタドライバ１１８などのインストールを実行するとき、プリンタ３００のネットワーク共有に必要なデバイス情報を、デバイスサーバ２００を介してプリンタ３００から予め取得して、これをＰＣ１００Ａ及びＰＣ１００Ｂの外部記憶部１０６に格納している（タイミングＴ１３０１）。このとき格納されたデバイス情報が、キャッシュ情報としてデバイスドライバのロードの際に使用される。
【０２２０】
ＰＣ１００Ａ、ＰＣ１００Ｂはともに、常駐サービス１１４によってセッション接続が必要ないＵＤＰなどを用いてデバイスサーバ２００と通信して、デバイスサーバ２００との間の接続状態などの監視を開始するとともに、デバイスサーバ２００に接続されているプリンタ３００の接続状態を確認する（タイミングＴ１３０２）。
【０２２１】
次に、ＰＣ１００Ａの常駐サービス１１４は、デバイスサーバ２００からの応答により、デバイスサーバ２００が他のクライアントＰＣとセッション接続中でないことを確認するとＵＳＢ仮想バスドライバ１１５をロードし、デバイスドライバのマウント命令を発行する（タイミングＴ１３０３）。
【０２２２】
ＵＳＢ仮想バスドライバ１１５は、デバイスドライバのマウント命令が発行されると、ＰＣ１００Ａ内（自装置内）にキャッシュ情報を保持しているかを確認する。
【０２２３】
ＰＣ１００Ａ内（自装置内）にキャッシュ情報を保持している場合、このキャッシュ情報に基づき、ＵＳＢプリンタクラスドライバ１１６、ＵＳＢフィルタドライバ１１７、プリンタドライバ１１８を順にロードしてゆく（タイミングＴ１３０４）。
【０２２４】
ＰＣ１００Ａでデバイスドライバのロード中、もう一方のクライアントＰＣ１００Ｂにおいて、デバイスドライバのマウント命令が発行された場合（タイミングＴ１３０５）、ＰＣ１００Ａと同様、まず、ＰＣ１００Ｂ内（自装置内）にキャッシュ情報があるか否かを確認する。
【０２２５】
ＰＣ１００Ｂ内（自装置内）にキャッシュ情報がある場合、このキャッシュ情報に基づいて、ＵＳＢプリンタクラスドライバ１１６、ＵＳＢフィルタドライバ１１７、プリンタドライバ１１８を順にロードしてゆく（タイミングＴ１３０６）。
【０２２６】
このように、第３の実施の形態におけるクライアントＰＣは、自装置内に保持されたキャッシュ情報に基づいてデバイスドライバをロード後、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。一方、キャッシュ情報がなければ、プリンタ３００にアクセス可能な状態のときにユーザの手動操作に頼ることなく自動的にセッション接続が必要ないＵＤＰでデバイスサーバ２００と通信してデバイス情報を取得し、デバイスドライバをロード後、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。
【０２２７】
そして、上位層のソフトウェアから印刷実行命令が発行されると、プリンタ３００にアクセスが可能であれば、ユーザの手動操作に頼ることなく自動的にデバイスサーバ２００とのセッション接続を開始してプリンタ３００における印刷実行に必要なコマンドを送受信し、印刷が終了するとユーザの手動操作に頼ることなく自動的にセッション接続を終了する。これにより、ユーザがセッション接続の開始、終了を意識しなくても、複数台のクライアントＰＣでデバイスを共有することが可能となる。
【０２２８】
また、キャッシュ情報を利用してデバイスドライバをロードするので、複数のクライアントＰＣがデバイスサーバ２００からデバイス情報を取得しようとするアクセスが不要となるため、ネットワーク５００のトラフィックを低減することができる。
【０２２９】
次に、第４の実施の形態として、ＰＣ１００がプリンタ３００にアクセスして印刷処理を実行するときの別の制御動作について、図１４を参照しながら説明する。
【０２３０】
本実施の形態は、ＵＳＢポートが「クローズ」された後、すぐにデバイスサーバ２００との間のセッション接続を終了せず、規定時間だけセッション接続の終了を遅らせる点に特徴がある。
【０２３１】
図１４は、ＰＣ１００（ＰＣ１００Ａ，ＰＣ１００Ｂ）の制御フローにおいて、ＰＣ１００がプリンタ３００にアクセスして印刷処理を実行するときの制御動作の手順を示すフローチャートである。
【０２３２】
なお、上述した第１の実施の形態で説明した図６と同様、ＰＣ１００には、必要なデバイスドライバが全てロードされており、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態にあるものとする。
【０２３３】
ＰＣ１００によりプリンタ３００で印刷処理を実行するとき、上位層のソフトウェアから印刷実行命令が発行される。
【０２３４】
上位層のソフトウェアから印刷実行命令が発行されると、ＰＣ１００のプリンタドライバ１１８は、印刷実行命令に応じた制御コマンドを生成し、ＵＳＢポートを「オープン」する（ステップＳ１４０１、Ｓ１４０２）。
【０２３５】
そして、生成した制御コマンドをＵＳＢポートからＵＳＢフィルタドライバ１１７を経由してプリンタクラスドライバ１１６に送る。プリンタクラスドライバ１１６では、制御コマンドをＵＳＢパケットに変換し、ＵＳＢ仮想バスドライバ１１５に送る（ステップＳ１４０３）。
【０２３６】
ＵＳＢフィルタドライバ１１７は、ＵＳＢポートが「オープン」し、制御コマンドがＵＳＢポートを通過するとこれを検知してＵＳＢ仮想バスドライバ１１５に通知し、ＵＳＢ仮想バスドライバ１１５は、セッション接続がされていない場合、デバイスサーバ２００に対してセッション開始要求を送る（ステップＳ１４０４）。
【０２３７】
このセッション開始要求に対し、デバイスサーバ２００から「ＮＧ」応答があり、セッション接続を開始できない場合（ステップＳ１４０５でＮｏ）、ステップＳ１４０４へ戻り、セッション接続が開始可能となるまで、デバイスサーバ２００に対して定期的にセッション開始要求を送る。
【０２３８】
一方、デバイスサーバ２００から「ＯＫ」応答があり（ステップＳ１４０５でＹｅｓ）、セッション接続が開始されると、ＰＣ１００は、デバイスサーバ２００を介してプリンタ３００へのアクセスが可能となる（ステップＳ１４０６）。
【０２３９】
次に、ＰＣ１００は、デバイスサーバ２００を介し、プリンタ３００に対して制御コマンドを送り、プリンタ３００からの処理結果などを受信する（ステップＳ１４０７）。そして、ＰＣ１００から印刷終了命令が発行されるまでステップＳ１４０７の処理が繰り返される（ステップＳ１４０８でＮｏ）。
【０２４０】
上位層のソフトウェアから印刷終了命令が発行されると（ステップＳ１４０８でＹｅｓ）、プリンタドライバ１１８は、終了コマンドを生成し、ＵＳＢ仮想バスドライバ１１５を介して終了コマンドをデバイスサーバ２００に送信し、プリンタ３００からの終了コマンドに対する応答をデバイスサーバ２００から受信する。
【０２４１】
ＰＣ１００のプリンタドライバ１１８は、終了コマンドに対する応答を受信すると、ＵＳＢポートを「クローズ」し、ＵＳＢフィルタドライバ１１７は、ＵＳＢポートの「クローズ」をＵＳＢ仮想バスドライバ１１５に通知する。（ステップＳ１４０９）。
【０２４２】
ＵＳＢ仮想バスドライバ１１５は、ＵＳＢポートが「クローズ」され、ＵＳＢポート「クローズ」の通知を受けると、デバイスサーバ２００との間のセッション接続をすぐに終了させず、上位層のソフトウェアから次の印刷実行命令が規定時間内に発行されるか否かを判定する（ステップＳ１４１０）。
【０２４３】
規定時間内に上位層のソフトウェアから印刷実行命令が発行されると（ステップＳ１４１０でＹｅｓ）、プリンタドライバ１１８は、制御コマンドを生成して、ＵＳＢポートを「オープン」し(ステップＳ１４１１)、生成した制御コマンドをＵＳＢポートからＵＳＢフィルタドライバ１１７を経由してプリンタクラスドライバ１１６に送る(ステップＳ１４１２)。
【０２４４】
そして、再び、ステップＳ１４０７の処理に戻り、デバイスサーバ２００を介し、プリンタ３００に対して制御コマンドを送り、プリンタ３００からの処理結果などを受信し、プリンタ３００による印刷処理が開始される。
【０２４５】
一方、規定時間内に上位層のソフトウェアから印刷実行命令が発行されないと（ステップＳ１４１０でＮｏ）、ＵＳＢ仮想バスドライバ１１５は、デバイスサーバ２００に対しセッション終了要求を送る（ステップＳ１４１３）。
【０２４６】
そして、デバイスサーバ２００との間でセッション終了処理を実行し、セッション終了「ＯＫ」の応答を受信すると、ＰＣ１００Ａとデバイスサーバ２００との間のセッション接続が終了となる（ステップＳ１４１４）。そして、再び、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。
【０２４７】
このように、ＵＳＢポートが「クローズ」された後、規定時間だけセッション接続の終了時間を遅らせることにより、上位層のソフトウェアから連続して印刷実行命令が出ている場合、一旦、セッション接続を終了し、再度、セッション接続するという処理が不要となる。
【０２４８】
従って、セッション接続は維持されるので、例えば、ＰＣ１００Ａから連続印刷を行っている途中に、ＰＣ１００Ｂの印刷処理が割り込むことを抑制することができる。
【０２４９】
図１５は、第４の実施の形態において、図１４で説明した制御フローで動作するＰＣ１００（ＰＣ１００Ａ，ＰＣ１００Ｂ）おいて、ＰＣ１００Ａが連続して印刷処理を実行するとき実施の形態である。
【０２５０】
ここで、簡略化して分り易く説明をするために、第４の実施の形態において、ＰＣ１００Ａ、ＰＣ１００Ｂともに既にデバイスドライバがロードしてある状態として説明する。なお、デバイスドライバをロードするまでの制御動作は、上述の第１〜第３の実施の形態を全て適用することができる。
【０２５１】
図１５において、ＰＣ１００Ａの１回目の印刷処理（タイミングＴ１５０１）が終了し、ＰＣ１００Ａのプリンタドライバ１１８がＵＳＢポートを「クローズ」させた状態から説明する（タイミングＴ１５０２）。
【０２５２】
ＰＣ１００Ａでは、プリンタドライバ１１８がＵＳＢポートを「クローズ」させると、ＵＳＢフィルタドライバ１１７がＵＳＢポート「クローズ」をＵＳＢ仮想バスドライバ１１５に通知する。
【０２５３】
ＵＳＢ仮想バスドライバ１１５は、ＵＳＢポート「クローズ」の通知を受けると、セッション接続をすぐに終了させず、規定時間が経過するまでの間はデバイスサーバ２００に対してセッション終了要求を送信しない（タイミングＴ１５０３）。
【０２５４】
この規定時間内に、ＰＣ１００Ｂの上位層のソフトウェアによって印刷実行命令が発行された場合（タイミングＴ１５０４）、ＰＣ１００Ｂからデバイスサーバ２００に対してセッション開始要求が送られるが、まだ、ＰＣ１００Ａとの間のセッション接続が終了していないため、デバイスサーバ２００はＰＣ１００Ｂに対して「ＮＧ」応答を返す（タイミングＴ１５０５）。
【０２５５】
一方、この規定時間内に、再度、ＰＣ１００Ａの上位層のソフトウェアから印刷実行命令が発行されると（タイミングＴ１５０６）、プリンタドライバ１１８は、再びＵＳＢポートを「オープン」させる（タイミングＴ１５０７）。
【０２５６】
ＵＳＢフィルタドライバ１１７では、ＵＳＢポートを通過する制御コマンドを検知するが、デバイスサーバ２００とは既にセッション接続中であり、セッション開始処理が不要である。従って、ＰＣ１００Ａのプリンタドライバ１１８がＵＳＢポートを介してデバイスサーバ２００に制御コマンドを送信することで、２回目の印刷処理が連続して実行される（タイミングＴ１５０８）。
【０２５７】
ＰＣ１００Ａのプリンタドライバ１１８は、２回目の印刷処理が終了すると、１回目と同様、ＵＳＢポートを「クローズ」させるが（タイミングＴ１５０９）、ＵＳＢ仮想バスドライバ１１５では、すぐにセッション接続を終了させず、規定時間が経過するまでデバイスサーバ２００に対してセッション終了要求を送信しない（タイミングＴ１５１０）。
【０２５８】
そして、この規定時間内にＰＣ１００Ａの上位層のソフトウェアから印刷実行命令が発行されないと、ＵＳＢ仮想バスドライバ１１５は、デバイスサーバ２００に対しセッション終了要求を送り、デバイスサーバ２００との間のセッション接続を終了する（タイミングＴ１５１１）。
【０２５９】
このように、第４の実施の形態におけるクライアントＰＣは、ＵＳＢポートを「クローズ」させた後、すぐにデバイスサーバとのセッション接続を終了させず、セッション終了のタイミングを遅らせることによって、連続印刷処理中に他のクライアントＰＣに割り込まれることなく、一台のクライアントＰＣで連続印刷することが可能となる。
【０２６０】
第４の実施の形態は、ＵＳＢポート（入出力ポート）の「クローズ」と「オープン」の間隔が短いデバイスや一つの処理（ジョブ）が完了するまでの間に「オープン」、「クローズ」を頻繁に行うデバイスに適している。例えば、スキャナやストレージなどのデバイスがこれに該当する。
【０２６１】
なお、上述した「規定時間」は、デバイスの種類に応じて設定することも可能である。例えば、スキャナとストレージを共有デバイスとして使用する場合、「規定時間」をそれぞれ異なる値に設定してもよい。
【０２６２】
なお、本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内において適宜変更可能である。
【０２６３】
上述した実施の形態では、一台のデバイスサーバが一台のプリンタ（デバイス）を管理する構成で説明したが、一台のデバイスサーバに複数のプリンタ（デバイス）を接続する構成としても良い。また、この場合はデバイス毎にセッションを用意し制御することで、別々のデバイスであれば、複数のクライアントＰＣから同時にアクセスすることが可能となる。
【０２６４】
また、デバイスサーバとデバイスの接続インターフェースをＵＳＢとした場合の構成で説明したが、これらに限定されず、別の接続インターフェースを使用しても良い。具体的には、ＩＥＥＥ１３９４に対応するためには、ＰＣ１００が備えるＵＳＢに関連するデバイスドライバ（ＵＳＢ仮想バスドライバ１１５、ＵＳＢプリンタクラスドライバ１１６、ＵＳＢフィルタドライバ１１７、プリンタドライバ１１８など）とデバイスサーバ２００が備えるＵＳＢコマンド層２１２が、それぞれＩＥＥＥ１３９４に関連するデバイスドライバとＩＥＥＥ１３９４コマンド層に置き換われば良い。
【０２６５】
さらにはＰＣ１００が複数の異なる接続インターフェース用のドライバ層を持ち、デバイスサーバ２００がそれに対応した複数の異なるコマンド層を備えるようにすれば、様々な接続インターフェースを備えたデバイスにも柔軟に対応できる。
【０２６６】
また、本発明の目的は、上述した実施の形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）が記憶媒体に格納されたプログラムコードを読み出して処理を実行することによっても達成することができる。
【０２６７】
この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施の形態の機能を実現することになり、そのプログラムコードを記憶したコンピュータで読み取り可能な記憶媒体は本発明を構成することになる。
【０２６８】
また、プログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ（オペレーティングシステム）等が実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現されるように構成しても良い。
【０２６９】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、このプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵ等が実際の処理の一部又は全部を実行し、その処理に応じて上述した実施形態が実現される場合も含んでいる。
【０２７０】
なお、プログラムコードを供給するため、例えば、フロッピー（登録商標)ディスク、ハードディスク、光磁気ディスク、ＣＤやＤＶＤに代表される光ディスク、磁気テープ、不揮発性のメモリカード、ＲＯＭ等の記憶媒体を用いることができる。又は、プログラムコードは、ネットワークを介してダウンロードしてもよい。
【図面の簡単な説明】
【０２７１】
【図１】本発明の実施形態に係るネットワークシステムの概略構成を示すブロック図である。
【図２】図１のＰＣ１００Ａ，１００Ｂのハードウェア及びハードウェアの概略構成を示すブロック図である。
【図３】図１のデバイスサーバ２００のハードウェア及びソフトウェアの概略構成を示すブロック図である。
【図４】クライアントＰＣとプリンタ間のデータ通信の大まかな流れの説明図である。
【図５】第１の実施の形態におけるクライアントＰＣの制御動作のうち、デバイスドライバをロードするまでの制御動作の一例を示すフローチャートである。
【図６】第１の実施の形態におけるクライアントＰＣの制御動作のうち、プリンタにアクセスして印刷処理が終了するまでの制御動作を示すフローチャートである。
【図７】第１の実施の形態におけるデバイスサーバのセッション接続の制御動作を示すフローチャートである。
【図８】第１の実施の形態における一台のクライアントＰＣがプリンタにアクセスするときの過程を示したタイミングチャートである。
【図９】第１の実施の形態における複数台のクライアントＰＣがプリンタにアクセスするときの過程を示したタイミングチャートである。
【図１０】第２の実施の形態におけるクライアントＰＣの制御動作のうち、デバイスドライバをロードするまでの制御動作の一例を示すフローチャートである。
【図１１】第２の実施の形態における複数台のクライアントＰＣがプリンタにアクセスするときの過程を示したタイミングチャートである。
【図１２】第３の実施の形態におけるクライアントＰＣの制御動作のうち、デバイスドライバをロードするまでの制御動作の一例を示すフローチャートである。
【図１３】第３の実施の形態における複数台のクライアントＰＣがプリンタにアクセスするときの過程を示したタイミングチャートである。
【図１４】第４の実施の形態として、プリンタにアクセスして印刷処理が終了するまでのクライアントＰＣの制御動作を示すフローチャートである。
【図１５】第４の実施の形態におけるクライアントＰＣの制御動作により、一台のクライアントＰＣが連続印刷するときの過程を示したタイミングチャートである。
【図１６】従来技術において、ネットワーク上のプリンタにアクセスするとき、クライアントＰＣのユーティリティを操作してセッション接続を制御するときの動作を示すフローチャートである。
【図１７】従来技術において、複数台のクライアントＰＣがプリンタにアクセスする場合の過程を示すタイミングチャートである。
【符号の説明】
【０２７２】
１００Ａ，１００Ｂ：クライアントＰＣ
１０１：ＣＰＵ
１０２：入力部
１０３：表示部
１０４：メモリ
１０５：通信部
１０６：外部記憶部
１０７：内部バス
１１０：ＯＳ
１１１：アプリケーションプログラム
１１２：ネットワークインターフェース層
１１３：ネットワークプロトコル層
１１４：常駐サービス
１１５：ＵＳＢ仮想バスドライバ
１１６：ＵＳＢプリンタクラスドライバ
１１７：ＵＳＢフィルタドライバ
１１８：プリンタドライバ
２００： デバイスサーバ
２０１：ＣＰＵ
２０２：入力部
２０３：表示部
２０４：ＲＯＭ
２０５：ＲＡＭ
２０６：通信部
２０７：ＵＳＢＩ／Ｆ（ＵＳＢインターフェース）
２０８：内部バス
２１０：ＯＳ
２１１：制御プログラム
２１２：通信層
２１３：ＵＳＢコマンド層
３００：プリンタ（デバイス）
４００：接続ケーブル
５００：ネットワーク
【図１】
2010113606.tif 000003
【図２】
2010113606.tif 000004
【図３】
2010113606.tif 000005
【図４】
2010113606.tif 000006
【図５】
2010113606.tif 000007
【図６】
2010113606.tif 000008
【図７】
2010113606.tif 000009
【図８】
2010113606.tif 000010
【図９】
2010113606.tif 000011
【図１０】
2010113606.tif 000012
【図１１】
2010113606.tif 000013
【図１２】
2010113606.tif 000014
【図１３】
2010113606.tif 000015
【図１４】
2010113606.tif 000016
【図１５】
2010113606.tif 000017
【図１６】
2010113606.tif 000018
【図１７】
2010113606.tif 000019