(57)【要約】【課題】ユニバーサルシリアルバス（ＵＳＢ）デバイスのアクセスおよび制御を、サーバコンピュータなどのコンピュータへ導くコンピュータ、システム、および方法を提供する。【解決手段】１つまたは複数のユニバーサルシリアルバス（ＵＳＢ）デバイスが、クライアントコンピュータにおいて接続される。これらのＵＳＢデバイスは、クライアントコンピュータによって認識され、それらのＵＳＢデバイスの１つまたは複数のための機能をアプリケーションサーバコンピュータが提供するかどうかについて判定が下される。機能がアプリケーションサーバコンピュータによって提供される場合、ＵＳＢデバイスからサーバコンピュータへの個別の通信パスが提供される。【選択図】図５
2006195981.tif 000002
【特許請求の範囲】
【請求項１】
クライアントＵＳＢデバイスと対話するアプリケーションプログラムを、リモートクライアントの代わりに実行するアプリケーションサーバであって、
前記クライアントＵＳＢデバイスと対話するために前記アプリケーションプログラムが使用するためのインターフェースを有するＵＳＢファンクションドライバと、
前記リモートクライアントと通信するように構成されているプロキシＵＳＢバスドライバと
を含むサーバドライバスタックを有し、
前記ＵＳＢファンクションドライバは、前記クライアントＵＳＢデバイスと対話するために前記プロキシＵＳＢバスドライバとインターフェースで接続されるように構成されていること
を特徴とするアプリケーションサーバ。
【請求項２】
前記プロキシＵＳＢバスドライバは、前記クライアントＵＳＢデバイスと対話するために、前記リモートクライアントにおいて実際のＵＳＢバスドライバと通信するように構成されていることを特徴とする請求項１に記載のアプリケーションサーバ。
【請求項３】
前記サーバドライバスタックは、前記プロキシＵＳＢバスドライバと前記リモートクライアントとの間で通信を提供するように構成されているサーバトランスポートドライバをさらに含むことを特徴とする請求項１に記載のアプリケーションサーバ。
【請求項４】
請求項１に記載のアプリケーションサーバと、
前記リモートクライアントと
を含み、
前記リモートクライアントは、前記クライアントＵＳＢデバイスと対話するように構成されているクライアントＵＳＢバスドライバを有し、
前記プロキシＵＳＢバスドライバは、前記クライアントＵＳＢデバイスと対話するために前記クライアントＵＳＢバスドライバと通信すること
を特徴とするクライアントサービスシステム。
【請求項５】
請求項１に記載のアプリケーションサーバと、
前記リモートクライアントと
を含み、
前記サーバドライバスタックは、前記プロキシＵＳＢバスドライバと前記リモートクライアントとの間で通信を提供するように構成されているサーバトランスポートドライバをさらに含み、
前記リモートクライアントはクライアントドライバスタックを有し、前記クライアントドライバスタックは、
前記クライアントＵＳＢデバイスと対話するように構成されているクライアントＵＳＢバスドライバと、
前記クライアントＵＳＢバスドライバと前記アプリケーションサーバとの間で通信を提供するように構成されているクライアントトランスポートドライバと
を含むことを特徴とするクライアントサービスシステム。
【請求項６】
請求項１に記載のアプリケーションサーバと、
前記リモートクライアントと
を含み、
前記サーバドライバスタックは、前記プロキシＵＳＢバスドライバと前記リモートクライアントとの間で通信を提供するように構成されているサーバトランスポートドライバをさらに含み、
前記リモートクライアントは、前記クライアントＵＳＢデバイスと対話するように構成されているクライアントＵＳＢバスドライバを有すること
を特徴とするクライアントサービスシステム。
【請求項７】
請求項１に記載のアプリケーションサーバと、
前記リモートクライアントと
を含み、
前記リモートクライアントは、
前記クライアントＵＳＢデバイスと対話するように構成されているクライアントＵＳＢバスドライバと、
前記クライアントＵＳＢバスドライバが前記クライアントＵＳＢデバイスと対話する際に経由するＵＳＢホストコントローラドライバと
を含むクライアントドライバスタックを有すること
を特徴とするクライアント／サーバリモートサービスシステム。
【請求項８】
アプリケーションサーバによって実行される第１のアプリケーションプログラムのためのユーザインターフェースを提供するクライアントであって、
第１のＵＳＢデバイスと、
ＵＳＢドライバスタックと
を含み、
前記ＵＳＢドライバスタックは、
前記第１のＵＳＢデバイスと通信するＵＳＢホストコントローラドライバと、
前記ＵＳＢホストコントローラを介して前記ＵＳＢデバイスと対話するＵＳＢバスドライバであって、ＵＳＢファンクションドライバと通信するように設計されているインターフェースを有するＵＳＢバスドライバと、
前記ＵＳＢバスドライバの前記インターフェースを使用して、前記クライアントドライバスタックを介して、前記アプリケーションサーバによって実行される前記第１のアプリケーションプログラムと前記第１のＵＳＢデバイスとの間で通信を提供するクライアントトランスポートドライバと
を含むことを特徴とするクライアント。
【請求項９】
前記クライアントトランスポートドライバは、前記アプリケーションサーバによって実装されるサーバＵＳＢファンクションドライバと通信することを特徴とする請求項８に記載のクライアント。
【請求項１０】
第２のＵＳＢデバイスと、
前記クライアントによって実行される第２のアプリケーションプログラムと、
前記ＵＳＢバスドライバの前記インターフェースを使用して、前記クライアントドライバスタックを介して、前記第２のアプリケーションプログラムと前記第２のＵＳＢデバイスとの間で通信を提供するクライアントＵＳＢファンクションドライバと
をさらに含み、
前記ＵＳＢホストコントローラドライバは、前記第２のＵＳＢデバイスと通信すること
を特徴とする請求項８に記載のクライアント。
【請求項１１】
前記クライアントトランスポートドライバは、前記アプリケーションサーバによって実装されるプロキシＵＳＢバスドライバと通信することを特徴とする請求項８に記載のクライアント。
【請求項１２】
第２のＵＳＢデバイスと、
前記クライアントによって実行される第２のアプリケーションプログラムと、
前記ＵＳＢバスドライバの前記インターフェースを使用して、前記クライアントドライバスタックを介して、前記第２のアプリケーションプログラムと前記第２のＵＳＢデバイスとの間で通信を提供するクライアントＵＳＢファンクションドライバと
をさらに含み、
前記ＵＳＢホストコントローラドライバは、前記第２のＵＳＢデバイスと通信すること、および、
前記クライアントトランスポートドライバは、前記アプリケーションサーバによって実装されるサーバＵＳＢファンクションドライバと通信すること
を特徴とする請求項８に記載のクライアント。
【請求項１３】
クライアントコンピュータに配置されている第１および第２のＵＳＢデバイスと対話する方法であって、
アプリケーションサーバによって実行されるホストされているアプリケーションプログラムの代わりに前記クライアントコンピュータにおいてユーザインターフェースを提供するステップと、
前記クライアントコンピュータによってローカルアプリケーションプログラムを実行するステップと、
前記クライアントコンピュータにおいてＵＳＢドライバスタックを提供するステップと、
前記ＵＳＢドライバスタックを介して、前記ホストされているアプリケーションプログラムと前記第１のＵＳＢデバイスとの間で通信するステップと、
前記ＵＳＢドライバスタックを介して、前記ローカルアプリケーションプログラムと前記第２のＵＳＢデバイスとの間で通信するステップと
を含むことを特徴とする方法。
【請求項１４】
請求項１３に記載のステップを実行するためのコンピュータ実行可能命令を有することを特徴とするコンピュータ読取り可能記憶媒体。
【請求項１５】
前記ＵＳＢドライバスタックは、少なくとも１つのＵＳＢファンクションドライバおよび１つのＵＳＢバスドライバを含むことを特徴とする請求項１３に記載の方法。
【請求項１６】
請求項１５に記載のステップを実行するためのコンピュータ実行可能命令を有することを特徴とするコンピュータ読取り可能記憶媒体。
【請求項１７】
前記ＵＳＢドライバスタックは、少なくとも１つのＵＳＢファンクションドライバ、１つのＵＳＢバスドライバ、および１つのＵＳＢホストコントローラドライバをさらに含むことを特徴とする請求項１３に記載の方法。
【請求項１８】
請求項１７に記載のステップを実行するためのコンピュータ実行可能命令を有することを特徴とするコンピュータ読取り可能記憶媒体。
【請求項１９】
前記ＵＳＢドライバスタックと、前記アプリケーションサーバによって実装されるＵＳＢファンクションドライバとの間で通信するステップをさらに含むことを特徴とする請求項１３に記載の方法。
【請求項２０】
請求項１９に記載のステップを実行するためのコンピュータ実行可能命令を有することを特徴とするコンピュータ読取り可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、ユニバーサルシリアルバス（ＵＳＢ）デバイスと通信するコンピュータ、システム、および方法に関し、より具体的には、ユニバーサルシリアルバス（ＵＳＢ）デバイスのアクセスおよび制御を、サーバコンピュータなどのコンピュータへ導くことに関する。
【背景技術】
【０００２】
本件特許出願人によって提供されているＴｅｒｍｉｎａｌ  Ｓｅｒｖｉｃｅなどの、リモートクライアントアクセス用のプラットフォームおよびシステムによって、コンピュータは、アプリケーションサーバによってホストされ、アプリケーションサーバに常駐しているアプリケーションプログラムに、遠隔地からアクセスすることができる。リモートクライアントアクセスシステムでは、クライアントコンピュータは通常、サーバコンピュータに依存して、そのサーバコンピュータに常駐しているアプリケーションプログラムを介してコンピューティング機能を提供する。アプリケーションプログラムの例としては、ワードプロセッシングプログラム、マルチメディアプログラム、およびデータ管理プログラムなどがある。
【０００３】
アプリケーションサーバコンピュータは、ホストコンピュータまたはターミナルサーバと呼ばれることがある。クライアントコンピュータは、リモート端末、リモートクライアント、またはシンクライアントと呼ばれることがある。クライアントコンピュータは、主にユーザインターフェース、言い換えると、ユーザおよびデバイＩ／Ｏとの対話用に使用される。クライアントコンピュータ上のソフトウェアは、通常は一般的なものであり、あるいはアプリケーション特有のものではなく、一般にオペレーティングシステムと、リモートクライアントアクセス環境をサポートするソフトウェアを含む汎用ソフトウェアとから構成される。サーバコンピュータにおけるソフトウェアは通常、データベースへのアクセス、文書処理、製図、および他の多くのタイプの用途などの、特定の機能を提供する専用のアプリケーションソフトウェアを含む。クライアントコンピュータとアプリケーションサーバの間で通信されるデータの大部分は、グラフィックスデータ、キーストローク、マウスの動きなどの、ユーザインターフェースに関連するコマンドおよびデータ、ならびにクライアントコンピュータに配置されているハードウェアデバイスに関連するコマンドおよびデータを含む。
【０００４】
アプリケーションサーバおよびクライアントは通常、本件特許出願人によって規定されているＲＤＰ（remote desktop protocol）などの所定の通信プロトコルを使用して、情報を相互に通信またはやり取りする。ＴＣＰ／ＩＰなどのより低位のネットワークプロトコルも含まれる。
【０００５】
リモートクライアントアクセスシステムの利点は、大半の機能および計算がサーバコンピュータにおいて行われるため、クライアントコンピュータのパワーを相対的に低く抑えることができることである。アプリケーションサーバは、典型的なデスクトップコンピュータよりも高価な場合が多いが、１台のアプリケーションサーバコンピュータは、より安価な多くのクライアントにサービスを提供することができる。
【０００６】
いくつかのシステムにおける別の利点として、データは、サーバコンピュータの物理ロケーションに常駐することができ、アプリケーションプログラムは、そのロケーションにおいてこれらのデータに基づいて動作することができ、これらのデータを相対的に低速な通信リンクを介してクライアントコンピュータへ転送する必要はなく、クライアントコンピュータの物理ロケーションではユーザインターフェースが実装されるだけである。
【０００７】
クライアントコンピュータは、ＵＳＢ（ユニバーサルシリアルバス）ポートを有する場合が多く、このポートには周辺デバイスが接続され、このようなデバイスは、ＵＳＢキーボードの場合のようにユーザインターフェースに関連する場合が多い。多くの場合、サーバコンピュータにおいて実行されるアプリケーションは、このようなＵＳＢデバイスにアクセスして対話する必要がある。ＵＳＢデバイスの他の例としては、デジタルカメラ、ドキュメントスキャナ、外部ディスクドライブ、およびメディアリーダーなどがある。アプリケーションサーバによってホストされるさまざまなアプリケーションは、これらのハードウェアデバイスと対話する必要が生じる場合がある。
【０００８】
典型的なＷｉｎｄｏｗｓ（登録商標）ベースのデスクトップ環境では、ローカルアプリケーションは、ドライバスタックと呼ばれる一連のドライバを介してＵＳＢデバイスと通信する。体系化および再利用上の目的から、スタックのコンポーネント間でさまざまな役割が分担されている。たとえばいくつかのドライバは、一般的なクラスのＵＳＢデバイスのすべてまたは一部に対して汎用性があり、多くの異なるデバイスと通信するために使用または再利用することができる。他のドライバは、特定のデバイスに対する固有の機能を実装し、特定のハードウェア専用に設計される場合が多い。
【０００９】
図１は、アプリケーションサーバのクライアントとしてではなく、スタンドアロンのコンピュータとして機能するコンピュータ内に実装される典型的なＵＳＢアーキテクチャを示している。図１は、ハードウェアコンポーネントとソフトウェアコンポーネントの間の論理的な通信を示している。
【００１０】
図１のシステムは、コンピュータ１００およびＵＳＢデバイス１０５を含む。ＵＳＢデバイス１０５は、物理的なＵＳＢポート（図示せず）を介してコンピュータ１００に接続されている。アプリケーションプログラム１１０は、コンピュータ上で実行され、ドライバスタック１１５を介してＵＳＢデバイス１０５と対話する。この例のドライバスタック１１５は、３つのＵＳＢドライバを有する。
【００１１】
ドライバスタック１１５の最も下のレベルでは、ＵＳＢホストコントローラ１２０が、コンピュータ内のＵＳＢハードウェア（図示せず）と直接通信し、またそのハードウェアを介してＵＳＢデバイス１０５と通信する。その上では、（ハブまたはハブドライバとも呼ばれる）低位のＵＳＢバスドライバ１２５が、ＵＳＢホストコントローラ１２０と通信し、ＵＳＢデバイスのパワー、列挙（enumeration）、およびさまざまなＵＳＢトランザクションを管理する。これらのドライバは、双方ともＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムの一部であり、すべてのＵＳＢデバイスに対して汎用性を有しており、これらのドライバは、コンピュータ１００に接続されるＵＳＢデバイスのタイプに応じて交換または変更する必要はない。
【００１２】
ドライバスタック１１５はまた、ＵＳＢファンクションデバイスドライバ１３０を含む。ＵＳＢファンクションデバイスドライバ１３０は、特定のデバイスまたはデバイスのクラス用にカスタマイズされる。結果として、使用されている実際のＵＳＢデバイスに応じて、さまざまなファンクションドライバがロードされる。ＵＳＢファンクションドライバは、ＵＳＢデバイスファンクションドライバ、クラスドライバ、あるいはカスタムドライバとも呼ばれる。
【００１３】
図１は、単一のアプリケーションプログラム１１０しか示していないが、コンピュータ１００は、通常は複数のアプリケーションプログラムを有し、そのうちの任意の１つまたは複数のアプリケーションプログラムは、図示されている単一のドライバスタック１１５を介してＵＳＢデバイス１０５と対話するように構成することができる。アプリケーションプログラム１１０は、ワードプロセッシングプログラム、ゲームプログラム、あるいは他のさまざまなタイプの任意のプログラムとすることができる。
【００１４】
図２は同様の例を示しており、コンピュータ２００は、複数のアプリケーションプログラム２０５および２１０と、複数のＵＳＢデバイス２１５、２２０、および２２５とを有する。この例では、アプリケーションプログラム２０５は、ＵＳＢデバイス２１５と対話し、その一方でアプリケーションプログラム２１０は、ＵＳＢデバイス２２０および２２５と対話する。
【００１５】
前の例と同様に、通信は、ＵＳＢドライバスタック２３０によって実施される。ＵＳＢドライバスタック２３０は、ＵＳＢデバイス２１５、２２０、および２２５のそれぞれと通信するＵＳＢホストコントローラ２３５およびＵＳＢバスドライバ２４０を含む。ＵＳＢドライバスタック２３０は、ＵＳＢデバイス２１５、２２０、および２２５のそれぞれに対応する複数のＵＳＢファンクションデバイスドライバ２４５、２５０、および２５５をさらに含む。既に説明したように、これらのＵＳＢファンクションデバイスドライバ２４５、２５０、および２５５のそれぞれは、特定のタイプまたはクラスのＵＳＢデバイスに基づいて選択され、ロードされる。
【００１６】
図示されているように、１つのアプリケーションプログラムは、複数のＵＳＢデバイスと対話することができる。複数のＵＳＢデバイスが組み込まれている場合、単一のコンピュータが複数のＵＳＢドライバスタックを有することも可能だが、それらのＵＳＢデバイスは、一般に同一のホストコントローラドライバおよびバスドライバを使用する。異なる種類のＵＳＢポートが使用されている場合、別々のポートドライバと「ミニポート」ドライバをロードすることができるが、一般にＵＳＢドライバスタック全体は、同じまま変わらない。
【００１７】
図３は、従来技術のリモートクライアント／サーバアーキテクチャにおけるＵＳＢデバイスの使用を示している。この例では、クライアントコンピュータ３００は、そのＵＳＢポートに１つまたは複数のＵＳＢデバイス３０５（１）〜３０５（Ｎ）が接続されている。クライアントコンピュータ３００はまた、オペレーティングシステム、またはそのようなＵＳＢデバイス用の他の低位のサポートを有する。詳細には、リモートクライアントコンピュータ３００は、ＵＳＢホストコントローラ３１０を含み、このＵＳＢホストコントローラ３１０は、ＵＳＢデバイス３０５と接続している。
【００１８】
クライアントコンピュータ３００は、自分自身とサーバコンピュータ３１５の間で転送されるコマンドおよびデータに応答して、ユーザの対話を実行する。１つまたは複数のアプリケーションプログラム３２０が、サーバコンピュータ３１５に常駐し、その上で実行される。遠隔地に配置されているＵＳＢデバイス３０５をサポートするために、サーバコンピュータ３１５のオペレーティングシステムまたは他のサポートソフトウェアは、ＵＳＢサポートを含む。詳細には、サーバコンピュータ３１５は、ＵＳＢファンクションデバイスドライバ３２５（１）〜３２５（Ｎ）、ＵＳＢバスドライバ３３０、およびＵＳＢホストコントローラ３３５を含む。
【００１９】
ＵＳＢファンクションデバイスドライバ３２５は、前述のＵＳＢファンクションデバイスドライバ１３０と同様の機能を実行する。ＵＳＢファンクションデバイスドライバ３２５は、ＵＳＢバスドライバ３３０と通信する。同じように、ＵＳＢバスドライバ３３０は、前述のＵＳＢバスドライバ１２５と同様の機能を実行する。サーバコンピュータ３１５は、ＵＳＢホストコントローラ３３５をさらに含み、このＵＳＢホストコントローラ３３５は、クライアントコンピュータ３００のＵＳＢホストコントローラ３１０に接続されているか、またはそのＵＳＢホストコントローラ３１０と通信する。ＵＳＢホストコントローラ３１０とＵＳＢホストコントローラ３３５の間の通信は、直接の物理的な接続を介して行うか、またはこの２つを接続する中間ネットワーク（intermediate network）を含むことができる。ＵＳＢホストコントローラ３３５は、ＵＳＢホストコントローラ３１０との通信を介してＵＳＢデバイス３０５と通信し、またＵＳＢデバイス３０５にアクセスする。この例では、クライアントコンピュータ３００は、サーバコンピュータ３１５に完全に依存して、ＵＳＢデバイス３０５用のアプリケーションプログラム３２０を介して、必要な機能をすべて提供する。
【発明の開示】
【発明が解決しようとする課題】
【００２０】
図１に示されているスタンドアロンのコンピュータの動作とは対照的に、図３のクライアントサーバの構成では、アプリケーションプログラム３２０の形態の機能は、すべてサーバコンピュータ３１５において提供される。すなわち、クライアントコンピュータ３００は、ＵＳＢデバイス３０５用のすべての機能に関してサーバコンピュータ３１５に依存している。この構成では、クライアントコンピュータ３００は、ＵＳＢデバイス３０５のいずれに対しても何の機能も提供しないか、あるいは提供することができない。
【課題を解決するための手段】
【００２１】
１つまたは複数のユニバーサルシリアルバス（ＵＳＢ）デバイスが、クライアントコンピュータにおいて接続される。特定のＵＳＢデバイスに対するアクセスおよび制御が、サーバコンピュータに提供され、特定のＵＳＢデバイスからサーバコンピュータへの個別の通信パスが、クライアントコンピュータにおいて提供される。サーバコンピュータからのコマンドはＵＳＢデバイスにおいて受信され、データは特定のＵＳＢデバイスからサーバコンピュータへ送信される。
【００２２】
サーバコンピュータは、クライアントコンピュータに接続されている特定のＵＳＢデバイスを認識し、特定のＵＳＢデバイス用の個別の通信パスが、サーバコンピュータにおいて提供され、サーバコンピュータは、ＵＳＢデバイスにコマンドを送信し、サーバコンピュータにおける通信パスを介してＵＳＢデバイスからデータを受信する。
【００２３】
添付の図を参照して、詳細な説明を行う。図では、参照番号の最も左側の（１つまたは複数の）数字によって、その参照番号が最初に登場した図を識別する。別々の図において同じ参照番号を使用して、同様のまたは同一のアイテムを表している。
【発明を実施するための最良の形態】
【００２４】
以降の開示は、特定のＵＳＢデバイスに対するアクセスおよび制御をアプリケーションサーバコンピュータへ導くまたは導き直すプロセスについて説明する。ＵＳＢデバイスは、アプリケーションサーバコンピュータと通信するクライアントコンピュータにおいて接続される。
【００２５】
（クライアント−サーバコンピュータシステム）
図４は、リモートクライアントアクセスシステム４００を示している。システム４００は、アプリケーションサーバコンピュータ４０５および１つまたは複数のクライアントコンピュータを含む。クライアントコンピュータにおいて接続されているユニバーサルシリアルバス（ＵＳＢ）デバイスに対するアクセスおよび制御は、アプリケーションサーバコンピュータ４０５へ導くか、または導き直すことができる。詳細には、クライアントコンピュータにおけるＵＳＢデバイスは、アプリケーションサーバコンピュータ４０５によって選択的にアクセスおよび制御される。システム４００は、本件特許出願人によって提供または規定されているＴｅｒｍｉｎａｌ  Ｓｅｒｖｉｃｅシステムとすることができ、複数のクライアントコンピュータは、１つまたは複数のＵＳＢデバイスに関する機能、とりわけアクセスおよび制御を提供するすべてまたは一部のアプリケーションプログラムに関して、アプリケーションサーバコンピュータ４０５に依存する。この例では、クライアントコンピュータ４１０が示されており、これは他のクライアントコンピュータの例である。
【００２６】
ネットワーク４１５は、アプリケーションサーバコンピュータ４０５とクライアントコンピュータ４１０を接続する。ネットワーク４１５は、有線ベースのテクノロジーと無線テクノロジーの双方を含むこのようなネットワーキングコンテキストをサポートする複数の方法で実装することができる。本発明の態様は、１つの特定のネットワークアーキテクチャまたはネットワークテクノロジーに限定されるものではない。システム４００は、モデムを介した直接のダイヤルアップ、企業ＬＡＮ（ローカルエリアネットワーク）、ＷＡＮ（ワイドエリアネットワーク）、およびインターネットを含むさまざまなアーキテクチャを代表するものである。ネットワーク４１５は、サーバコンピュータ４０５を１つまたは複数のクライアントコンピュータ（たとえば、クライアントコンピュータ４１０）に接続する。さらにサーバコンピュータ４０５とクライアントコンピュータの間におけるネットワーク４１５の接続は、ＴＣＰ／ＩＰ（transmission control protocol over Internet protocol）などのトランスポートプロトコルを実装することができる。
【００２７】
サーバコンピュータ４０５は、本件特許出願人によって提供されているＷｉｎｄｏｗｓ（登録商標）Ｓｅｒｖｅｒ  ２００３オペレーティングシステムなどのオペレーティングシステムと共に実装される。サーバコンピュータ４０５およびクライアントコンピュータ４１０は、相互にデータまたは情報をやり取りする（すなわち通信する）ために、本件特許出願人によって規定されているＲＤＰ（remote data protocol）などの通信プロトコルを実装することができる。このような通信プロトコル、とりわけＲＤＰの使用は、Ｔｅｒｍｉｎａｌ  Ｓｅｒｖｉｃｅｓシステムなどによって、リモートクライアントアクセスシステムのコンテキストにおいて実施することができる。
【００２８】
クライアントコンピュータ４１０は、汎用ＰＣ（パーソナルコンピュータ）、ラップトップＰＣ、タブレットＰＣなどとすることができ、本件特許出願人によるＷｉｎｄｏｗｓ（登録商標）ブランドのオペレーティングシステムなどのオペレーティングシステムを実装することができる。クライアントコンピュータ４１０はスタンドアロンのコンピュータであり、主にインターフェースによってアプリケーションサーバコンピュータ４０５に接続して、クライアントコンピュータ４１０にローカルに保存されていないファイルまたは他の情報（たとえば、アプリケーションサーバコンピュータ４０５に常駐しているアプリケーションプログラム）にアクセスする。
【００２９】
クライアントコンピュータ４１０は、ＵＳＢ１．０、１．１、および２．０などの既存の従来の、および将来のＵＳＢ標準をサポートする１つまたは複数のＵＳＢポートを備えている。これらのＵＳＢ標準によって、ポート（コンピュータインターフェース）を分割し、ＵＳＢデバイスを「デイジーチェーン式」に接続することができる。すなわち、クライアントコンピュータ４１０上の１つのポートを複数のポートへと「分割」することができ、これによって複数のデバイスが同一のポートを使用することができる。ＵＳＢポートは、クライアントコンピュータ４１０内の特定のＵＳＢハブに接続することができる（すなわち、ＵＳＢ１．１デバイスはＵＳＢ１．１ハブに接続され、ＵＳＢ２．０デバイスはＵＳＢ２．０ハブに接続される）。
【００３０】
ＵＳＢハブは、ＵＳＢ１．１ホストコントローラやＵＳＢ２．０ホストコントローラなどのホストコントローラに接続される。場合によっては、ホストコントローラは、複数のＵＳＢ標準をサポートすることができる（たとえば１つのＵＳＢホストコントローラが、ＵＳＢ１．１および２．０をサポートする）。ホストコントローラは、クライアントコンピュータ４１０のＰＣＩ（peripheral component interconnect）バスなどのバスに接続される。ＰＣＩバスは、クライアントコンピュータ４１０の中央処理装置（ＣＰＵ）すなわちプロセッサによってアクセスされる。クライアントコンピュータ４１０のハードウェアアーキテクチャについては、以降で図８を参照してさらに論じる。
【００３１】
クライアントコンピュータ４１０は、１つまたは複数のＵＳＢデバイス４２０（１）、４２０（２）、および４２０（Ｎ）に接続される。ＵＳＢデバイス４２０は、デジタルカメラ、ビデオカメラ、ハードディスク記憶装置、デジタルメディアレコーダ、プリンタ、およびスキャナを含むが、これらには限定されない。ＵＳＢデバイス４２０などのＵＳＢデバイスは、特定のデバイスクラスによって定義される。すなわちデジタルカメラ、ビデオカメラ、ハードディスク記憶装置、デジタルメディアレコーダ、プリンタ、スキャナなどに対して、個別のデバイスクラスがある。クライアントコンピュータ４１０およびＵＳＢデバイス４２０は、それぞれＵＳＢ接続４２５（１）、４２５（２）、および４２５（Ｎ）によって個別に接続される。ＵＳＢ接続４２５は、前述のようにクライアントコンピュータ４１０においてＵＳＢポートの１つまたは複数に接続される。
【００３２】
（クライアントおよびサーバのコンピュータアーキテクチャ）
図５は、ＵＳＢデバイス４２０のための機能がアプリケーションサーバコンピュータ４０５において提供される、アプリケーションサーバコンピュータ４０５およびクライアントコンピュータ４１０における最上位のアーキテクチャの例を示している。
【００３３】
クライアントコンピュータ４１０およびアプリケーションサーバコンピュータ４０５は、そのそれぞれのクライアントトランスポートドライバ５００およびサーバトランスポートドライバ５０５を介して相互に通信する。図１において前述したように、ネットワーク４１５などのネットワークは、サーバコンピュータ４０５とクライアントコンピュータ４１０を接続することができる。さらにクライアントコンピュータ４１０、サーバコンピュータ４０５、およびネットワーク（たとえばネットワーク４１５）は、システム４００などのより大規模なリモートクライアントアクセスシステムの一部とすることができる。
【００３４】
この例では、クライアントコンピュータ４１０は、アプリケーションサーバコンピュータ４０５に依存して、ＵＳＢデバイス４２０のための機能を提供する。アプリケーションサーバコンピュータ４０５に常駐するアプリケーションプログラム５１０は、１つまたは複数のＵＳＢデバイス４２０のための機能を個別に提供する。１つまたは複数のＵＳＢデバイス４２０のためのこのような機能は、さまざまなリモートクライアントアクセスシステムのシナリオをサポートして、アプリケーションサーバコンピュータ４０５によって提供することができる。  
【００３５】
１つの典型的なシナリオは、クライアントコンピュータ４１０が、ＵＳＢデバイスをサポートするための機能（すなわち、アプリケーションプログラム）をまったく有していない場合である。このシナリオは、クライアントコンピュータ４１０がシンクライアントであり、サーバコンピュータ４０５によって提供されるすべての機能に依存している場合が典型である。
【００３６】
別のシナリオは、クライアントコンピュータ４１０が、ＵＳＢデバイスをサポートする上で限られた機能または選択された数のアプリケーションプログラムしか有していない場合である。しかし、クライアントコンピュータ４１０に常駐している限られた数のアプリケーションプログラムは、１つまたは複数のＵＳＢデバイス４２０を個別にサポートするアプリケーションプログラムを含まない。サーバコンピュータ４０５は、１つまたは複数のＵＳＢデバイス４２０によって必要とされる機能を提供する特定のアプリケーションプログラム５１０を含む。１つまたは複数のＵＳＢデバイス４２０の制御は、クライアントコンピュータ４１０のアーキテクチャのＰＮＰ（plug and play）機能を介して決定することができる。具体的には、ＵＳＢバスドライバ５１５は、１つまたは複数のＵＳＢデバイス４２０を認識し、その１つまたは複数のＵＳＢデバイス４２０の存在を他のコンポーネント（たとえば、クライアントコンピュータのＣＰＵ）、ドライバ、またはソフトウェアモジュールに伝える。ＵＳＢホストコントローラ５２０は、ＵＳＢバスドライバとインターフェースで接続され、ＵＳＢデバイス４２０への物理的なまたは論理的な接続を提供する。他のコンポーネント、ドライバ、またはソフトウェアモジュールによって、その１つまたは複数のＵＳＢデバイス４２０をサポートするための許容可能なアプリケーションプログラムがクライアントコンピュータ４１０に常駐していないと判断された場合、その１つまたは複数のＵＳＢデバイス４２０に対する制御は、アプリケーションサーバコンピュータ４０５へ導かれる。
【００３７】
他の典型的なシナリオでは、クライアントコンピュータ４１０は、１つまたは複数のＵＳＢデバイス４２０をサポートする常駐のアプリケーションプログラムを含むことができるが、複数の理由の１つから、クライアントコンピュータ４１０におけるユーザは、１つまたは複数のＵＳＢデバイス４２０のサポートおよび機能をアプリケーションサーバコンピュータ４０５へ導くことを決定することができる。このユーザによって開始されるオペレーションは、１つまたは複数のＵＳＢデバイス４２０に対するアクセスおよび制御をアプリケーションサーバコンピュータ４０５に提供する。
【００３８】
アプリケーションプログラム５１０は、ＵＳＢファンクションデバイスドライバ５２５と通信する。ＵＳＢファンクションデバイスドライバ５２５は、特定のＵＳＢデバイスのデバイスクラスに固有のものである。ＵＳＢファンクションデバイスドライバ５２５は、ＵＳＢデバイスのクラスを表す特定のＦＤＯ（functional device object）を作成する。この特定のＦＤＯは、ＵＳＢデバイスのクラスを表すデータオブジェクトであり、アプリケーションプログラム５１０へのインターフェースを公開または提供する。ＵＳＢファンクションデバイスドライバ５２５上に常駐するデータオブジェクトとして、ＦＤＯ、またはそのＦＤＯによって公開されるインターフェースは、アプリケーションプログラム５１０によって個別に認識される。
【００３９】
ＵＳＢファンクションデバイスドライバ５２５は、プロキシＵＳＢバスドライバ５３０と通信する。プロキシＵＳＢバスドライバ５３０はデバイスに依存せず、ローカルＵＳＢデバイスと、ＵＳＢデバイス４２０などのリモートＵＳＢデバイスとを含む複数のＵＳＢデバイスをサポートする。ＵＳＢファンクションデバイスドライバ５２５は、ＰＤＯ（physical device object）を作成する。このＰＤＯは、ＵＳＢデバイス４２０の１つを表し、そのＵＳＢデバイス４２０の１つに固有のデータオブジェクトである。ＰＤＯデータオブジェクトは、ＵＳＢデバイス４２０の１つを表し、その特定のＵＳＢデバイスに固有のものである。一意または固有のＰＤＯによって、サーバコンピュータ４０５は、プロキシＵＳＢバスドライバ５３０を使用して、特定のＵＳＢデバイスを区別することができる。さらに、それぞれの中間インターフェース５００および５０５を介して、プロキシＵＳＢバスドライバ５３０は、リモートクライアントアクセスドライバ５３５と通信する。リモートクライアントアクセスドライバ５３５は、サーバコンピュータ４０５から発生するコマンド（すなわち、アプリケーションプログラム４１０からのコマンド）を渡すという特定の機能を実行する。プロキシＵＳＢバスドライバ５３０は、ＵＳＢバスドライバ５１５と論理的に通信する。
【００４０】
アプリケーションプログラム５１０との通信は、ＩＲＰ（I/O request packets）から、とりわけＩＯＣＴＬ（I/O control）コードと呼ばれる特定のグループのＩＲＰから構成することができる。ＩＲＰは、アプリケーションプログラム５１０から発生する通信データであり、データをアプリケーションプログラム５１０へ転送（送信）するよう求める要求など、１つまたは複数のＵＳＢデバイス４２０にアクションを実行するよう求める要求を含む。ＩＯＣＴＬコードは、ＵＳＢファンクションデバイスドライバ５２５と通信するために、アプリケーションプログラム５１０によって使用することができる。ＩＯＣＴＬコードは、特定のアクションを実行するために１つまたは複数のＵＳＢデバイス４２０に対してアプリケーションプログラム５１０によって伝達される特定のコマンドまたは命令である。ＵＳＢファンクションデバイスドライバ５２５は、アプリケーションプログラム５１０からＩＯＣＴＬコードを受信し、そのＩＯＣＴＬコードをＩＲＰに変換し、そのＩＲＰは、１つまたは複数のＵＳＢデバイス４２０へ渡される。同様に、１つまたは複数のＵＳＢデバイス４２０から送信されるＩＲＰは、ＩＯＣＴＬに変換され、このＩＯＣＴＬは、アプリケーションプログラム５１０によって読み取ること、または使用することができる。ＩＯＣＴＬは、ＵＳＢファンクションデバイスドライバ５２５などのデバイスまたはクラスに固有のドライバによってアプリケーションプログラム５１０からのコマンドおよび／またはアクション（すなわち要求）を伝達するために、個別に使用される。ＵＳＢファンクションデバイスドライバ５２５は、コマンドまたはアクションを定義するＩＯＣＴＬを、特にＩＯＣＴＬパラメータを検証する。
【００４１】
図６は、機能が、アプリケーションサーバコンピュータ４０５またはクライアントコンピュータ４１０のいずれかによって提供される、アプリケーションサーバコンピュータ４０５およびクライアントコンピュータ４１０における最上位のアーキテクチャの例を示している。１つまたは複数のＵＳＢデバイス４２０は、クライアントコンピュータ４１０またはアプリケーションサーバコンピュータ４０５のいずれかによってアクセスおよび制御することができる。具体的には、アプリケーションサーバコンピュータ４０５またはクライアントコンピュータ４１０のいずれかにおけるアプリケーションプログラムが、特定のＵＳＢデバイス４２０に機能を提供する。
【００４２】
リモートクライアントアクセスシステムの実装形態では、クライアントコンピュータ４１０は主に、キーボードやマウスなどの入力デバイスを介してユーザによって入力されたデータなどの、入力および出力（Ｉ／Ｏ）を提供するために使用される。この例では、Ｉ／Ｏデータは、ＵＳＢデバイス４２０によって提供される。クライアントコンピュータ４１０に常駐しているアプリケーションプログラム６０５を使用して、１つまたは複数のＵＳＢデバイス４２０のための機能を提供することができ、これによって特に、Ｉ／Ｏデータを受信して、１つまたは複数のＵＳＢデバイス４２０へ送信することができる。具体的には、１つまたは複数のＵＳＢデバイス４２０によって提供されたデータまたは情報は、アプリケーションプログラム６０５を使用してクライアントコンピュータ４１０によってアクセスされる。アプリケーションプログラム６０５は、データまたは情報（すなわち制御）を特定のＵＳＢデバイス４２０へ提供することもできる。場合によっては、アプリケーションプログラム６０５などのアプリケーションプログラムがクライアントコンピュータ４１０に常駐しているか否かを問わず、１つまたは複数のＵＳＢデバイス４２０に対するアクセスおよび制御を、サーバコンピュータ４０５に常駐しているアプリケーションプログラムへ導くか、または導き直すことが望ましい場合がある。アプリケーションプログラム６０５の例としては、ワードプロセッシングプログラム、マルチメディアプログラム、およびデータ管理プログラムなどがある。
【００４３】
アプリケーションプログラム６０５は、ＵＳＢファンクションデバイスドライバ６１０と通信する。ＵＳＢファンクションデバイスドライバ６１０は、ＵＳＢデバイス４２０の１つがグループ化されているデバイスクラスに固有のものである。前述のように、特定のＵＳＢファンクションデバイスドライバは、特定のＵＳＢデバイスをサポートする。たとえばＵＳＢファンクションデバイスドライバは、デジタルカメラ、プリンタ、ディスクストレージユニット、スキャナなどに固有のものである。ＵＳＢファンクションデバイスドライバ６１０は、１つまたは複数のＵＳＢデバイス４２０を表すＦＤＯを作成し、同じクラスにグループ化されているＵＳＢデバイスは、同じＦＤＯによって表される。この特定のＦＤＯは、１つまたは複数のＵＳＢデバイス４２０がグループ化されているデバイスのクラスを表すデータオブジェクトであり、アプリケーションプログラム６０５へのインターフェースを公開または提供する。ＵＳＢデバイス４２０がデジタルカメラである場合、作成されるＦＤＯ（データオブジェクト）は、デジタルカメラ全般を表すものであり、特定のデジタルカメラを表すものではない。ＵＳＢファンクションデバイスドライバ６１０上に常駐するデータオブジェクトとして、ＦＤＯと、そのＦＤＯによって公開されるインターフェースは、アプリケーションプログラム６０５、ＵＳＢバスドライバ５１５、およびＵＳＢファンクションデバイスドライバ６１０と通信する他のドライバ、モジュール、またはコンポーネントによって認識される。
【００４４】
ＵＳＢファンクションデバイスドライバ６１０は、「ハブドライバ」としても知られているＵＳＢバスドライバ５１５と通信する。ＵＳＢバスドライバ５１５はデバイスに依存せず、ＵＳＢデバイス４２０などの複数のＵＳＢデバイスをサポートする。ＵＳＢバスドライバ５１５は、ＵＳＢデバイス４２０のうち特定のＵＳＢデバイスを表すデータオブジェクトであるＰＤＯを作成する。ＰＤＯデータオブジェクトの表示は、ＵＳＢデバイス４２０のうち特定のＵＳＢデバイスに固有のものである。たとえば、ＵＳＢデバイス４２０が、接続されている複数のデジタルカメラの１つである場合、特定のＵＳＢデバイスを識別するＵＳＢハブドライバ５１５によって特定のＰＤＯが作成される。このＰＤＯは、ＵＳＢホストコントローラ５２０へ個別に伝達される。さらに、ＵＳＢバスドライバ５１５によって作成されたＰＤＯを使用して、ＵＳＢハブドライバ５１５と通信する他のドライバ、モジュール、またはコンポーネントに対して特定のＵＳＢデバイスを識別することができる。
【００４５】
ＵＳＢホストコントローラ５２０は、１つまたは複数のＵＳＢデバイス４２０への物理的なインターフェースとすることができ、ＵＳＢバスドライバ５１５と通信する。ＵＳＢホストコントローラ５２０は、ＵＳＢポートに接続することができ、これらのＵＳＢポートは、ＵＳＢデバイス４２０へ接続される。１つまたは複数のＵＳＢデバイス４２０がＵＳＢホストコントローラ５２０へ接続されるたびに、ＵＳＢホストコントローラ５２０は、接続された１つまたは複数のＵＳＢデバイス４２０に常駐している識別子または識別データをＵＳＢバスドライバ５１５へ渡す。ＵＳＢバスドライバ５１５は、ＵＳＢデバイス４２０を識別するＰＤＯを作成し、このＰＤＯは、他のドライバ、モジュール、またはコンポーネントに対して提示される。ＵＳＢデバイス４２０のうち特定のＵＳＢデバイスを識別することによって、クライアントコンピュータ４１０は（すなわち、クライアントコンピュータ４１０のＣＰＵすなわちプロセッサは）、その特定のＵＳＢデバイスにアクセスして使用する上で必要なソフトウェアをインストールする。これはＰＮＰ機能をサポートし、これによってユーザは、特定のＵＳＢデバイスをサポートするための適切なソフトウェアをインストールする必要がなくなる。
【００４６】
アプリケーションプログラム６０５との通信は、ＩＲＰから、とりわけＩＯＣＴＬコードから構成することができる。ＩＲＰは、アプリケーションプログラム６０５から発生する通信データであり、データをアプリケーションプログラム６０５へ転送（送信）するよう求める要求など、１つまたは複数のＵＳＢデバイス４２０にアクションを実行するよう求める要求を含む。ＩＯＣＴＬコードは、ＵＳＢファンクションデバイスドライバ６１０と通信するために、アプリケーションプログラム６０５によって使用することができる。ＩＯＣＴＬコードは、特定のアクションを実行するためにアプリケーションプログラム６０５によって１つまたは複数のＵＳＢデバイス４２０に対して伝達される、特定のコマンドまたは命令である。ＵＳＢファンクションデバイスドライバ６１０は、アプリケーションプログラム６０５からＩＯＣＴＬコードを受信し、そのＩＯＣＴＬコードをＩＲＰに変換し、そのＩＲＰは、１つまたは複数のＵＳＢデバイス４２０へ渡される。同様に、１つまたは複数のＵＳＢデバイス４２０から送信されるＩＲＰは、ＩＯＣＴＬに変換され、このＩＯＣＴＬは、アプリケーションプログラム６０５によって読み取ること、または使用することができる。ＩＯＣＴＬは、ＵＳＢファンクションデバイスドライバ６１０などのデバイスまたはクラスに固有のドライバによってアプリケーションプログラム６０５からのコマンドおよび／またはアクション（すなわち要求）を伝達するために、個別に使用される。ＵＳＢファンクションデバイスドライバ６１０は、コマンドまたはアクションを定義するＩＯＣＴＬを、特にＩＯＣＴＬパラメータを検証する。
【００４７】
クライアントトランスポートドライバ５００が、クライアントコンピュータ４１０において提供され、これによって、アプリケーションサーバコンピュータ４０５とのリモートクライアントアクセス通信が可能となる。通信は、ＲＤＰ通信プロトコルなどの通信プロトコルを実装することができ、具体的には、送信されるデータをコード化して、クライアントトランスポートドライバ５００によって受信されたコマンドを復号するための通信プロトコルを実装することができる。さらにクライアントトランスポートドライバ５００は、インターネットなどのネットワークを介してデータを通信する際のＴＣＰ／ＩＰなどのトランスポーテーションプロトコルを実装することができる。
【００４８】
場合によっては、１つまたは複数のＵＳＢデバイス４２０をサポートする機能が、サーバコンピュータ４０５によって提供される。このような機能がアプリケーションサーバコンピュータ４０５によって提供される場合、リモートクライアントアクセスドライバ５３５がロードされる。リモートクライアントアクセスドライバ５３５は、アプリケーションサーバコンピュータ４０５から発生するコマンドを渡すことを含め、ＵＳＢファンクションデバイスドライバ６１０によって提供される機能を実行する。リモートクライアントアクセスドライバ５３５を介して、ＵＳＢデバイス４２０への通信は、アプリケーションプログラム６０５およびＵＳＢファンクションデバイスドライバ６１０から導き直される。コマンドは、ＩＲＰの形態とすることができ、ＵＳＢバスドライバ５１５へ渡すことができる。さらにリモートクライアントアクセスドライバ５３５は、ＵＳＢバスドライバ５１５によって作成された特定のＰＤＯを認識する。リモートクライアントアクセスドライバ５３５は、１つまたは複数のＵＳＢデバイス４２０を表す特定のＰＤＯと、その特定のＰＤＯによって公開されるインターフェースとを明確に認識する。
【００４９】
アプリケーションサーバコンピュータ４０５は、クライアントコンピュータ４１０などの１つまたは複数のクライアントコンピュータに特定の機能を提供する専用のアプリケーションソフトウェアを提供する。この例では、アプリケーションサーバコンピュータ４０５は、１つまたは複数のＵＳＢデバイス４２０のための機能をサポートまたは提供するアプリケーションプログラム５１０を含む。アプリケーションプログラム５１０の例としては、ワードプロセッシングプログラム、マルチメディアプログラム、およびデータ管理プログラムなどがある。
【００５０】
アプリケーションプログラム５１０は、ＵＳＢファンクションデバイスドライバ５２５と通信する。ＵＳＢファンクションデバイスドライバ５２５は、特定のＵＳＢデバイス４２０がグループ化されているデバイスクラスに固有のものである。ＵＳＢファンクションデバイスドライバ５２５は、ＵＳＢデバイスの特定のクラスを表す特定のＦＤＯを作成する。前述のように、この特定のＦＤＯは、デバイスの１つのクラスを表すデータオブジェクトであり、アプリケーションプログラム５１０へのインターフェースを公開または提供する。ＵＳＢファンクションデバイスドライバ５２５によって提供されるデータオブジェクトとして、ＦＤＯと、そのＦＤＯによって公開されるインターフェースは、アプリケーションプログラム５１０によって個別に認識される。
【００５１】
ＵＳＢファンクションデバイスドライバ５２５は、プロキシＵＳＢバスドライバ５３０と通信する。プロキシＵＳＢバスドライバ５３０はデバイスに依存せず、ＵＳＢデバイス４２０などの複数のローカルおよびリモートのＵＳＢデバイスをサポートする。プロキシＵＳＢバスドライバ５３０はＰＤＯを作成する。このＰＤＯは、特定のＵＳＢデバイス４２０を表し、その特定のＵＳＢデバイス４２０に固有のデータオブジェクトである。一意または固有のＰＤＯによって、サーバコンピュータ４０５は、プロキシＵＳＢバスドライバ５３０を使用して、特定のＵＳＢデバイスを区別することができる。
【００５２】
アプリケーションプログラム５１０との通信は、ＩＲＰおよびＩＯＣＴＬコードから構成することができる。ＩＯＣＴＬコードは、ＵＳＢファンクションデバイスドライバ５２５と通信するために、アプリケーションプログラム５１０によって個別に使用することができる。ＩＯＣＴＬコードは、アプリケーションプログラム５１０によって伝達される特定のコマンドまたは命令である。ＵＳＢファンクションデバイスドライバ５２５は、アプリケーションプログラム５１０からＩＯＣＴＬコードを受信し、そのＩＯＣＴＬコードをＩＲＰに変換し、そのＩＲＰは、プロキシＵＳＢバスドライバ５３０へ渡される。プロキシＵＳＢバスドライバ５３０によって受信されるＩＲＰは、サーバトランスポートドライバ５０５によって受信される。サーバトランスポートドライバ５０５はまた、プロキシＵＳＢバスドライバ５３０にＩＲＰを渡すことができ、このようなＩＲＰは、ＵＳＢデバイス４２０などのリモートＵＳＢデバイスからのデータおよび要求を表す。
【００５３】
図７は、ＵＳＢデバイスに対するアクセスおよび制御をアプリケーションサーバコンピュータ４０５などのリモートコンピュータへ導く、または導き直すプロセス７００を示している。プロセス７００は、論理的なフローグラフ内のブロックの集合として示されており、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組合せにおいて実施できる一連のオペレーションを表している。ソフトウェアのコンテキストでは、それらのブロックは、１つまたは複数のプロセッサによって実行されると、列挙されているオペレーションを実行する、コンピュータ命令を表す。プロセス７００については、図４、５、および６に記載のアプリケーションサーバコンピュータ４０５およびクライアントコンピュータ４１０を参照して説明する。ここでは、アプリケーションサーバコンピュータ４０５およびクライアントコンピュータ４１０が、特定のプロセスを実行するための手段を提供する。フローチャートとして説明するが、これらのプロセスは同時に発生できることを意図している。
【００５４】
ブロック７０５において、ＵＳＢデバイスはクライアントコンピュータに接続される。このデバイスは、クライアントコンピュータ上のＵＳＢポートへ物理的に接続することができる。ＵＳＢポートは、ＵＳＢコントローラと物理的に接続される。ＵＳＢバスドライバは、ＵＳＢコントローラと論理的に接続される。ＵＳＢバスドライバは、特定のＵＳＢデバイスを認識および識別し、そのＵＳＢデバイスがグループ化されているクラスをさらに識別する。この認識プロセスは、この例ではＵＳＢバスドライバによって個別に実行され、この認識プロセスを介して、ＵＳＢデバイスのＰＮＰ（plug and play）が提供される。すなわち、ＵＳＢデバイスが認識され、該当する場合は、適切なソフトウェアがユーザの介入を伴わずにインストールされる。ＰＤＯ（physical device object）と呼ばれるデータオブジェクトと、そのＵＳＢデバイスに固有のインターフェースとが、ＵＳＢバスドライバによって個別に提供される。このＰＤＯおよびインターフェースは、ＵＳＢバスドライバに接続されているコンポーネント、モジュール、およびドライバに伝達される。
【００５５】
場合によっては、接続されているＵＳＢデバイスに対する機能、またはアクセスおよび制御をクライアントコンピュータが提供すること（すなわち、ブロック７１０の「いいえ」の分岐に進むこと）が望ましい。ブロック７１５では、クライアントコンピュータにおけるアプリケーションプログラムが、そのＵＳＢデバイスのための機能を提供する場合、特定のＵＳＢファンクションデバイスドライバがインストールまたはロードされる。ＵＳＢファンクションデバイスドライバは、そのＵＳＢデバイスのデバイスクラスに固有のものである。ＵＳＢファンクションデバイスドライバは、ＦＤＯ（functional device object）と、接続されているＵＳＢデバイスに固有のインターフェースとを個別に提供する。このＦＤＯおよびインターフェースは、ＵＳＢファンクションドライバに接続されているコンポーネント、モジュール、およびドライバに伝達される。アプリケーションプログラムからＵＳＢデバイスへの通信パスが提供される。
【００５６】
ブロック７２０では、ＵＳＢデバイスとアプリケーションプログラムの間で通信が実行される。アプリケーションプログラムは、データを求める要求について記述するＩＯＣＴＬ（I/O control）コードを送信することができる。アプリケーションプログラムは、ＩＯＣＴＬコードを受信することもできる。ＩＯＣＴＬコードは、アプリケーションプログラムから送信された後でＩＲＰ（I/O request packets）に変換することができる。さらに、アプリケーションプログラムによって受信されたＩＯＣＴＬコードは、ＵＳＢデバイスからのＩＲＰとして開始することができる。
【００５７】
他の特定の場合には、接続されているＵＳＢデバイスに対する機能、またはアクセスおよび制御をアプリケーションサーバコンピュータが提供すること（すなわち、ブロック７１０の「はい」の分岐に進むこと）が望ましい。典型的なケースとしては、クライアントコンピュータが、適切な機能をＵＳＢデバイスに提供する上で限られたアプリケーションプログラムしか有していない状況や、そうしたアプリケーションプログラムをまったく有していない状況などがある。他のケースでは、アプリケーションプログラムがクライアントコンピュータに常駐して、ＵＳＢデバイスのための機能を提供することができるにもかかわらず、クライアントコンピュータにおけるユーザが、ＵＳＢデバイスのための機能をアプリケーションサーバコンピュータから提供されたいと希望する場合がある。
【００５８】
ブロック７２５では、リモートクライアントアクセスドライバが、クライアントコンピュータにおいてインストールまたはロードされる。アプリケーションサーバコンピュータからの通信、特にサーバコンピュータにおけるアプリケーションプログラムは、リモートクライアントアクセスドライバを介して導かれ、基本的にアプリケーションサーバコンピュータ（すなわち、アプリケーションサーバコンピュータのアプリケーションプログラム）からＵＳＢデバイスへの通信パスを提供する。クライアントトランスポートドライバは、クライアントコンピュータにおいて提供することができ、これによってアプリケーションサーバコンピュータとの通信が可能となる。アプリケーションサーバコンピュータは、クライアントコンピュータのクライアントトランスポートドライバへの通信を受信および送信するサーバトランスポートドライバを含むことができる。
【００５９】
ブロック７３０では、アプリケーションサーバコンピュータにおいてＵＳＢデバイスが認識される。詳細には、アプリケーションサーバコンピュータに実装されているプロキシＵＳＢバスドライバが、ＵＳＢデバイスと、そのＵＳＢデバイスの特定のクラスとを認識する。
【００６０】
ブロック７３５では、リモートクライアントアクセスバスドライバが、ＵＳＢデバイスのクラスに固有のＵＳＢファンクションデバイスドライバをロードまたはインストールする。ＵＳＢファンクションデバイスドライバは、そのＵＳＢデバイスが属するデバイスクラスまたはグループに固有のものである。
【００６１】
ブロック７４０では、ＵＳＢデバイスと、アプリケーションサーバコンピュータに常駐しているアプリケーションプログラムの間で通信が実行される。アプリケーションプログラムは、データを求める要求について記述するＩＯＣＴＬを送信することができ、これらのＩＯＣＴＬはＩＲＰに変換され、それらのＩＲＰはＵＳＢデバイスによって受信される。ＵＳＢファンクションデバイスドライバによって、ＦＤＯ（デバイスに固有のデータオブジェクト）を作成し、提供することができる。このＦＤＯは、そのアプリケーションプログラムにとってのＵＳＢデバイスを表す。
【００６２】
（典型的なコンピュータ）
図８は、この主題の態様を実施するための環境として、たとえばクライアントコンピュータ４１０またはアプリケーションサーバコンピュータ４０５として適切な典型的なコンピューティングデバイスまたはコンピュータ８００を示している。コンピュータ８００のコンポーネントは、処理装置８２０と、システムメモリ８３０と、システムメモリ８３０を含むさまざまなシステムコンポーネントを処理装置８２０に結合するシステムバス８２１とを含むことができるが、これらには限定されない。システムバス８２１は、メモリバスまたはメモリコントローラと、ペリフェラルバスと、さまざまなバスアーキテクチャのいずれかを使用するローカルバスとを含む複数のタイプのバス構造のいずれにすることもできる。たとえばこのようなアーキテクチャは、ＩＳＡ（Industry Standard Architecture）バス、ＭＣＡ（Micro Channel Architecture）バス、ＥＩＳＡ（Enhanced ISA）バス、ＶＥＳＡ（Video Electronics Standards Association）ローカルバス、およびメザニンバスとしても知られているＰＣＩ（Peripheral Component Interconnect）バスを含むが、これらには限定されない。
【００６３】
典型的なコンピュータ８００は通常、さまざまなコンピュータ読取り可能記憶媒体を含む。コンピュータ読取り可能記憶媒体は、コンピュータ８００によってアクセスできる利用可能な任意のメディアとすることができ、揮発性および不揮発性記憶媒体、ならびに取外し可能および取外し不可能な記憶媒体の双方を含む。たとえばコンピューティングデバイス読取り可能記憶媒体は、コンピュータ記憶媒体および通信媒体を含むことができるが、これらには限定されない。コンピュータ記憶媒体は、コンピュータ読取り可能命令、データ構造、プログラムモジュール、他のデータなどの情報を記憶するための任意の方法または技術において実装される揮発性および不揮発性記憶媒体、ならびに取外し可能および取外し不可能な記憶媒体を含む。コンピュータ記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶装置、あるいは希望の情報を保存するために使用可能で、コンピューティングデバイス８００によってアクセス可能な他の任意の媒体を含むが、これらには限定されない。通信媒体は通常、搬送波や他の伝送メカニズムなどの被変調データ信号内のコンピュータ読取り可能命令、データ構造、プログラムモジュール、または他のデータを具体化し、任意の情報伝達媒体を含む。「被変調データ信号」という用語は、情報をその信号内でコード化するような方法で設定または変更されたその特性のうちの１つまたは複数を有する信号を意味する。たとえば通信媒体は、有線ネットワークや直接有線接続などの有線媒体と、音響、無線周波数（ＲＦ）、赤外線、他の無線媒体などの無線媒体とを含むが、これらには限定されない。また上記のいずれの組合せも、コンピューティングデバイス読取り可能記憶媒体の範囲内に含まれるものである。
【００６４】
システムメモリ８３０はコンピューティングデバイス記憶媒体を読み取り専用メモリ（ＲＯＭ）８３１およびランダムアクセスメモリ（ＲＡＭ）８３２などの揮発性メモリおよび／または不揮発性メモリの形態で含む。基本入出力システム８３３（ＢＩＯＳ）は、起動中などにコンピュータ８００内の要素間における情報伝達を補助する基本ルーチンを含み、通常はＲＯＭ８３１内に格納されている。ＲＡＭ８３２は通常、処理装置８２０がすぐにアクセスできるか、および／または処理装置８２０によってその時点で操作されているデータモジュールおよび／またはプログラムモジュールを含む。図８は、例としてオペレーティングシステム８３４、アプリケーションプログラム８３５、その他のプログラムモジュール８３６、およびプログラムデータ８３７を示しているが、これらには限定されない。
【００６５】
また典型的なコンピュータ８００は、他の取外し可能／取外し不可能、揮発性／不揮発性コンピュータ記憶媒体を含むこともできる。図８は、例示のみを目的として、取外し不可能な不揮発性の磁気記憶媒体との間で読み取りや書き込みを行うハードディスクドライブ８４１と、取外し可能な不揮発性の磁気ディスク８５２との間で読み取りや書き込みを行う磁気ディスクドライブ８５１と、ＣＤ−ＲＯＭや他の光メディアなどの取外し可能な不揮発性の光ディスク８５６との間で読み取りや書き込みを行う光ディスクドライブ８５５とを示している。典型的な動作環境において使用できる他の取外し可能／取外し不可能、揮発性／不揮発性コンピューティングデバイス記憶装置としては、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどがあるが、これらには限定されない。ハードディスクドライブ８４１は通常、インターフェース８４０などの取外し不可能なメモリインターフェースを介してシステムバス８２１に接続されており、磁気ディスクドライブ８５１および光ディスクドライブ８５５は通常、インターフェース８５０などの取外し可能なメモリインターフェースによってシステムバス８２１に接続されている。
【００６６】
図８に示した上述のドライブおよびそれらに関連するコンピューティングデバイス記憶装置は、コンピュータ８００用のコンピュータ読取り可能命令、データ構造、プログラムモジュール、および他のデータの記憶を提供する。たとえば図８において、ハードディスクドライブ８４１は、オペレーティングシステム８４４、アプリケーションプログラム８４５、その他のプログラムモジュール８４６、およびプログラムデータ８４７を記憶するものとして図示されている。これらのコンポーネントは、オペレーティングシステム８３４、アプリケーションプログラム８３５、その他のプログラムモジュール８３６、およびプログラムデータ８３７と同じであっても、または異なっていてもよいという点に留意されたい。ここでは、オペレーティングシステム８４４、アプリケーションプログラム８４５、その他のプログラムモジュール８４６、およびプログラムデータ８４７が最低限異なるコピーであることを示すために、異なる番号を割り当てている。ユーザは、キーボード８４８、および通常はマウス、トラックボール、またはタッチパッドと呼ばれるポインティングデバイス８６１などの入力デバイスを介して典型的なコンピュータ８００にコマンドおよび情報を入力することができる。他の入力デバイス（図示せず）は、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信用アンテナ、スキャナなどを含むことができる。これらの入力デバイスおよび他の入力デバイスは、システムバスに結合されているユーザ入力インターフェース８６０を介して処理装置８２０に接続される場合が多いが、パラレルポート、ゲームポート、あるいはとりわけＵＳＢポートなどの他のインターフェースおよびバス構造によって接続することもできる。またモニタ８６２や他のタイプの表示装置も、ビデオインターフェース８９０などのインターフェースを介してシステムバス８２１に接続される。コンピューティングデバイスは、モニタ８６２に加えて、スピーカ８９７およびプリンタ８９６などの他の周辺出力デバイスを含むこともでき、これらは周辺出力インターフェース８９５を介して接続することができる。
【００６７】
典型的なコンピュータ８００は、リモートコンピューティングデバイス８８０などの１つまたは複数のリモートコンピューティングデバイスへの論理接続を使用して、ネットワーク化された環境内で動作することができる。リモートコンピューティングデバイス８８０は、パーソナルコンピューティングデバイス、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の一般的なネットワークノードとすることができ、図８にはメモリ記憶装置８８１しか示されていないが、通常はコンピュータ８００に関連する上述の要素の多くまたはすべてを含む。図８に示されている論理接続は、ローカルエリアネットワーク（ＬＡＮ）８７１およびワイドエリアネットワーク（ＷＡＮ）８７３を含むが、他のネットワークを含むこともできる。こうしたネットワーキング環境は、オフィス、企業規模のコンピューティングデバイスネットワーク、イントラネット、およびインターネットにおいてよく見受けられる。
【００６８】
ＬＡＮネットワーキング環境において使用する場合、典型的なコンピュータ８００は、ネットワークインターフェースまたはアダプタ８８４を介してＬＡＮ８７１に接続される。ＷＡＮネットワーキング環境において使用する場合、典型的なコンピュータ８００は通常、モデム８７２、またはインターネットなどのＷＡＮ８７３上で通信を確立するための他の手段を含む。モデム８７２は内蔵型または外付け型とすることができ、ユーザ入力インターフェース８６０または他の適切なメカニズムを介してシステムバス８２１に接続することができる。ネットワーク化された環境では、典型的なコンピュータ８００に関連して示されているプログラムモジュール、またはその一部をリモートメモリ記憶装置内に格納することができる。図８は、例としてリモートアプリケーションプログラム８８５をメモリデバイス８８１上に常駐するものとして示しているが、この形態には限定されない。示されているネットワーク接続は代表的なものであり、コンピューティングデバイス間に通信リンクを確立する他の手段も使用できることが理解できるであろう。
【００６９】
（結論）
クライアントコンピュータに接続されているＵＳＢデバイスに対するアクセスおよび制御をサーバコンピュータへ選択的に導くまたは導き直すプロセスについて上述した。本発明について、構造的な特徴および／または方法論的な行為に特有の言葉で説明したが、添付の特許請求の範囲において定義される本発明は、説明した特定の特徴または行為に必ずしも限定されるものではないことを理解されたい。むしろ特定の特徴および行為は、特許請求された本発明を実施する典型的な形態として開示されている。
【図面の簡単な説明】
【００７０】
【図１】１台のコンピュータにおいて実装される従来技術のＵＳＢアーキテクチャを示すブロック図である。
【図２】複数のアプリケーションプログラムおよび複数のＵＳＢデバイスと共に１台のコンピュータにおいて実装される従来技術のＵＳＢアーキテクチャを示すブロック図である。
【図３】１つまたは複数のＵＳＢデバイスのリモートアクセスの従来技術によるアーキテクチャを示すブロック図である。
【図４】１つまたは複数のＵＳＢデバイスがクライアントコンピュータまたはアプリケーションサーバコンピュータのいずれかによって制御されるリモートクライアントアクセスシステムを示す図である。
【図５】ＵＳＢデバイスのための機能がアプリケーションサーバコンピュータにおいて提供される、クライアントコンピュータおよびアプリケーションサーバコンピュータを示すブロック図である。
【図６】ＵＳＢデバイスにアクセスして制御するクライアントコンピュータおよびアプリケーションサーバコンピュータを示すブロック図である。
【図７】クライアントコンピュータのＵＳＢデバイスに対する制御を、クライアントコンピュータまたはアプリケーションサーバコンピュータへ導くまたは導き直すプロセスを示す流れ図である。
【図８】クライアントコンピュータまたはアプリケーションサーバコンピュータの実装形態を示すブロック図である。
【図１】
2006195981.tif 000003
【図２】
2006195981.tif 000004
【図３】
2006195981.tif 000005
【図４】
2006195981.tif 000006
【図５】
2006195981.tif 000007
【図６】
2006195981.tif 000008
【図７】
2006195981.tif 000009
【図８】
2006195981.tif 000010