(57)【特許請求の範囲】
【請求項１】
デバイスをサポートする方法であって、
サーバコンピュータにおいて、デバイスがクライアントコンピュータに接続されることを識別するデバイスの通知を受け取るステップであって、前記デバイスは前記クライアントコンピュータにある実デバイスドライバと関連付けられる、受け取るステップと、
前記デバイスに関する情報を受け取るステップと、
前記情報に基づき前記サーバコンピュータにおいて仮想デバイスドライバを作成するステップと、
前記サーバコンピュータのアプリケーションにおいてイベント通知を生成されるデバイスを検出した後、入出力制御（ＩＯＣＴＬ）コードを用いる入出力要求パケット（ＩＲＰ）命令を、前記サーバコンピュータのアプリケーションから上位レベルのフィルタドライバを介し前記サーバコンピュータの仮想デバイスドライバを介して前記クライアントコンピュータ上の実デバイスドライバに、前記上位レベルのフィルタドライバによりリダイレクトするステップであって、前記上位レベルのフィルタドライバは、前記サーバコンピュータのアプリケーションとは分かれた、リダイレクトするステップと
を備えることを特徴とする方法。
【請求項２】
デバイスドライバが前記クライアントコンピュータでインストールされることを特徴とする請求項１に記載の方法。
【請求項３】
前記デバイスは、オーディオレコーダ、デジタルカメラ、ドキュメントスキャナ、外部ディスクドライブ、またはメディアリーダのうちの少なくとも１つであることを特徴とする請求項１に記載の方法。
【請求項４】
クライアントコンピュータにおけるデバイスの制御をサーバコンピュータにリダイレクトする方法であって、
前記クライアントコンピュータに常駐するリモートアクセスアプリケーション経由で前記クライアントコンピュータと前記サーバコンピュータとの間の通信を確立するステップと、
前記クライアントコンピュータへの前記デバイスの接続に応答して、前記サーバコンピュータにおいて仮想デバイスドライバを作成するステップであって、前記仮想デバイスドライバは前記デバイスに特有であり、前記デバイスは前記クライアントコンピュータに常駐する実デバイスドライバと関連付けられている、作成するステップと、
ＩＯＣＴＬコードを用いる入出力要求パケット（ＩＲＰ）命令を、前記サーバコンピュータに常駐するアプリケーションから前記サーバコンピュータに常駐する上位レベルのフィルタドライバを介して前記実デバイスドライバに、リダイレクトするステップと
を備えることを特徴とする方法。
【請求項５】
前記仮想デバイスドライバを作成するステップは、前記クライアントコンピュータから前記サーバコンピュータにより受信される前記デバイスを説明する情報に基づき、前記仮想デバイスドライバを作成するステップを含むことを特徴とする請求項４に記載の方法。
【請求項６】
前記デバイスがプラグを抜かれるかまたは前記クライアントコンピュータと前記サーバコンピュータとの間の接続が切断される場合、前記仮想デバイスドライバを前記サーバコンピュータからアンロードするステップをさらに含むことを特徴とする請求項４に記載の方法。
【請求項７】
サーバコンピュータと、
前記サーバコンピュータによりサポートされるクライアントコンピュータと、
前記クライアントコンピュータに接続されるデバイスと、
前記デバイスに特有であり、前記クライアントコンピュータにインストールされる実デバイスドライバと、
前記サーバコンピュータ内の前記デバイスをサポートする仮想デバイスドライバと、
前記サーバコンピュータ内のアプリケーションとは分かれた上位レベルのフィルタドライバであって、入出力制御（ＩＯＣＴＬ）コードを用いる入出力要求パケット（ＩＲＰ）命令を検出する前記上位レベルのフィルタドライバは、ＩＲＰ命令の検出後、前記ＩＲＰ命令を、前記サーバコンピュータ内のアプリケーションから、前記上位レベルのフィルタドライバを介し前記仮想デバイスドライバを介して、前記実デバイスドライバに、リダイレクトする、上位レベルのフィルタドライバと
を備えることを特徴とするリモートアクセスシステム。
【請求項８】
前記サーバコンピュータは、前記デバイスを識別するリダイレクタを含むことを特徴とする請求項７に記載のシステム。
【請求項９】
前記リダイレクタは、前記サーバコンピュータとクライアントコンピュータとの間の通信を行うリダイレクション・ライブラリを含むことを特徴とする請求項８に記載のシステム。
【請求項１０】
前記クライアントコンピュータは、前記サーバコンピュータとクライアントコンピュータとの間の通信を行うリモート・サービス・アプリケーションを含むことを特徴とする請求項８に記載のシステム。
【請求項１１】
前記デバイスはプラグ・アンド・プレイ（ＰＮＰ）デバイスであることを特徴とする請求項８に記載のシステム。
【請求項１２】
前記実デバイスドライバは、前記デバイスが前記クライアントコンピュータに接続されるときに、他のドライバと共にインストールされることを特徴とする請求項８に記載のシステム。
【請求項１３】
前記命令は、前記クライアントコンピュータのドライバスタックを介して通信されることを特徴とする請求項８に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リモートシステムのためのプラグ・アンド・プレイデバイスのリダイレクションに関する。
【背景技術】
【０００２】
本出願は、２００５年９月９日に出願された米国仮出願第６０／７１６，０２５号に対して合衆国法典第３５巻第１１９条（ｅ）に基づき優先権を主張し、この仮出願の開示は本明細書に組み込まれる。
【０００３】
Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎにより提供されるターミナルサービス（商標）システムなどのリモート・クライアント・アクセスのプラットフォームおよびシステムにより、コンピュータ（ユーザ）が、アプリケーションサーバまたはサーバ群（サーバコンピュータ）によりホストされこのサーバ（群）に常駐するアプリケーションプログラムをリモートでアクセスすることが可能となる。リモート・クライアント・アクセスシステムで、クライアントコンピュータは、典型的にはサーバコンピュータを頼りにして、常駐のアプリケーションプログラムを介してコンピューティング機能を提供する。アプリケーションプログラムの例には、ワード処理、マルチメディア、およびデータ管理のプログラムが含まれる。
【０００４】
サーバコンピュータは、ホストコンピュータまたはターミナルサーバと呼ばれてよい。ある場合には、複数のサーバコンピュータが存在してよい。クライアントコンピュータは、リモートターミナル、リモートクライアント、またはシンクライアントと呼ばれてよい。クライアントコンピュータは、主にユーザインターフェース、すなわちユーザとデバイスの入出力との対話に用いられるが、多くの場合、ローカルデバイスまたはデバイス群がクライアントコンピュータに取り付けられ、サーバコンピュータによりアクセスされる。
【０００５】
クライアントコンピュータ上のソフトウェアは、典型的には汎用であるか、あるいはアプリケーション特有ではなく、概してオペレーティングシステムと、リモート・クライアント・アクセス環境をサポートするためのソフトウェアを含む汎用ソフトウェアとで構成される。サーバコンピュータにおけるソフトウェアは典型的には、マルチメディア、画像化、データベースアクセス、ワード処理および他の種類のアプリケーションなどの特定の機能を提供する特定の目的のためのアプリケーションソフトウェアを含む。クライアントコンピュータとサーバコンピュータの間を通信されるデータは主に、グラフィックデータ、キーストローク、マウスの移動等などのユーザインターフェースに関する命令およびデータを含み、そしてクライアントコンピュータにて設置されるハードウェアデバイスに関する命令およびデータを含む。
【０００６】
サーバコンピュータおよびクライアントコンピュータは典型的には、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎにより規定されたリモート・デスクトップ・プロトコル（ＲＤＰ：remote desktop protocol）などの所定の通信プロトコルを用いて情報を互いに通信するかまたは渡す。インターネットプロトコルを介する通信制御プロトコル（ＴＣＰ／ＩＰ）などのより低レベルのネットワークプロトコルも必要とされる。
【０００７】
リモート・クライアント・アクセスシステムの利点は、多くの機能および計算がサーバコンピュータで行われるため、クライアントコンピュータが相対的に低電力であることが可能であるということである。サーバコンピュータは典型的なデスクトップコンピュータより高価であることが多いが、１つのアプリケーションサーバコンピュータは、多くのより廉価なクライアントコンピュータにサービスを行うことが可能である。
【０００８】
いくつかのリモート・クライアント・アクセスシステムにおける他の利点は、データがサーバコンピュータの物理位置に常駐でき、相対的に遅い通信リンクを介してクライアントコンピュータに転送される必要がなく、その位置でアプリケーションプログラムにより動作することができ、ユーザインターフェースのみがクライアントの物理位置で実装される。
【０００９】
クライアントコンピュータは、ユニバーサルシリアルバス（ＵＳＢ）またはファイアワイア（ＩＥＥＥ１３９４）ポートなどのポートを有し、これらのポートに１つまたは複数のローカルデバイスまたは周辺ハードウェアデバイスが取り付けられる。このようなデバイスは、ＵＳＢキーボードの場合のようにユーザインターフェースに関係してよい。多くの場合、サーバコンピュータで実行するアプリケーションは、このようなローカルのクライアントデバイスにアクセスし対話する必要がある。ローカルデバイスまたは周辺デバイスの例は、オーディオレコーダ、デジタルカメラ、ドキュメントスキャナ、外部ディスクドライブ、およびメディアリーダ等を含む。このようなデバイスは、デバイスがポートに一旦接続されるとそれらのデバイスは使用可能になるため、プラグ・アンド・プレイデバイスまたはＰＮＰデバイスと呼ばれることがある。
【００１０】
典型的なＷｉｎｄｏｗｓ（登録商標）ベースのデスクトップ環境で、ローカルアプリケーションが、ドライバスタックと呼ばれる一連のドライバを介してローカルデバイスと通信する。デバイスのＰＮＰ機能を容易にするために特にドライバスタックを用いる。異なる責任が、組織化および再利用の目的でドライバスタックの要素の間で分配されてよい。例えば、いくつかのドライバは、すべての、または特定の一般的な部類のローカルデバイスに対して汎用であり、多くの異なるデバイスと通信するために使用または再利用できる。他のドライバは、特定のデバイスに特有の機能を実装し、これら特定のデバイスに付随するように特に設計されることが多い。典型的には、このような問題は、ケースバイケースベースで対処される。例えば、ローカルデバイスをサポートするために、対応するソフトウェアドライバが、ローカルマシンまたはクライアントコンピュータにインストールされる。異なった複数のデバイスでは、異なったハードウェアデバイスをサポートするために、異なった正しいソフトウェアドライバを提供することに関する問題が起きる。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
ある場合には、ユーザが、特定のデバイスが接続されているものと同じクライアントコンピュータを用いていない可能性があるが、ユーザは、そのデバイスへのアクセスまたは使用を望む。これは、ユーザが別のクライアントコンピュータから「リモートで」仕事をしているときの場合である可能性がある。さらにサーバコンピュータが、２以上のクライアントコンピュータまたはユーザに対してローカルデバイスへのアクセスを行うことが望ましい可能性がある。したがって、リモート・クライアント・アクセスシステムで、特定のリモート・クライアント・コンピュータにおけるデバイスがサーバコンピュータにローカルに接続されているように見え、その結果他のリモート・クライアント・コンピュータがデバイスにアクセスできることが望ましい。
【課題を解決するための手段】
【００１２】
デバイスがクライアントコンピュータにおいてローカルに接続および認識され、ドライバスタックの一部としてのデバイスドライバがクライアントコンピュータでインストールされ、クライアントコンピュータで接続された各デバイスをサポートする。デバイスの接続は、仮想ドライバをサーバコンピュータで作成するための情報と共にサーバコンピュータに通信される。仮想ドライバは、サーバコンピュータに常駐するアプリケーションにより認識される。次にサーバコンピュータからの命令は、仮想ドライバを介してデバイスに渡され、そしてデバイスドライバに戻って通信されてよく、サーバコンピュータよるデバイスの制御を可能とする。
【００１３】
この概略は、詳細な説明で以下にさらに説明される、簡素化した形での概念の一選択を紹介するために行われる。この概略は、特許請求の範囲の主題のキーとなる特徴または本質的な特徴を明確にする意図はなく、特許請求の範囲の主題範囲を決定する助けとして用いられる意図もない。
【００１４】
詳細な説明が添付の図を参照して説明される。図では、参照番号の一番左の数字（群）が、その参照番号が最初に現れる図を示す。異なる図での同一の参照番号の使用は、類似のまたは同一の項目を示す。
【発明を実施するための最良の形態】
【００１５】
図１は、リモート・クライアント・アクセスシステムまたはリモートシステム１００を示す。リモートシステム１００は、サーバコンピュータ１０２および１つまたは複数のクライアントコンピュータ１０４を含む。特に、サーバコンピュータ１０２は、クライアントコンピュータにローカルに接続されたデバイスを手助けし、またはサポートするために、プラグ・アンド・プレイ（ＰＮＰ）デバイスまたはＰＮＰリダイレクタ、および仮想デバイスドライバを含む。
【００１６】
この例では、単一のクライアントコンピュータ１０４が示されているが、他の実装では、複数のクライアントコンピュータが含まれてよい。クライアントコンピュータ１０４にて接続されたローカルデバイス１０８のアクセスおよび制御は、サーバコンピュータ１０２に向けられるかまたはリダイレクトされてよく、その結果、ローカルデバイス１０８がサーバコンピュータ１０２により選択的にアクセスおよび制御されることが可能となる。リモートシステム１００は、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎにより提供または規定されるターミナルサービス（商標）システムであってよく、このシステムでは、複数のクライアントコンピュータ（例えば、クライアントコンピュータ１０４）は、機能を提供するすべてのまたは特定のアプリケーションプログラムをサーバコンピュータ１０２に頼っている。
【００１７】
ネットワーク１１０が、サーバコンピュータ１０２とクライアントコンピュータ１０４を接続する。ネットワーク１１０は、いくつかの方法で実装され、有線ベースの技術および無線技術の両方を含むネットワーキングコンテクストをサポートしてよい。本発明の態様は、１つの特定のネットワークアーキテクチャまたはネットワーク技術に限定されない。リモートシステム１００は、モデムを介する直接ダイアルアップ、企業ＬＡＮ（ローカルエリアネットワーク）、ＷＡＮ（広域ネットワーク）およびインターネットを含む異なるアーキテクチャを表す。ネットワーク１１０は、サーバコンピュータ１０２を１つまたは複数のクライアントコンピュータ（例えば、クライアントコンピュータ１０４）に接続する。さらに、サーバコンピュータ１０２とクライアントコンピュータ１０４の間のネットワーク１０８の接続は、インターネットプロトコルを介する伝送制御プロトコル（ＴＣＰ／ＩＰ）などのトランスポートプロトコルを実装してよい。
【００１８】
サーバコンピュータ１０２は、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎにより提供されるＷｉｎｄｏｗｓ（登録商標）Ｓｅｒｖｅｒ２００３オペレーティングシステムなどのオペレーティングシステムで実装される。サーバコンピュータ１０２およびクライアントコンピュータ１０４は、データまたは情報を互いに渡す（すなわち、通信する）ために、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎにより規定されたリモートデータプロトコル（ＲＤＰ：ｒｅｍｏｔｅ  ｄａｔａ  ｐｒｏｔｏｃｏｌ）などの通信プロトコルを実装してよい。このような通信プロトコルの使用、および特にＲＤＰの使用は、ターミナルサービス（商標）システムなどのリモート・クライアント・アクセスシステムの関連で実装されてよい。
【００１９】
さらに、サーバコンピュータ１０２およびクライアントコンピュータ１０４への通信は、ＲＤＰを介して通信される入出力要求パケット（ＩＲＰ：Ｉ／Ｏ  ｒｅｑｕｅｓｔ  ｐａｃｋｅｔ）、および特に入出力制御（ＩＯＣＴＬ：Ｉ／Ｏ  ｃｏｎｔｒｏｌ）コードと呼ばれるＩＲＰの特別なグループを使用してよい。特に、サーバコンピュータ１０２に常駐するアプリケーションプログラムは、ローカルデバイス１０８と通信するためにＩＲＰを実装してよい。ＩＲＰは、１つまたは複数のローカルデバイス１０８への要求を含むアプリケーションプログラムから発生する通信データであってよい。ローカルデバイスは、ＩＯＣＴＬコード内の物理デバイスオブジェクト（ＰＤＯ：ｐｈｙｓｉｃａｌ  ｄｅｖｉｃｅ  ｏｂｊｅｃｔ）としてアプリケーションプログラムにより識別されてよく、ＩＯＣＴＬコードでは特定のデバイス１０８のそれぞれが、特定のＰＤＯにより識別される。以下に説明される実デバイスドライバが、ＰＤＯをローカルデバイス１０８に対して作成してよい。
【００２０】
クライアントコンピュータ１０４は、汎用ＰＣ（パーソナルコンピュータ）、ラップトップＰＣ、タブレットＰＣ等であってよく、Ｍｉｃｒｏｓｏｆｔ  ＣｏｒｐｏｒａｔｉｏｎのＷｉｎｄｏｗｓ（登録商標）ブランドのオペレーティングシステムなどのオペレーティングシステムを実装してよい。クライアントコンピュータ１０４は、クライアントコンピュータ１０４でローカルに格納されていないファイルまたは他の情報（例えば、アプリケーションサーバコンピュータ１０２に常駐するアプリケーションプログラム）をアクセスするために主にサーバコンピュータ１０２とインターフェースするスタンドアロンコンピュータである。
【００２１】
クライアントコンピュータ１０４は、ローカルデバイス１０８などのＰＮＰデバイスを接続する１つまたは複数のデバイスポートを備えている。デバイスポートは、既存の（すなわち、レガシーな）および将来の規格をサポートするＵＳＢ１．０、１．１および２．０、ならびにファイアワイア（ＩＥＥＥ１３９４）ポートを含む。特にデバイスポートは、クライアントコンピュータ１０４へのローカルデバイス１０８の接続を可能にする。ローカルデバイス１０８は、デジタルカメラ、ビデオカメラ、ハードディスク記憶デバイス、デジタルメディアレコーダ、プリンタ、スキャナ等を含むがこれに限定されない。サーバコンピュータ１０２は、ＰＮＰリダイレクタおよび仮想デバイスドライバ１０６を含む。特に、さらに以下で詳細に説明されるように、ＰＮＰリダイレクタは、１つまたは複数のローカルデバイス１０８の接続に関して検知するか、またはクライアントコンピュータ１０４により通知されるように構成されている。仮想デバイスドライバは、サーバコンピュータ１０２で作成され、クライアントコンピュータ１０４で検出された実際のデバイスドライバの機能を実行する。
【００２２】
図２は、サーバコンピュータ１０２およびクライアントコンピュータ１０４の例示のドライバスタックを示す。これらのドライバスタックは、ローカルデバイス１０８の命令および制御をサーバコンピュータ１０２に常駐するアプリケーション２０２へ向けるために使用できる構成例である。特に、特定のローカルデバイス１０８に特有であるリモートサービスドライバまたは仮想ドライバ２０４が、コンピュータ１０２のドライバスタックの一部として作成されるか、または提供される。
【００２３】
サーバコンピュータ１０２は、処理装置またはプロセッサ２０６およびストレージシステムまたはメモリ２０８を含む。プロセッサ２０６は、メモリ２０８およびサーバコンピュータ１０２のドライバスタックの要素などの、サーバコンピュータ１０２の要素を制御またはアクセスするように構成されている。この例は、サーバコンピュータ１０２のドライバスタックの要素から独立したメモリ２０８を図示しているが、他の実装では、さらに以下に説明されるように、サーバコンピュータ１０２のドライバスタックの要素がメモリ２０８内に含まれることが考えられる。
【００２４】
サーバコンピュータ１０２のドライバスタックは、後続の要素または層を含むと考えてよく、これらの層ではアプリケーション２０２は、ドライバスタックの最上位レベルの要素または層と見なされる。アプリケーション２０２は、様々なマルチメディア、画像化、データベースアクセス、ワード処理、および他の種類のアプリケーションを含む。アプリケーション２０２は、アプリケーションサービス２１０の一部であるかまたはアプリケーションサービス２１０に接続されてよい。アプリケーションサービス２１０は、互換層２１２を含むか、または互換層２１２に接続される。互換層２１２は、Ｗｉｎｄｏｗ（登録商標）ポータビリティデバイス（ＷＰＤ：Ｗｉｎｄｏｗ  ｐｏｒｔａｂｉｌｉｔｙ  ｄｅｖｉｃｅ）フォーマットなどのフォーマットを実装する特定のローカルデバイスをサポートするときに実装されてよい。
【００２５】
アプリケーションサービス２１０または互換層２１２は、上位レベルのフィルタドライバまたはリダイレクタ２１４と通信する。リダイレクタ２１４は、ＯＳの命令をアプリケーションサービス２１０または互換層２１２に反映またはリダイレクトする、オペレーティングシステム（ＯＳ）ベースの要素、またはカーネルベースの要素（すなわち、ドライバ）であってよい。さらに、この実装では、リダイレクタ２１４を用いて仮想ドライバ２０４に通信する。
【００２６】
仮想ドライバ２０４は、ローカルデバイス１０８を特にサポートし、クライアントコンピュータ１０４のドライバスタックと通信するために作成される。仮想ドライバ２０４は、ホストプロセス２１６内に含まれてよいが、この例では、仮想ドライバ２０４は、サーバコンピュータ１０２のドライバスタックの一部としてホストプロセス２１６から独立しホストプロセス２１６と通信する。ホストプロセス２１６は、ＰＮＰリダイレクタ２１８と通信する。
【００２７】
ＰＮＰリダイレクタ２１８は、仮想ドライバ２０４が最初に作成されたときに、特にクライアントコンピュータ１０４からの通信を行う。特にＰＮＰリダイレクタ２１８は、クライアントコンピュータ１０４に接続され、クライアントコンピュータ１０４からリダイレクトされるべきデバイス（すなわち、ローカルデバイス１０８）を列挙または識別する。ＰＮＰリダイレクタ２１８は、サーバコンピュータ１０２とクライアントコンピュータ１０４の間のＩＲＰベースの通信を行うリダイレクション・ライブラリを含むか、またはリダイレクション・ライブラリにアクセスできる。ＩＲＰベースの通信では、仮想チャネルが用いられてよい。ＰＮＰリダイレクタ２１８は、デバイスを表す特定のＰＤＯを作成してよい。特にＰＤＯは、通信がサーバコンピュータ１０２とクライアントコンピュータ１０４の間でＩＲＰを渡すことを必要とするとき作成される。デバイスがクライアントコンピュータ１０４から切り離されるときにはいつでも、ＰＮＰリダイレクタはその特定のＰＤＯを破棄してよい。
【００２８】
アプリケーション２０２とローカルデバイス１０８の間の通信では、仮想ドライバ２０４は、リモート・サービス・クライアント・アプリケーション２２０と直接通信する。リモート・サービス・クライアント・アプリケーション２２０は、クライアントコンピュータ１０４などのクライアントコンピュータでのターミナルサービス（商標）により実装されたプロセスなど、リモートプロセスであってよい。リモート・サービス・クライアント・アプリケーション２２０を主に用いてクライアントコンピュータ１０４とサーバコンピュータ１０２の間の通信を行ってよい。
【００２９】
サーバコンピュータ１０２と同様に、クライアントコンピュータ１０４は、処理装置またはプロセッサ２２２およびストレージシステムまたはメモリ２２４を含む。プロセッサ２２２は、メモリ２２４およびクライアントコンピュータ１０４のドライバスタックの要素などの、クライアントコンピュータ１０４の要素を制御またはアクセスするように構成されている。この例は、クライアントコンピュータ１０４のドライバスタックの要素から独立したメモリ２２４を図示しているが、他の実装では、さらに以下に説明されるように、クライアントコンピュータ１０４のドライバスタックの要素がメモリ２２４内に含まれることが考えられる。
【００３０】
リモート・サービス・クライアント・アプリケーション２２０は、クライアントコンピュータ１０４のドライバスタックの最上位の要素または層と見なされてよい。ドライバスタック内のリモート・サービス・クライアント・アプリケーション２２２の下に、ホストプロセス２２６がある。ホストプロセス２２６は、ローカルデバイス１０８を容易にするために、ドライバと通信し、ドライバを作成または提供する、クライアントコンピュータ１０４内の常駐アプリケーションであってよい。この例では、ローカルデバイス１０６に特有の実デバイスドライバ２２８が、ホストプロセス２２６により作成または提供される。
【００３１】
ＰＮＰデバイスをサポートする典型的なドライバスタックでは、ローカルデバイス１０８は、排他的に実デバイスドライバ２２８などのデバイスドライバに頼って、ドライバスタックに沿ってデータを通信するかまたは渡している。この実装で、実デバイスドライバ２２８はまた、ローカルデバイス１０８に対して通信を行うが、仮想ドライバ２０４は実デバイスドライバ２２８として働き、サーバコンピュータ１０２および特にアプリケーション２０２がローカルデバイス１０８を制御またはアクセスできる能力を提供する。
【００３２】
上位レベルのフィルタドライバまたはリダイレクタ２３０は、クライアントコンピュータ１０４のドライバスタック内に含まれる。リダイレクタ２３０は、仮想ドライバ２０４から（リモートクライアントアプリケーション２２０を通って）ローカルデバイス１０８への通信を可能とする。クライアントコンピュータ１０４のドライバスタックは、バスドライバ２３４と通信するＯＳレベルまたはカーネルドライバ２３２を含む。バスドライバ２３４は、ホストコントローラドライバ２３６と通信する。ローカルデバイス１０８、および他のＰＮＰデバイスは、ホストコントローラ２３８に接続されるポートを通してクライアントコンピュータ１０４に接続する。次にホストコントローラ２３８は、ホストコントローラドライバ２３６を介しクライアントコンピュータ１０４のドライバスタックを通って通信する。
【００３３】
ローカルデバイス１０８などの新しいデバイスが、クライアントコンピュータ１０４にプラグインまたは接続されるときにはいつも、実デバイスドライバ２２８などのデバイスドライバがインストールされる。実デバイスドライバ２２８は、新たに発見されたデバイスまたはローカルデバイス１０８に束縛される。ドライバスタック内のアプリケーションが、今ではデバイス（すなわち、ローカルデバイス１０８）をアクセスまたは使用できる。このようなアプリケーションはホストプロセス２２６を含んでよい。実デバイスドライバ２２８が作成されると、仮想ドライバ２０４もまた作成される。仮想ドライバ２０４の作成により、アプリケーション２０２がローカルデバイス１０８を認識できるようになる。
【００３４】
サーバコンピュータ１０２からクライアントマシン１０４への、アプリケーション２０２と実デバイスドライバ２０２との間の通信は、リダイレクトされ、その結果仮想ドライバ２０４は、実デバイスドライバ２２８の代理として働く。一旦仮想ドライバ２０４とアプリケーション２０２の間の関係が確立されると、仮想ドライバ２０４とアプリケーション２０２との間の通信が実デバイスドライバ２２８に転送される。実デバイスドライバ２２８に転送された通信はローカルデバイス１０８が予想したやり方で働くことを可能とする。つまり、クライアントコンピュータ１０４のデバイススタックが作成されると、ホストプロセス２２６への命令または通信など、特定の命令または通信が実デバイスドライバ２２８を通ることを予想できる。
【００３５】
ローカルデバイス１０８がサーバコンピュータ１０２に、特にアプリケーション２０２にリダイレクトされると、後続のイベントシーケンスが行われてよい。ローカルデバイス１０８がクライアントコンピュータ１０４にプラグされ、デバイスドライバ（すなわち、カーネルドライバ２３２、リダイレクタ２３０、および実デバイスドライバ２２８）がロードされ、通知がアプリケーション２０２に送信される。クライアントコンピュータ１０４は、ローカルデバイス１０８を認識し、ＰＮＰリダイレクタ２１８に情報を送信し、その情報を用いて仮想デバイスドライバ２０４を作成する。仮想ドライバ２０４は作成され、通信リンクがリモート・サービス・クライアント・アプリケーション２２０と確立される。アプリケーション２０２は、新たに発見されたローカルデバイス１０８および作成されインストールされた実デバイスドライブ２２８を通知される。次にアプリケーション２２０は入出力を仮想ドライバ２０４に送信し、仮想ドライバ２０４はそれをリモート・サービス・クライアント・アプリケーションに転送し、リモート・サービス・クライアント・アプリケーションはそれを実デバイスドライバ２２８に転送する。クライアントハードウェア（例えば、デバイス１０８）がプラグを抜かれるか、またはクライアントコンピュータ１０４とサーバコンピュータ１０２との間の接続が切断される場合、仮想ドライバ２０４は、サーバからアンロードされ、すべての通信が停止する。
【００３６】
図３は、仮想ドライバをサーバコンピュータ上に作成する処理３００を示す。処理３００は、クライアントコンピュータおよびサーバコンピュータによってプロトコルとして実装されてよい。処理３００は論理流れ図のブロックの集合として図示され、これらのブロックは、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組合せで実装可能な一連の操作を表す。ソフトウェアとの関連では、ブロックは、１つまたは複数のプロセッサにより実行されるときに、説明した操作を実行するコンピュータ命令を表す。流れ図として説明されているが、特定のブロックが同時にまたは異なる順序で行われてよいと考えられる。処理３００は、例えば、図１のシステム１００、および／または図２で説明したコンピュータ１０２および１０４により実装されてよいが、処理３００は他のアーキテクチャにより実装されてよい。
【００３７】
ブロック３０２では、新しいハードウェアデバイス３０２が発見される。このハードウェアデバイスは、クライアントコンピュータ１０４に接続されるローカルデバイス１０８などのクライアントコンピュータに接続されるプラグ・アンド・プレイ（ＰＮＰ）デバイスであってよい。特定のデバイスは、クライアントコンピュータ１０４に常駐するホストプロセス２２６などのアプリケーションにより発見または識別可能である。さらに、ローカルデバイス１０８を発見することはＰＮＰ処理の一部であってよい。
【００３８】
ブロック３０４では、クライアントコンピュータ１０４は、検出されたデバイスをサポートするために必要なドライバまたはドライバスタックをロードまたはインストールする。インストールは、クライアントコンピュータ１０４に常駐するホストプロセス２２６または他のアプリケーションにより実行されてよい。さらに、デバイスがクライアントコンピュータ１０４に接続されるとき、インストールは典型的なＰＮＰデバイス操作の一部であってよい。ドライバはデバイスドライバ（例えば、実デバイスドライバ２２８）、上位レベルのフィルタドライバ（例えば、リダイレクタ２３０）、カーネルドライバ（例えば、カーネルドライバ２３２）およびバスドライバ（例えば、バスドライバ２３２）を含んでよい。
【００３９】
ブロック３０６では、デバイスに関係する情報が識別される。この識別は、サーバコンピュータとクライアントコンピュータとの間の通信を行うアプリケーションにより実行されてよい。リモート・サービス・クライアント・アプリケーション２２０はこのような通信アプリケーションの例である。通信は、ＲＤＰを介して通信される入出力要求パケット（ＩＲＰ）、および特に入出力制御（ＩＯＣＴＬ）コードと呼ばれるＩＲＰの特別なグループなどのパケットを用いてよい。デバイスはまた、ＩＯＣＴＬコード内の物理デバイスオブジェクト（ＰＤＯ）として識別されてよい。
【００４０】
ブロック３０８では、デバイス関連の情報は、サーバコンピュータ１０２に通信される。この情報は、サーバコンピュータ１０２とクライアントコンピュータ１０４との間の通信を行うアプリケーション（例えば、リモート・サービス・クライアント・アプリケーション２２０）により渡されてよい。通信された情報を特に用いて仮想ドライバ（例えば、仮想ドライバ２０４）をサーバコンピュータ１０２で作成し、この仮想ドライバは発見されたデバイス（例えば、ローカルデバイス１０８）に特有である。仮想ドライバは、アプリケーション２０２などのアプリケーションまたはアプリケーションサービス２１０などのサービスにより作成されてよい。
【００４１】
図４は、クライアントコンピュータデバイスをサーバコンピュータにリダイレクトする処理４００を示す。処理４００は、クライアントコンピュータおよびサーバコンピュータによってプロトコルとして実装されてよい。処理４００は論理流れ図のブロックの集合として図示され、これらのブロックは、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組合せで実装可能な一連の操作を表す。ソフトウェアとの関連では、ブロックは、１つまたは複数のプロセッサにより実行されるときに、説明した操作を実行するコンピュータ命令を表す。流れ図として説明されているが、特定のブロックが同時にまたは異なる順序で行われてよいと考えられる。処理４００は、例えば、図１のシステム１００、および／または図２で説明されたコンピュータ１０２および１０４により実装されてよいが、処理４００は他のアーキテクチャにより実装されてよい。
【００４２】
ブロック４０２で、仮想ドライバ（例えば、仮想ドライバ２０４）がサーバコンピュータ１０４で作成される。仮想ドライバ２０４は、クライアントコンピュータ（例えば、クライアントコンピュータ１０４）からサーバコンピュータ１０２により受信された情報であり、接続されたデバイス（例えば、ローカルデバイス１０８）を説明する情報に基づき作成される。仮想ドライバ２０４は、サーバコンピュータでアプリケーション（例えば、アプリケーション２０２）により認識され、新しいハードウェアまたは新しいデバイスが取り付けられ利用可能になったことをアプリケーションに指示する。
【００４３】
ブロック４０４で、通信がサーバコンピュータ１０２とクライアントコンピュータ１０４の間で確立される。通信は仮想チャネルなどの通信リンクを通してよい。特に、サーバコンピュータ１０２からクライアントコンピュータ１０４への通信は、クライアントコンピュータに常駐のアプリケーションを使用してよく、アプリケーションは入出力命令を仮想ドライバと通信する。このようなアプリケーションの例がリモート・サービス・クライアント・アプリケーション２２０である。
【００４４】
ブロック４０６で、アプリケーション２０２およびリモート・サービス・クライアント・アプリケーション２２０は、新しく作成されたデバイスドライバ（例えば、実デバイスドライバ２２８および仮想デバイスドライバ２０４）を認識することにより、接続されたデバイス１０８が利用可能であることの通知を受ける。
【００４５】
ブロック４０８で、アプリケーショ２０２は、仮想デバイスドライバ２０４を介して入出力命令を通信し、仮想デバイスドライバ２０４はリモート・サービス・クライアント・アプリケーション２２０などのアプリケーションに命令を渡す。命令は、ローカルデバイス１０８がクライアントコンピュータ１０４のローカルドライバスタックを介して予想どおりに通信することを可能にする実デバイスドライバ２２８に渡される。
【００４６】
＜結論＞
上述の方法およびシステムは、仮想デバイスドライバを用いてリモート・クライアント・コンピュータデバイスをサーバコンピュータでサポートすることを説明している。本発明は構造的特徴および／または方法論的働きに特有の言葉で説明されているが、添付の請求項の範囲で規定された本発明は、必ずしも説明された特有な特徴または働きに限定されないことを理解されたい。むしろ、特有な特徴および働きは、請求の範囲に記載されている本発明を実装する例示の形として開示される。
【図面の簡単な説明】
【００４７】
【図１】リモート・クライアント・コンピュータで接続されるプラグ・アンド・プレイデバイスをサポートする仮想ドライバを有するサーバコンピュータを含むリモート・クライアント・アクセスシステムを示す図である。
【図２】サーバコンピュータおよびクライアントコンピュータを示し、サーバコンピュータおよびクライアントコンピュータのドライバスタックを示す図である。
【図３】サーバコンピュータ上の仮想ドライバを作成する処理を示す流れ図である。
【図４】クライアントコンピュータのデバイスをサーバコンピュータにリダイレクトする処理を示す流れ図である。
【図１】
0005133886.tif 000002
【図２】
0005133886.tif 000003
【図３】
0005133886.tif 000004
【図４】
0005133886.tif 000005