(57)【要約】クライアントシステムと通信するデバイスの上のデータを、サーバがホストするセッションからアクセス可能なデータと同期化するためのメカニズムが開示される。同期化は、クライアントシステムおよびサーバシステムの間で通信を送信するためのプレゼンテーションレベルプロトコルを使用して、ネットワーク接続を介して発生する。クライアントシステムと通信するデバイスは、ユーザセッションの中にマップされる。ひとたびデバイスが、サーバによってホストされるセッションの中にマップされると、クライアントシステムと通信するデバイスの上のデータは、ユーザセッションからアクセス可能なデータと同期化される。
2008516309.tif 000002
【特許請求の範囲】
【請求項１】
クライアントシステムと通信するデバイスの上のデータを同期化するための方法であって、
（ａ）ＵＳＢ接続を介してクライアントシステムと通信するデバイスを、サーバによってホストされるユーザセッションの中にマップするステップであって、該ユーザセッションがアプリケーションを実行するインスタンスを含み、該サーバがプレゼンテーションレベルプロトコルを使用して該クライアントシステムと通信する、ステップと、
（ｂ）該アプリケーションインスタンスの実行の結果として、該クライアントシステムと通信する該デバイスの上のデータの収集を、該ユーザセッションからアクセス可能なデータの収集と同期化するステップと
を包含する、方法。
【請求項２】
前記クライアントシステムと通信する前記デバイスがＷＩ−ＦＩ通信プロトコルを使用する、請求項１に記載の方法。
【請求項３】
前記クライアントシステムと通信する前記デバイスがＩＲシリアル通信プロトコルを使用する、請求項１に記載の方法。
【請求項４】
前記クライアントシステムと通信する前記デバイスがＢｌｕｅｔｏｏｔｈ（登録商標）シリアル通信プロトコルを使用する、請求項１に記載の方法。
【請求項５】
前記クライアントシステムと通信する前記デバイスが、ワイヤレスＵＳＢ／超広帯域ワイヤレス通信プロトコルを使用して通信する、請求項１に記載の方法。
【請求項６】
前記アプリケーションインスタンスがプロセス間通信のためにソケット通信を使用し、前記ステップ（ｂ）が、
（ｂ−１）前記セッションの中でソケット呼出しをフッキングするステップ
をさらに包含する、請求項１に記載の方法。
【請求項７】
前記フッキングが仮想ループバックアドレスフッキングである、請求項６に記載の方法。
【請求項８】
前記フッキングが仮想ＩＰアドレスフッキングである、請求項６に記載の方法。
【請求項９】
前記アプリケーションがプロセス間通信のためにソケット通信を使用し、前記ステップ（ｂ）が、
（ｂ−１）サーバコンソールの上でソケット呼出しをフッキングするステップ
をさらに包含する、請求項１に記載の方法。
【請求項１０】
前記デバイスをユーザセッションにマップする前に、仮想通信チャネルの識別子をクライアントシステムにおいてマッピングリクエストにバインドするさらなるステップを包含する、請求項１に記載の方法。
【請求項１１】
前記クライアントシステムがプロキシクライアントである、請求項１に記載の方法。
【請求項１２】
前記プロキシクライアントが前記ユーザセッションをサポートする同一のサーバの上でホストされる、請求項１１に記載の方法。
【請求項１３】
前記プロキシクライアントが、前記ユーザセッションをサポートするサーバとは異なるサーバの上でホストされる、請求項１１に記載の方法。
【請求項１４】
クライアントシステムと通信するデバイスの上のデータを同期化するための方法であって、該クライアントシステムがプレゼンテーションレベルプロトコルを使用してサーバと通信し、該方法は、
ａ）該クライアントシステムと通信するデバイスの識別を決定するステップと、
ｂ）該デバイスが登録されたデバイスクラスのメンバーであることを決定するステップと、
該デバイスが該クライアントシステムと通信することを示す通知を作成するステップと、
サーバによってホストされるユーザセッションの中で実行するアプリケーションのインスタンスに該通知を向けるステップと、
ｅ）該アプリケーションインスタンスの実行の結果として、該クライアントシステムと通信する該デバイスの上のデータの収集を、該ユーザセッションからアクセス可能なデータの収集と同期化するステップと
を包含する、方法。
【請求項１５】
前記デバイスが、ＵＳＢ通信プロトコルおよびワイヤレスＵＳＢ／超広帯域ワイヤレス通信プロトコルのうちの一つを介して前記クライアントシステムと通信する、請求項１４に記載の方法。
【請求項１６】
前記デバイスがＩＲシリアル通信プロトコルを介して前記クライアントシステムと通信する、請求項１４に記載の方法。
【請求項１７】
前記デバイスがＢｌｕｅｔｏｏｔｈ（登録商標）シリアル通信プロトコルを介して前記クライアントシステムと通信する、請求項１４に記載の方法。
【請求項１８】
前記アプリケーションインスタンスがプロセス間通信のためにソケット通信を使用し、前記ステップ（ｅ）が
（ｅ−１）前記セッションの中でソケット呼出しをフッキングするステップ
をさらに包含する、請求項１４に記載の方法。
【請求項１９】
クライアントシステムと通信するデバイスの上のデータを同期化するためのシステムであって、
サーバシステムと通信するためにプレゼンテーションレベルプロトコルを実行するクライアントシステムであって、該クライアントシステムが該クライアントシステムとインタフェースされる該デバイスから受信される通信に基づいてイベント通知を生成するイベントマネジャーを含む、クライアントシステムと、
該クライアントシステムと通信するデバイスであって、該クライアントシステムと通信する該デバイスがデータの収集を含む、デバイスと、
該クライアントシステムと通信するため、およびサーバシステムの上の少なくとも一つのユーザセッションをホストするために、プレゼンテーションレベルプロトコルを実行する該サーバシステムであって、該クライアントシステムと通信する該デバイスの上のデータの該収集を該ユーザセッションからアクセス可能なデータの収集と同期化するために使用されるアプリケーションのインスタンスを該ユーザセッションが実行する、サーバシステムと
を備える、システム。
【請求項２０】
前記イベントマネジャーがプラグアンドプレイイベントマネジャーであり、前記イベント通知がプラグアンドプレイイベント通知である、請求項１９に記載のシステム。
【請求項２１】
前記アプリケーションインスタンスがプロセス間通信のためにソケット通信を使用し、前記クライアント接続されたデバイスの上の前記データの収集と前記サーバセッションからアクセス可能な前記データの収集との同期化が、該アプリケーションインスタンスによってなされるソケット呼出しをフッキングする、請求項１９に記載のシステム。
【請求項２２】
前記ソケット呼出しが前記ユーザセッションの中でフッキングされる、請求項２１に記載のシステム。
【請求項２３】
前記ソケット呼出しが仮想ＩＰアドレスフッキングを使用してフッキングされる、請求項２１に記載のシステム。
【請求項２４】
前記ソケット呼出しが仮想ループバックアドレスフッキングを使用してフッキングされる、請求項２１に記載のシステム。
【請求項２５】
クライアントシステムと通信するデバイスの上のデータをサーバからアクセス可能なデータと同期化するためのコンピュータ読出し可能なプログラム手段を具体化した製品であって、
ＵＳＢ接続を介してクライアントシステムと通信するデバイスをサーバによってホストされるユーザセッションの中にマップするためのコンピュータ読出し可能なプログラム手段であって、該サーバがプレゼンテーションレベルプロトコルを使用して該クライアントと通信する、コンピュータ読出し可能なプログラム手段と、
該アプリケーションインスタンスの結果として、該クライアントシステムと通信する該デバイスの上のデータの収集を、該セッションにとってアクセス可能なデータの収集と同期化するための、コンピュータ読出し可能なプログラム手段と
を備える、製品。
【請求項２６】
前記デバイスがワイヤレスＵＳＢ／超広帯域ワイヤレス通信プロトコルを使用して前記クライアントシステムと通信する、請求項２５に記載の製品。
【請求項２７】
前記デバイスがＩＲシリアル通信プロトコルを使用して前記クライアントシステムと通信する、請求項２５に記載の製品。
【請求項２８】
前記デバイスがＢｌｕｅｔｏｏｔｈ（登録商標）シリアル通信プロトコルを介して前記クライアントシステムと通信する、請求項２５に記載の製品。
【請求項２９】
前記アプリケーションインスタンスがプロセス間通信のためにソケット通信を使用し、前記クライアントシステムと通信する前記デバイスの上のデータの収集を同期化するためのコンピュータ読出し可能なプログラム手段が、
前記セッションの中でソケット呼出しをフッキングするためのコンピュータ読出し可能なプログラムをさらに備える、請求項２５に記載の製品。
【請求項３０】
前記フッキングが仮想ループバックアドレスフッキングである、請求項２９に記載の製品。
【請求項３１】
前記フッキングが仮想ＩＰアドレスフッキングである、請求項２８に記載の製品。
【請求項３２】
前記アプリケーションインスタンスがプロセス間通信のためにソケット通信を使用し、前記クライアントシステムと通信する前記デバイスの上のデータの収集を同期化するためのコンピュータ読出し可能なプログラム手段が、
サーバコンソールの上でソケット呼出しをフッキングするためのコンピュータ読出し可能なプログラム手段をさらに備える、請求項２５に記載の製品。
【請求項３３】
前記デバイスをユーザセッションにマップする前に、仮想通信チャネルの識別子を前記クライアントシステムにおいてマッピングリクエストにバインドするためのコンピュータ読出し可能なプログラム手段をさらに備える、請求項２５に記載の製品。
【請求項３４】
クライアントシステムと通信するデバイスの上のデータをサーバからアクセス可能なデータの収集と同期化するための方法のためのコンピュータ読出し可能なプログラム手段を具体化した製品であって、
ＵＳＢ接続を介して該クライアントシステムと通信する該デバイスの識別を決定するためのコンピュータ読出し可能なプログラム手段であって、該クライアントシステムがプレゼンテーションレベルプロトコルを使用してサーバと通信する、コンピュータ読出し可能なプログラム手段と、
該デバイスが登録されたデバイスクラスのメンバーであることを決定するためのコンピュータ読出し可能なプログラム手段と、
該デバイスが該クライアントと通信することを示す通知を作成するためのコンピュータ読出し可能なプログラム手段と、
サーバによってホストされるユーザセッションの中で実行するアプリケーションのインスタンスに該通知を向けるためのコンピュータ読出し可能なプログラム手段と、
該アプリケーションインスタンスの実行の結果として、該クライアントシステムと通信する該デバイスの上のデータの収集を、該サーバにとってアクセス可能なデータの収集と同期化するためのコンピュータ読出し可能なプログラム手段と
を備える、製品。
【請求項３５】
前記デバイスがワイヤレスＵＳＢ／超広帯域ワイヤレス通信プロトコルを使用して前記クライアントシステムと通信する、請求項３４に記載の製品。
【請求項３６】
前記デバイスがＩＲシリアル通信プロトコルを使用して前記クライアントシステムと通信する、請求項３４に記載の製品。
【請求項３７】
前記デバイスがＢｌｕｅｔｏｏｔｈ（登録商標）シリアル通信プロトコルを介して前記クライアントシステムと通信する、請求項３４に記載の製品。
【請求項３８】
前記アプリケーションインスタンスがプロセス間通信のためにソケット通信を使用し、前記クライアントシステムと通信する前記デバイスの上のデータの収集を同期化するためのコンピュータ読出し可能なプログラム手段が、
前記セッションの中でソケット呼出しをフッキングするためのコンピュータ読出し可能なプログラム手段
をさらに備える、請求項３４に記載の製品。
【請求項３９】
前記ソケット呼出しがサーバコンソールの上でフッキングされる、請求項３４に記載の製品。
【請求項４０】
クライアントシステムと通信するデバイスの上のデータを同期化するための方法であって、
ａ）ＵＳＢ接続を介して該クライアントシステムと通信するデバイスの識別を決定するステップと、
ｂ）該デバイスが登録されたデバイスクラスのメンバーであることを決定するステップと、
該デバイスが該クライアントシステムと通信することを示す通知を作成するステップと、
サーバの上で実行するアプリケーションに該通知を向けるステップと、
ｅ）該アプリケーションの該実行の結果として、該クライアントシステムと通信する該デバイスの上のデータの収集を、該サーバからアクセス可能なデータの収集と同期化するステップと
を包含する、方法。
【請求項４１】
前記デバイスがＩＲシリアル通信プロトコルを使用して前記クライアントシステムと通信する、請求項４０に記載の方法。
【請求項４２】
前記デバイスがＢｌｕｅｔｏｏｔｈ（登録商標）シリアル通信プロトコルを介して前記クライアントシステムと通信する、請求項４０に記載の方法。
【請求項４３】
前記デバイスがワイヤレスＵＳＢ／超広帯域ワイヤレス通信プロトコルを介して前記クライアントシステムと通信する、請求項４０に記載の方法。
【請求項４４】
クライアントシステムと通信するデバイスの上のデータを同期化するためのシステムであって、
サーバシステムと通信するクライアントシステムであって、該クライアントシステムが該クライアントシステムとＵＳＢ接続を介してインタフェースされる該デバイスから受信される通信に基づいてイベント通知を生成するイベントマネジャーを含む、クライアントシステムと、
該クライアントシステムと通信するデバイスであって、該クライアントシステムと通信する該デバイスがデータの収集を含む、デバイスと、
該クライアントシステムと通信し、該クライアントシステムと通信する該デバイスの上のデータの該収集を該サーバにとってアクセス可能なデータの収集と同期化するために使用されるアプリケーションを実行する、サーバシステムと
を備える、システム。
【請求項４５】
前記イベントマネジャーがプラグアンドプレイイベントマネジャーであり、前記イベント通知がプラグアンドプレイイベント通知である、請求項４４に記載のシステム。
【請求項４６】
クライアントシステムと通信するデバイスの上のデータを同期化するための方法であって、
（ａ）プレゼンテーションレベルプロトコルを使用してサーバと通信するクライアントシステムを提供するステップと、
（ｂ）該サーバによってホストされるセッションにおいて少なくとも一つのデバイス列挙方法をインタセプトするステップであって、該列挙方法が該クライアントと通信する少なくとも一つのデバイスを列挙する、ステップと、
（ｃ）該列挙方法の結果に基づいて、該クライアントシステムと通信する該少なくとも一つのデバイスを、該サーバによってホストされるユーザセッションの中にマップするステップであって、該ユーザセッションがアプリケーションの実行するインスタンスを含む、ステップと、
（ｄ）該アプリケーションインスタンスの実行の結果として、該クライアントシステムと通信する該デバイスの上のデータの収集を、該ユーザセッションからアクセス可能なデータの収集と同期化するステップと
を包含する、方法。
【請求項４７】
前記クライアントシステムと通信する前記デバイスがＵＳＢ接続を介して通信する、請求項４５に記載の方法。
【請求項４８】
前記列挙方法はフックＤＬＬを介してインタセプトされる、請求項４６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の説明的な実施形態は、概してデータ同期化に関し、より具体的には、クライアントシステムと通信するデバイスの上のデータの収集と、サーバシステムの上のユーザセッションからアクセス可能なデータの収集との同期化に関する。
【背景技術】
【０００２】
プラグアンドプレイ（Ｐｌｕｇ  ａｎｄ  Ｐｌａｙ）（ＰｎＰ）は、ユーザ介入がほとんどないかまたはなしにシステムとインタフェースされるデバイス／構成要素におけるハードウェア構成の変化を、コンピュータシステムが認識しそれに適応することを可能にする、ハードウェアおよびソフトウェアのサポートの組み合わせである。プラグアンドプレイを用いて、ユーザは、手作業による設定をすることなしに、およびコンピュータハードウェアの複雑な知識なしに、デバイスを動的に追加したり取り外すことができる。たとえば、ユーザは、接続されたデバイスについての構成設定を変化させることなく、ＰＤＡまたはラップトップをドッキング（ｄｏｃｋ）すること、およびドッキングステーションのイーサネット（登録商標）カードを使用してネットワークに接続することができる。その後、ユーザは、手作業による構成変化を行なう必要なしに、同じＰＤＡまたはラップトップをアンドッキング（ｕｎｄｏｃｋ）すること、およびモデムを使用してネットワークに接続することができる。
【０００３】
コンピュータに接続されたデバイスについてのプラグアンドプレイイベントは、デバイスが通信しているシステムのオペレーティングシステムによって一般的に処理される。たとえば、ＰＣにつながれたＰＤＡは、そのイベントをＰＣ  ＯＳによって処理させ得る。システムは、デバイスがドッキングまたはアンドッキングされるときに、システムに接続される異なるデバイスを反映するように、デバイスドライバを自動的にロードおよびアンロードすることができる。また、アプリケーションは、デバイス（たとえばＰＤＡ）の挿入または取り外しを反映するように、アプリケーションの構成を自動的に調整することができる。プラグアンドプレイは、すべてのデバイスが共に作動するという保証、および変更が行なわれた後に機械が正確に起動するという保証のもとで、ユーザがコンピュータの構成を変更することを可能にする。
【０００４】
残念ながら、プラグアンドプレイイベント（たとえば「デバイス到着」および「デバイス取り外し」）を処理する従来の方法は、サーバベースのコンピュータシステムにおいて、新しいデバイスが、サーバに接続されたクライアントシステムと通信している場合には、特に良好に働くというわけではない。サーバベースのコンピュータシステムにおけるクライアントシステムは、サーバの上で実行するユーザセッションをサポートするプレゼンテーションレベルプロトコルを介して、ネットワーク上のサーバシステムと頻繁に連絡を取り合う。サーバシステムは、サーバの上のアプリケーションを展開、管理、サポート、および実行することにより、クライアントシステムがアプリケーションをホストおよび実行する必要性を取り除く。サーバは、次のようなプレゼンテーションレベルプロトコルおよびアーキテクチャを展開する。すなわち、フロリダ州のＦｏｒｔ  ＬａｕｄｅｒｄａｌｅのＣｉｔｒｉｘ  Ｓｙｓｔｅｍｓ  Ｉｎｃ．のＩｎｄｅｐｅｎｄｅｎｔ  Ｃｏｍｐｕｔｉｎｇ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＣＡ）、ワシントン州ＲｅｄｍｏｎｄのＭｉｃｒｏｓｏｆｔ  ＣｏｒｐｏｒａｔｉｏｎのＲｅｍｏｔｅ  Ｄｅｓｋｔｏｐ  Ｐｒｏｔｏｃｏｌ（ＲＤＰ）、およびＸ−Ｏｐｅｎ  ＣｏｎｓｏｒｔｉｕｍのＸ−Ｗｉｎｄｏｗ  Ｐｒｏｔｏｃｏｌ。アプリケーションを実行することまたはサーバの上のリソースにアクセスすることを望む、クライアントシステムに接続されたユーザは、専用セッションにおいてサーバに接続される。しかし、従来は、クライアントシステムのオペレーティングシステムのためのプラグアンドプレイマネジャーは、クライアントシステムに接続するかまたはそれから取り外されるデバイスによって生成される任意のメッセージを処理し、生成されたイベントは既存のユーザセッションに影響しない。結果として、データをサーバによってホストされるユーザセッションにおいて利用可能なデータと同期化する（たとえばＭｉｃｒｏｓｏｆｔ  ＣｏｒｐｏｒａｔｉｏｎのＯＵＴＬＯＯＫ（登録商標）におけるカレンダー入力を同期化する）ことを望むクライアントと通信するデバイスは、デバイスがクライアントシステムにマップされているので、そうすることができない。
【発明の開示】
【課題を解決するための手段】
【０００５】
（発明の概要）
本発明の説明的な実施形態は、クライアントシステムと通信するデバイスの上のデータを、サーバがホストするセッションからアクセス可能なデータと同期化するためのメカニズムを提供する。同期化は、クライアントシステムとサーバシステムとの間で通信を送信するためのプレゼンテーションレベルプロトコルを使用して、ネットワーク接続を介して発生する。クライアントシステムと通信するデバイスは、ユーザセッションの中にマップされる。ひとたびデバイスが、サーバによってホストされるセッションの中にマップされると、クライアントシステムと通信するデバイスの上のデータは、ユーザによってホストされるセッションからアクセス可能なデータと同期化され得る。
【０００６】
一実施形態において、クライアントシステムと通信するデバイスの上のデータを同期化する方法は、クライアントシステムと通信するデバイスを、サーバによってホストされるユーザセッションの中にマップするステップを含む。ユーザセッションは、アプリケーションの実行するインスタンスを含む。サーバは、プレゼンテーションレベルプロトコルを使用してクライアントシステムと通信する。方法はまた、クライアントシステムと通信するデバイスの上のデータの収集を、サーバによってホストされるユーザセッションからアクセス可能なデータの収集と同期化する。同期化は、アプリケーションインスタンスの実行の結果として発生する。
【０００７】
別の実施形態において、プレゼンテーションレベルプロトコルを使用してサーバと通信しているクライアントシステムと通信するデバイスの上のデータを同期化するための方法は、クライアントシステムと通信するデバイスの識別を決定するステップと、デバイスが登録されたデバイスクラスのメンバーであることを決定するステップとを含む。方法は、デバイスがクライアントシステムと通信することを示す通知を生成するステップをさらに含む。通知は、サーバによってホストされるユーザセッションの中で実行するアプリケーションのインスタンスに向けられる。方法はまた、アプリケーションインスタンスの実行の結果として、クライアントシステムと通信するデバイスの上のデータの収集を、ユーザセッションからアクセス可能なデータの収集と同期化するステップを含む。
【０００８】
一実施形態において、クライアントシステムと通信するデバイスの上のデータを同期化するためのシステムは、サーバシステムと通信するためにプレゼンテーションレベルプロトコルを実行するクライアントシステムを含む。クライアントシステムは、クライアントシステムと通信するデバイスから受信された通信に基づいてイベント通知を生成するイベントマネジャーを含む。システムはまた、クライアントシステムと通信するデバイスを含み、クライアントと通信するデバイスはデータの収集を含む。システムは、クライアントシステムと通信するためにプレゼンテーションレベルプロトコルを実行するサーバシステムをさらに含む。サーバシステムはまた、アプリケーションのインスタンスを実行する少なくとも一つのユーザセッションをホストする。アプリケーションは、クライアントシステムと通信するデバイスの上のデータの収集を、ユーザセッションからアクセス可能なデータの収集と同期化するために使用される。
【０００９】
別の実施形態において、クライアントシステムと通信するデバイスの上のデータを同期化するための方法は、ＵＳＢ接続を介してクライアントシステムと通信するデバイスの識別を決定するステップを含む。方法は、デバイスが登録されたデバイスクラスのメンバーであることをさらに決定し、デバイスがクライアントシステムと通信することを示す通知を生成する。方法は、通知を、サーバの上で実行するアプリケーションに向ける。サーバの上のアプリケーションの実行は、クライアントシステムと通信するデバイスの上のデータの収集を、サーバからアクセス可能なデータの収集と同期化する。
【００１０】
一実施形態において、クライアントシステムと通信するデバイスの上のデータを同期化するためのシステムは、サーバシステムと通信するクライアントシステムを含む。クライアントシステムは、ＵＳＢ接続を介してクライアントシステムとインタフェースされるデバイスから受信される通信に基づいてイベント通知を生成するイベントマネジャーを含む。システムは、データの収集を含むクライアントシステムと通信するデバイスをさらに含む。システムはまた、クライアントシステムと通信し、クライアントシステムと通信するデバイスの上のデータの収集をサーバにとってアクセス可能なデータの収集と同期化するために使用されるアプリケーションを実行する、サーバシステムを含む。
【００１１】
さらなる実施形態においては、クライアントシステムと通信するデバイスの上のデータを同期化する方法は、プレゼンテーションレベルプロトコルを使用してサーバと通信するクライアントシステムを提供するステップを含む。方法は、サーバによってホストされるセッションにおいて少なくとも一つのデバイス列挙（ｅｎｕｍｅｒａｔｉｏｎ）方法をインタセプトするステップをさらに含む。列挙方法は、クライアントと通信するデバイスを列挙する。方法はまた、列挙方法の結果に基づいて、クライアントシステムと通信するデバイスを、サーバによってホストされるユーザセッションの中にマップする。ユーザセッションは、アプリケーションの実行するインスタンスを含む。方法は、アプリケーションインスタンスの実行の結果として、クライアントシステムと通信するデバイスの上のデータの収集を、ユーザセッションからアクセス可能なデータの収集と同期化するステップをさらに含む。
【発明を実施するための最良の形態】
【００１２】
本発明のこれらのおよび他の局面は、詳細な説明および添付の図面から容易に明らかになる。それらの図面は図示することを意図されたものであり、本発明を限定することを意図されたものではない。
【００１３】
（発明の詳細な説明）
本発明の説明的な実施形態は、クライアントシステムと通信するデバイスを、サーバによってホストされるユーザセッションの中にマップする。クライアントシステムと通信するデバイスがユーザセッションの中にひとたびマップされると、ユーザセッションの中で実行する同期化アプリケーションのインスタンスが利用され得る。同期化アプリケーションは、ＷｉｎＣＥ  ＰＤＡなどのクライアントシステムと通信するデバイス上のデータの収集を、サーバによってホストされるユーザセッションからアクセス可能なデータの収集と同期化するために使用される。
【００１４】
図１Ａは、本発明の実施形態を実行するために適切な環境を示す。ユーザ２はクライアントシステム４へのアクセスを有する。クライアントシステム４は、ＩＣＡ、ＲＤＰまたはＸ−Ｏｐｅｎ  Ｗｉｎｄｏｗｓ（登録商標）などのプレゼンテーションレベルプロトコルサポーティングアーキテクチャ６を含む。プレゼンテーションレベルプロトコルサポーティングアーキテクチャ６は、ネットワーク１０を介してサーバ１２上に含まれるプレゼンテーションレベルサポーティングアーキテクチャ１４との接続を確立するために使用される。プレゼンテーションレベルプロトコルサポーティングアーキテクチャ１４は、ユーザセッション、セッションＩ（１６）、セッションＩＩ（１８）およびセッションＩＩＩ（２０）を確立する。ユーザ２からのリクエストは、適切なセッションの中にマップされる。当業者は、単一のユーザが複数のセッションを確立し得ることを認識する。あるいは、複数のユーザが、サーバ１２の上に個々のセッション１６、１８および２０を確立し得る。各セッション１６、１８および２０は、クライアントシステム４のリクエストを処理するために利用可能な一つ以上のアプリケーション２２および２４のインスタンスを含み得る。クライアントシステム４と通信するデバイス２４は、イベント２６を生成し得、そのイベントは処理のためにインタセプトされてセッション１６、１８および２０にリダイレクトされる。クライアントシステム４と通信するデバイス２４は、多くの形態を取り得る。デバイス２４は、プリンタ、スキャナ、デジタルカメラ、携帯電話、ＰＤＡ、またはクライアントシステム４と通信する能力のあるシリアル通信インタフェースを出力する他のデバイスであり得る。
【００１５】
図１Ａに示される環境の部分を、より詳細に図１Ｂに示す。クライアント側の例示的なプレゼンテーションレベルプロトコルサポーティングアーキテクチャ（Ｐｒｅｓｅｎｔａｔｉｏｎ  Ｌｅｖｅｌ  Ｐｒｏｔｏｃｏｌ  Ｓｕｐｐｏｒｔｉｎｇ  Ａｒｃｈｉｔｅｃｔｕｒｅ）６は、エンジン３０およびプロトコルスタック（Ｐｒｏｔｏｃｏｌ  Ｓｔａｃｋ）３２を含む。プロトコルスタック３２は、プロトコルドライバ（Ｐｒｏｔｏｃｏｌ  Ｄｒｉｖｅｒ）（ＰＤ）および移送ドライバ（Ｔｒａｎｓｐｏｒｔ  Ｄｒｉｖｅｒ）（ＴＤ）を含む。プレゼンテーションレベルプロトコルサポーティングアーキテクチャ６は、ＯＳ抽象化レイヤ（ＯＳ  Ａｂｓｔｒａｃｔｉｏｎ  Ｌａｙｅｒ）３１、プラグアンドプレイマネジャー（Ｐｌｕｇ  ａｎｄ  Ｐｌａｙ  Ｍａｎａｇｅｒ）３４、ＵＳＢドライバスタック３６、およびＩ／Ｏマネジャー（Ｉ／Ｏ  Ｍａｎａｇｅｒ）３８をも含む。プレゼンテーションレベルプロトコルサポーティングアーキテクチャ６は、サーバ１２との間で仮想制御接続４４を介して制御情報を送信するために使用される制御仮想ドライバ（ＣＴＬ  ＶＤ）４０と、サーバ１２との間で仮想通信接続４８を介してデータを送信するために使用されるリダイレクタ（Ｒｅｄｉｒｅｃｔｏｒ）仮想ドライバ／クライアントＣＯＭマッピング仮想ドライバ（Ｃｌｉｅｎｔ  ＣＯＭ  Ｍａｐｐｉｎｇ  Ｖｉｒｔｕａｌ  Ｄｒｉｖｅｒ）（ＣＣＭ  ＶＤ）４２とをさらに含む。ＣＴＬ  ＶＤ４０は、ＯＳ抽象化レイヤ３１との一定のイベントについてのコールバックを登録する（ｒｅｇｉｓｔｅｒ）。コールバックは、指定されたイベントが発生した場合に、特定の命令（ＣＴＬ  ＶＤに通知することなど）を実行するためにＣＤＬ  ＶＤ４０によってＯＳ抽象化レイヤ３１に残されたスタンディングリクエストである。ＯＳ抽象化レイヤ３１は、ＵＳＢドライバスタック３６に接続するプリンタ６０によって生成されるデバイス到着イベントなどの、ＰＮＰマネジャー３４によって生成されるイベントをインタセプトする。実行されるＣＴＬ  ＶＤ４０へのコールバックは、プリンタ６０および以下のより詳細に述べられるイベントに関する情報をサーバに送信する。
【００１６】
図１ＢはＵＳＢドライバスタック３６を介してクライアント側のプレゼンテーションレベルプロトコルサポーティングアーキテクチャ６と通信するプリンタ６０を示すが、本発明の範囲の範囲内において多くの他の実装が可能であることが理解されるべきである。たとえば、クライアントシステム４と通信するデバイス２４は、シリアルインタフェースを出力する任意のデバイスであり得る。したがって、クライアントシステム４が特定のプロトコルを使用してデバイス２４との通信をサポートする限り、クライアントシステム４と通信するデバイス２４は、ＩＲシリアルプロトコル、Ｂｌｕｅｔｏｏｔｈ（登録商標）シリアルプロトコル、ＩＥＥＥ  １３９４プロトコル、ＦＩＲＥＷＩＲＥ（登録商標）、ＷＩ−ＦＩプロトコル、ＵＳＢプロトコル、ワイヤレスＵＳＢ／超広帯域ワイヤレスプロトコル、またはいくつかの他のプロトコルを使用して通信し得る。
【００１７】
サーバ１２は、図１Ｂに示されたプレゼンテーションレベルプロトコルサポーティングアーキテクチャ１４のサーバ側を含む。プレゼンテーションレベルプロトコルサポーティングアーキテクチャ１４のサーバ側は、複数のユーザセッション１６、１８および２０をサポートする。示されたユーザセッションＩ（１６）は、クライアントシステムとサーバとの間で制御情報を送信するために、クライアント側のＣＴＬＶＤ４０との仮想チャネル４４を確立するために使用されるサーバ側のＣＴＬ  ＶＤ４６を含む。セッションＩ（１６）はさらに、プリンタ６０のリソースとして作用し得るアプリケーション２２の示されたインスタンスなどの、一つ以上のアプリケーション２２および２４を含む。アプリケーション２２の別個のインスタンスは、各ユーザセッションの中で別個のプロセスとして実行する。代替的には、アプリケーション２２は、Ｍｉｃｒｏｓｏｆｔ  ＣｏｒｐｏｒａｔｉｏｎのＡＣＴＩＶＥＳＹＮＣ（登録商標）、またはカリフォルニア州ＭｉｌｐｉｔａｓのＰａｌｍＯｎｅ，Ｉｎｃ．のＨＯＴＳＹＮＣなどの、同期化アプリケーションであり得る。当業者は、本発明の範囲から逸脱することなく、セッションＩ（１６）が、同期化アプリケーションに加えて／の代わりに、多くの異なる種類のアプリケーションを含み得ることを認識する。
【００１８】
セッションＩ（１６）はまた、仮想デバイスをユーザセッションの中にマップするプロセスの一部として、ドライバマッピングサービスに対してＲＰＣ呼出しをするネットワークプロバイダ（Ｎｅｔｗｏｒｋ  Ｐｒｏｖｉｄｅｒ）モジュール５２を含む。以下にマッピングプロセスがより詳細に説明される。ネットワークプロバイダモジュール５２は、オブジェクトマネジャー（Ｏｂｊｅｃｔ  Ｍａｎａｇｅｒ）５８と通信するドライバマッピングサービス５６と連絡を取り合う。ドライバマッピングサービス（Ｄｒｉｖｅｒ  Ｍａｐｐｉｎｇ  Ｓｅｒｖｉｃｅ）５６およびオブジェクトマネジャー５８は、プレゼンテーションレベルプロトコルサポーティングアーキテクチャ１４の一部でもあるが、セッション１６の外部に位置付けられる。アプリケーション２２は、Ｉ／Ｏマネジャー５４と通信する。Ｉ／Ｏマネジャー５４は、オブジェクトマネジャー５８およびデバイスリダイレクタ５０と通信する。デバイスリダイレクタ（Ｄｅｖｉｃｅ  Ｒｅｄｉｒｅｃｔｏｒ）５０は、データを送信するためのクライアント側のＣＣＭ  ＶＤ４２との仮想通信チャネル４８を形成するために使用される。プレゼンテーションレベルプロトコルサポーティングアーキテクチャ１４には、ＰＤおよびＴＤを含むサーバ側のプロトコルスタック（Ｐｒｏｔｏｃｏｌ  Ｓｔａｃｋ）６０がさらに含まれる。図１Ｂに示されたサーバ側の構成要素の操作が、より詳細に以下に説明される。
【００１９】
当業者は、プレゼンテーションレベルプロトコルサポーティングアーキテクチャ６および１４における実際の構成要素は、展開されるアーキテクチャに依存して変化することを認識する。ＩＣＡアーキテクチャにおいて、プロトコルスタック３２および６０はＩＣＡスタックである。ＯＳ抽象化レイヤ３１は、ＷＩＮＤＯＷＳ（登録商標）抽象化レイヤである。同様に、オブジェクトマネジャー５８はＷＩＮＤＯＷＳ（登録商標）オブジェクトマネジャーであり、クライアント側のプレゼンテーションレベルプロトコルサポーティングアーキテクチャ６はＩＣＡクライアントであり、サーバ側のプレゼンテーションレベルプロトコルサポーティングアーキテクチャ１４はＩＣＡアーキテクチャにおけるメタフレームプレゼンテーションサーバ（ＭＥＴＡＦＲＡＭＥ  ＰＲＥＳＥＮＴＡＴＩＯＮ  ＳＥＲＶＥＲ）である。ＲＤＰアーキテクチャ、Ｘ−Ｏｐｅｎアーキテクチャ、または他のプレゼンテーションレベルプロトコルサポーティングアーキテクチャの構成要素は、本発明の範囲から逸脱することなく、本明細書に記載された構成要素とは異なり得ることもまた認識される。
【００２０】
多くの実施形態において、クライアントシステム４およびサーバ１２は、カリフォルニア州Ｐａｌｏ  ＡｌｔｏのＨｅｗｌｅｔｔ−Ｐａｃｋａｒｄ  Ｃｏｒｐｏｒａｔｉｏｎ、またはテキサス州Ｒｏｕｎｄ  ＲｏｃｋのＤｅｌｌ  Ｃｏｒｐｏｒａｔｉｏｎによって製造される種類の、パーソナルコンピュータまたはコンピュータサーバとして提供される。図２Ａおよび図２Ｂは、クライアントシステム４およびサーバ１２として有用な代表的なコンピュータ２００のブロック図を示す。図２Ａおよび図２Ｂに示されるように、各コンピュータ２００は、中央処理ユニット２０２および主メモリユニット２０４を含む。各コンピュータ２００は、一つ以上の入力／出力デバイス２３０ａ〜２３０ｎ（一般的に参照番号２３０を使用して参照される）、および中央処理ユニット２０２と通信するキャッシュメモリ２４０をも含み得る。
【００２１】
中央処理ユニット２０２は、主メモリユニット２０４から取り出された命令に対して応答および処理をする任意の論理回路網である。多くの実施形態において、中央処理ユニットは次のようなマイクロプロセッサによって提供される。すなわち、カリフォルニア州Ｍｏｕｎｔａｉｎ  ＶｉｅｗのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎによって製造される、８０８８、８０２８６、８０３８６、８０４８６、Ｐｅｎｔｉｕｍ（登録商標）、Ｐｅｎｔｉｕｍ（登録商標）  Ｐｒｏ、Ｐｅｎｔｉｕｍ（登録商標）  ＩＩ、Ｃｅｌｅｒｏｎ（登録商標）、またはＸｅｏｎ（登録商標）プロセッサ。イリノイ州ＳｃｈａｕｍｂｕｒｇのＭｏｔｏｒｏｌａ  Ｃｏｒｐｏｒａｔｉｏｎによって製造される、６８０００、６８０１０、６８０２０、６８０３０、６８０４０、ＰｏｗｅｒＰＣ６０１（登録商標）、ＰｏｗｅｒＰＣ６０４（登録商標）、ＰｏｗｅｒＰＣ６０４ｅ（登録商標）、ＭＰＣ６０３ｅ（登録商標）、ＭＰＣ６０３ｅｉ（登録商標）、ＭＰＣ６０３ｅｖ（登録商標）、ＭＰＣ６０３ｒ（登録商標）、ＭＰＣ６０３ｐ（登録商標）、ＭＰＣ７４０（登録商標）、ＭＰＣ７４５（登録商標）、ＭＰＣ７５０（登録商標）、ＭＰＣ７５５（登録商標）、ＭＰＣ７４００（登録商標）、ＭＰＣ７４１０（登録商標）、ＭＰＣ７４４１（登録商標）、ＭＰＣ７４４５（登録商標）、ＭＰＣ７４４７（登録商標）、ＭＰＣ７４５０（登録商標）、ＭＰＣ７４５１（登録商標）、ＭＰＣ７４５５（登録商標）、ＭＰＣ７４５７（登録商標）プロセッサ。カリフォルニア州Ｓａｎｔａ  ＣｌａｒａのＴｒａｎｓｍｅｔａ  Ｃｏｒｐｏｒａｔｉｏｎによって製造される、Ｃｒｕｓｏｅ  ＴＭ５８００（登録商標）、Ｃｒｕｓｏｅ  ＴＭ５６００（登録商標）、Ｃｒｕｓｏｅ  ＴＭ５５００（登録商標）、Ｃｒｕｓｏｅ  ＴＭ５４００（登録商標）、Ｅｆｆｉｃｅｏｎ  ＴＭ８６００（登録商標）、Ｅｆｆｉｃｅｏｎ  ＴＭ８３００（登録商標）、またはＥｆｆｉｃｅｏｎ  ＴＭ８６２０（登録商標）プロセッサ。ニューヨーク州Ｗｈｉｔｅ  ＰｌａｉｎｓのＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓによって製造される、ＲＳ／６０００（登録商標）プロセッサ、ＲＳ６４（登録商標）、ＲＳ６４（登録商標）ＩＩ、Ｐ２ＳＣ、ＰＯＷＥＲ３（登録商標）、ＲＳ６４（登録商標）ＩＩＩ、ＰＯＷＥＲ３（登録商標）−ＩＩ、ＲＳ６４（登録商標）ＩＶ、ＰＯＷＥＲ４（登録商標）、ＰＯＷＥＲ４＋（登録商標）、ＰＯＷＥＲ５（登録商標）、またはＰＯＷＥＲ６（登録商標）プロセッサ。またはカリフォルニア州ＳｕｎｎｙｖａｌｅのＡｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓによって製造される、ＡＭＤ  Ｏｐｔｅｒｏｎ（登録商標）、ＡＭＤ  Ａｔｈａｌｏｎ  ６４  ＦＸ（登録商標）、ＡＭＤ  Ａｔｈａｌｏｎ（登録商標）、またはＡＭＤ  Ｄｕｒｏｎ（登録商標）プロセッサ。
【００２２】
主メモリユニット２０４は、データを格納する能力があり、任意の記憶場所がマイクロプロセッサ２０２によって直接的にアクセスされることが可能な、次のような一つ以上のメモリチップであり得る。すなわち、スタティックランダムアクセスメモリ（ＳＲＡＭ）、Ｂｕｒｓｔ  ＳＲＡＭまたはＳｙｎｃｈＢｕｒｓｔ  ＳＲＡＭ（ＢＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、Ｆａｓｔ  Ｐａｇｅ  Ｍｏｄｅ  ＤＲＡＭ（ＦＰＭ  ＤＲＡＭ）、Ｅｎｈａｎｃｅｄ  ＤＲＡＭ（ＥＤＲＡＭ）、Ｅｘｔｅｎｄｅｄ  Ｄａｔａ  Ｏｕｔｐｕｔ  ＲＡＭ（ＥＤＯ  ＲＡＭ）、Ｅｘｔｅｎｄｅｄ  Ｄａｔａ  Ｏｕｔｐｕｔ  ＤＲＡＭ（ＥＤＯ  ＤＲＡＭ）、Ｂｕｒｓｔ  Ｅｘｔｅｎｄｅｄ  Ｄａｔａ  Ｏｕｔｐｕｔ  ＤＲＡＭ（ＢＥＤＯ  ＤＲＡＭ）、Ｅｎｈａｎｃｅｄ  ＤＲＡＭ（ＥＤＲＡＭ）、同期式ＤＲＡＭ（ＳＤＲＡＭ）、ＪＥＤＥＣ  ＳＲＡＭ、ＰＣ１００  ＳＤＲＡＭ、Ｄｏｕｂｌｅ  Ｄａｔａ  Ｒａｔｅ  ＳＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、Ｅｎｈａｎｃｅｄ  ＳＤＲＡＭ（ＥＳＤＲＡＭ）、ＳｙｎｃＬｉｎｋ  ＤＲＡＭ（ＳＬＤＲＡＭ）、Ｄｉｒｅｃｔ  Ｒａｍｂｕｓ  ＤＲＡＭ（ＤＲＤＲＡＭ）、または強誘電体ＲＡＭ（ＦＲＡＭ）。
【００２３】
図２Ａに示される実施形態において、プロセッサ２０２は、システムバス２２０（より詳細に以下に説明される）を介して主メモリ２０４と通信する。図２Ｂは、プロセッサがメモリポートを介して主メモリ２０４と直接的に通信するコンピュータシステム２００の実施形態を示す。たとえば、図２Ｂにおいて、主メモリ２０４はＤＲＤＲＡＭであり得る。
【００２４】
図２Ａおよび２Ｂは、主プロセッサ２０２が、「バックサイド」バスと呼ばれることもある二次バスを介して、キャッシュメモリ２４０と直接的に通信する実施形態を示す。他の実施形態において、主プロセッサ２０２はシステムバス２２０を使用してキャッシュメモリ２４０と通信する。キャッシュメモリ２４０は、一般的に主メモリ２０４よりも早い応答時間を有し、一般的にＳＲＡＭ、ＢＳＲＡＭ、またはＥＤＲＡＭによって提供される。
【００２５】
図２Ａに示される実施形態において、プロセッサ２０２はローカルシステムバス２２０を介して種々のＩ／Ｏデバイス２３０と通信する。ＶＥＳＡ  ＶＬバス、ＩＳＡバス、ＥＩＳＡバス、ＭｉｃｒｏＣｈａｎｎｅｌＡｒｃｈｉｔｅｃｔｕｒｅ（ＭＣＡ）バス、ＰＣＩバス、ＰＣＩ−Ｘバス、ＰＣＩ−Ｅｘｐｒｅｓｓバス、またはＮｕバスを含む種々のバスが、中央処理ユニット２０２をＩ／Ｏデバイスに接続するために使用され得る。Ｉ／Ｏデバイスがビデオディスプレイである実施形態について、プロセッサ２０２はディスプレイと通信するためにＡｄｖａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ（ＡＧＰ）を使用し得る。図２Ｂは、主プロセッサ２０２が、ＨｙｐｅｒＴｒａｎｓｐｏｒｔ、Ｒａｐｉｄ  Ｉ／Ｏ、またはＩｎｆｉｎｉＢａｎｄを介して、Ｉ／Ｏデバイス２３０ｂと直接的に通信する、コンピュータシステム２００の実施形態を示す。図２Ｂはまた、ローカルバスおよび直接通信が混合された実施形態を示す。すなわち、プロセッサ２０２は、Ｉ／Ｏデバイス２３０ｂと直接的に通信しながら、ローカル相互接続バスを使用してＩ／Ｏデバイス２３０ａと通信する。
【００２６】
コンピュータシステム２００において、多岐にわたるＩ／Ｏデバイス２３０が存在し得る。入力デバイスは、キーボード、マウス、トラックパッド、トラックボール、マイクロホン、およびドローイングタブレット（ｄｒａｗｉｎｇ  ｔａｂｌｅｔ）を含む。出力デバイスは、ビデオディスプレイ、スピーカ、インクジェットプリンタ、レーザプリンタ、および昇華型（ｄｙｅ−ｓｕｂｌｉｍａｔｉｏｎ）プリンタを含む。Ｉ／Ｏデバイスは、コンピュータシステム２００のために、次のような大容量記憶装置をも提供し得る。すなわち、ハードディスクドライブ、３．５インチ、５．２５インチディスクまたはＺＩＰディスクを受け入れるためのフロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭドライブ、ＣＤ−Ｒ／ＲＷドライブ、ＤＶＤ−ＲＯＭドライブ、種々のフォーマットのテープドライブ、およびカリフォルニア州Ｌｏｓ  ＡｌａｍｉｔｏｓのＴｗｉｎｔｅｃｈ  Ｉｎｄｕｓｔｒｙ，  Ｉｎｃ．によって製造されるＵＳＢフラッシュドライブ（ＵＳＢ  Ｆｌａｓｈ  Ｄｒｉｖｅ）（登録商標）の一連のデバイスなどのＵＳＢ記憶デバイス。
【００２７】
さらなる実施形態においては、Ｉ／Ｏデバイス２３０は、システムバス２２０と次のような外部通信バスとの間のブリッジであり得る。すなわち、ＵＳＢバス、Ａｐｐｌｅ  Ｄｅｓｋｔｏｐバス、ＲＳ−２３２シリアル接続、ＳＣＳＩバス、ＦｉｒｅＷｉｒｅ（登録商標）バス、ＦｉｒｅＷｉｒｅ（登録商標）８００バス、Ｅｔｈｅｒｎｅｔ（登録商標）バス、ＡｐｐｌｅＴａｌｋ（登録商標）バス、Ｇｉｇａｂｉｔ  Ｅｔｈｅｒｎｅｔ（登録商標）バス、Ａｓｙｎｃｈｒｏｎｏｕｓ  Ｔｒａｎｓｆｅｒ  Ｍｏｄｅバス、ＨＩＰＰＩバス、Ｓｕｐｅｒ  ＨＩＰＰＩバス、ＳｅｒｉａｌＰｌｕｓバス、ＳＣＩ／ＬＡＭＰバス、ＦｉｂｒｅＣｈａｎｎｅｌバス、またはＳｅｒｉａｌ  Ａｔｔａｃｈｅｄ小型コンピュータシステムインターフェースバス。
【００２８】
図２Ａおよび２Ｂに示される種類の汎用デスクトップコンピュータは、システムリソースに対するタスクおよびアクセスのスケジューリングを制御するオペレーティングシステムの制御下で一般的に稼動する。代表的なオペレーティングシステムは、数ある中で次のものを含む。すなわち、ワシントン州ＲｅｄｍｏｎｄのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．によって製造されるＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）、カリフォルニア州ＣｕｐｅｒｔｉｎｏのＡｐｐｌｅ  Ｃｏｍｐｕｔｅｒによって製造されるＭａｃＯＳ（登録商標）、ニューヨーク州ＡｒｍｏｎｋのＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓによって製造されるＯＳ／２（登録商標）、およびユタ州Ｓａｌｔ  Ｌａｋｅ  ＣｉｔｙのＣａｌｄｅｒａ  Ｃｏｒｐ．によって配信される無料で利用可能なオペレーティングシステムであるＬｉｎｕｘ（登録商標）。
【００２９】
クライアントシステム２４と通信するデバイスがモバイルデバイスである実施形態について、クライアントデバイスは次のようなＪＡＶＡ（登録商標）使用可能な携帯電話であり得る。すなわち、イリノイ州ＳｃｈａｕｍｂｕｒｇのＭｏｔｏｒｏｌａ  Ｃｏｒｐ．によって製造される、ｉ５０ｓｘ（登録商標）、ｉ５５ｓｒ（登録商標）、ｉ５８ｓｒ（登録商標）、ｉ８５ｓ（登録商標）、ｉ８８ｓ（登録商標）、ｉ９０ｃ（登録商標）、ｉ９５ｃｌ（登録商標）、またはｉｍ１１０００（登録商標）。日本の京都の京セラ株式会社によって製造される６０３５または７１３５。または韓国のソウルのＳａｍｓｕｎｇ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｃｏ．，Ｌｔｄ．によって製造されるｉ３００またはｉ３３０。クライアントシステムと通信するデバイス２４がモバイルである別の実施形態において、デバイスは、カリフォルニア州ＭｉｌｐｉｔａｓのｐａｌｍＯｎｅ，Ｉｎｃ．によって製造されるＴｕｎｇｓｔｅｎ（登録商標）Ｗ、ＶＩＩ、ＶＩＩｘ、ｉ７０５などのＰａｌｍオペレーティングシステムの制御下で稼動する携帯情報端末（ＰＤＡ）であり得る。さらなる実施形態においては、クライアントシステム４と通信するデバイス２４は、ＰｏｃｋｅｔＰＣオペレーティングシステムの制御下において稼動する、次のような携帯情報端末（ＰＤＡ）であり得る。すなわち、カリフォルニア州Ｐａｌｏ  ＡｌｔｏのＨｅｗｌｅｔｔ−Ｐａｃｋａｒｄ  Ｃｏｒｐｏｒａｔｉｏｎによって製造される、ｉＰＡＱ  ４１５５（登録商標）、ｉＰＡＱ  ５５５５（登録商標）、ｉＰＡＱ  １９４５（登録商標）、ｉＰＡＱ  ２２１５（登録商標）、およびｉＰＡＱ  ４２５５（登録商標）。カリフォルニア州ＷａｌｎｕｔのＶｉｅｗＳｏｎｉｃによって製造されるＶｉｅｗＳｏｎｉｃ  Ｖ３６（登録商標）。またはニューヨーク州Ｎｅｗ  ＹｏｒｋのＴｏｓｈｉｂａ  Ａｍｅｒｉｃａ，Ｉｎｃ．によって製造されるＴｏｓｈｉｂａ  ＰｏｃｋｅｔＰＣ  ｅ４０５。さらに別の実施形態において、クライアントシステム２４と通信するデバイスは、カリフォルニア州ＭｉｌｐｉｔａｓのｐａｌｍＯｎｅ，Ｉｎｃ．によって製造されるＴｒｅｏ  １８０（登録商標）、Ｔｒｅｏ  ２７０（登録商標）、またはＴｒｅｏ  ６００（登録商標）などの組合わせ型ＰＤＡ／電話デバイスである。さらに別の実施形態において、クライアントシステム２４と通信するデバイスは、Ｍｏｔｏｒｏｌａ  Ｃｏｒｐ．によって製造されるＭＰｘ２００（登録商標）などのＰｏｃｋｅｔＰＣオペレーティングシステムの制御下で稼動する携帯電話である。
【００３０】
すでに述べたように、本発明の説明的な実施形態は、クライアントシステム２４と通信するデバイスについて生成されたエミュレートされたプラグアンドプレイイベントのような、プラグアンドプレイイベントおよび他の種類のイベントを、サーバ１２にリダイレクトする。イベントは、プレゼンテーションレベルプロトコルを使用してネットワーク１０を介してリダイレクトされる。図３は、クライアントシステム４と通信するデバイス２４によって引き起こされた検出されたイベントを、サーバの上の既存のユーザセッションにリダイレクトするために、本発明の一実施形態によって辿られるクライアント側のステップのシーケンスのフローチャートである。本明細書に含まれる記述は、検出されたプラグアンドプレイイベント（およびエミュレートされた偽のプラグアンドプレイイベント）のリダイレクションを説明するが、本発明の範囲から逸脱することなく他の種類のイベントもリダイレクトされ得ることが理解されるべきである。
【００３１】
図３におけるクライアント側のステップのシーケンスは、制御（Ｃｏｎｔｒｏｌ）ＶＤ４０がＯＳ抽象化レイヤ３１を用いて、一定のイベントが通知されるコールバックを登録することに始まる（ステップ３００）。コールバックは、イベントを生成する一定のデバイスクラスのみに制御ＶＤ４０が関与するように指定し得る。代替的には、コールバック登録は、制御ＶＤ４０が特定の種類のイベント（たとえばデバイスの到着および取り外し）の場合のみに通知されるように、リクエストし得る。同様に、制御ＶＤ４０は、特定のポートに接続されるデバイスによって生成されるイベントのみを通知されるようにリクエストし得る（たとえばＵＳＢポートに接続されたデバイスについてのみ通知する）。当業者は、コールバック登録において追加のまたは他のパラメータが指定され得ることを認識する。クライアントシステムと通信するデバイスがＵＳＢポートとドッキングされるとき（ステップ３０２）、ＰＮＰマネジャー３４は、ＯＳ抽象化レイヤ３１によってインタセプトされるデバイス到着イベントを発行する（ステップ３０４）。イベント通知は、デバイスについてのＧＵＩＤ（グローバルに一意のＩＤ）、ベンダーＩＤ、製品ＩＤ、イベントの種類およびデバイス名などの情報を含む。ＯＳ抽象化レイヤ３１は、イベント通知をインタセプトするとすぐに、検出されたイベントについて登録が存在するかどうかを決定する。登録が存在する場合には、ＯＳ抽象化レイヤ３１は、制御ＶＤ４０に対してコールバックを実行し、制御ＶＤ４０が登録したイベントの発生を制御ＶＤに知らせる。コールバックは、イベント情報を制御ＶＤ４０に渡す（ステップ３０６）。
【００３２】
制御ＶＤ４０は、コールバックを受信するとすぐに、リダイレクタＶＤ（ＣＣＭ  ＶＤ４２）を識別するテーブルを照会し、リダイレクタＶＤ（ＣＣＭ  ＶＤ）にバインド（Ｂｉｎｄ）リクエストを送信する（ステップ３０８）。ＣＣＭ  ＶＤ４２は、仮想通信チャネル（Ｖｉｒｔｕａｌ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｃｈａｎｎｅｌ）（本明細書においてはＣＯＭコンテキストまたは仮想コンテキストと呼ばれる）に対する論理ＣＯＭポート番号を提供し、それをリクエストにおいて示されたイベント情報（ＧＵＩＤ、ベンダーＩＤ、製品ＩＤ、デバイス名など）にバインドする（ｂｉｎｄ）。バインドされたリクエストは、制御ＶＤ４０に返される（ステップ３１０）。バインディング（ｂｉｎｄｉｎｇ）（イベント情報と、仮想通信チャネル４８に対するＣＯＭコンテキストとの）は、次にサーバ１２に送信される（ステップ３１２）。制御ＶＤ４０は、それぞれのセッションにおける仮想デバイスのマッピングの成功または失敗を示す応答を、サーバ１２から受信する（ステップ３１４）。失敗の場合には、制御ＶＤ４０は、仮想コンテキストをアンバインドする（ｕｎｂｉｎｄ）ように、ＣＣＭ  ＶＤ４２に通知する。成功したマッピング操作の場合には、次に、ＣＣＭ  ＶＤ４２は、ユーザセッション１６、１８および２０において実行する、および仮想コンテキストにおけるリダイレクタＶＤ／ＣＣＭ  ＶＤ４２にアドレス指定されるサーバ１２の上で実行する、アプリケーション（Ａｐｐｌｉｃａｔｉｏｎ）２２からコマンドを受信する。たとえば、コマンドは、クライアントシステムと通信するデバイスに対するバインディング処理において割り当てられた、参照された仮想ＣＯＭポート（ＣＯＭコンテキストによって表される仮想ＣＯＭ番号）を開くコマンドであり得る。ひとたび仮想ＣＯＭポートが開かれると、クライアントシステムと通信するデバイスについての次のＩ／Ｏリクエストは、バインディングにおいて参照された仮想ＣＯＭポートの上で受信される（ステップ３１６）。
【００３３】
図４は、図３において検出されたイベントを処理するために、本発明におけるサーバによって辿られる、ステップのシーケンスの一実施形態のフローチャートである。シーケンスは、サーバ１２の上の制御ＶＤ４６が、バインドされたＰＮＰイベント通知を受信するときに始まる（ステップ３２０）。次に、制御ＶＤは、クライアントシステムと通信するデバイスがセッションの中にマップされるようにリクエストする（ステップ３２２）。マッピングリクエストの詳細は、以下に図５を参照してさらに説明される。マッピングリクエストが失敗した場合には（ステップ３２１）、失敗メッセージがＣＣＭ  ＶＤ４２に送信し返されるので、デバイスはアンバインドされ得る（ステップ３２２）。マッピングリクエストが成功した場合には（ステップ３２１）、ＣＴＬ  ＶＤ４６は現在のセッションの中にＰＮＰイベントをブロードキャストする（ステップ３２４）。別の実施形態においては、ＰｎＰデバイス登録ＡＰＩはサーバ１２の上でインタセプトされ、ＰｎＰイベントについて登録したアプリケーション（ａｐｐｓ）のみが通知される。セッションの中のアプリケーション２２は、ＰＮＰブロードキャストイベントを受信し（ステップ３２６）、イベント通知の中にバインドされた仮想デバイスを参照するサーバＯＳにオープン（Ｏｐｅｎ）コマンドを送信する（ステップ３２８）。サーバＯＳは、Ｉ／Ｏマネジャー５４およびオブジェクトマネジャー５８に援助され、マッピングにおいて確立された記号リンクの構文に基づいて（ステップ３２２）、Ｃｉｔｒｉｘデバイスリダイレクタ（Ｃｉｔｒｉｘ  Ｄｅｖｉｃｅ  Ｒｅｄｉｒｅｃｔｏｒ）５０にオープンコマンドをリダイレクトする（ステップ３２８）。次にＣｉｔｒｉｘデバイスリダイレクタ５０は、再び記号リンクの構文に基づいて、対応するセッションおよびＩ／ＯリダイレクタＶＤ（Ｉ／Ｏ  Ｒｅｄｉｒｅｃｔｏｒ  ＶＤ）にオープンコマンドをリダイレクトする（ステップ３３０）。クライアントシステムと通信するデバイスにコマンドを送信するためにアプリケーション２２によって取られるステップは、以下に図６においてさらに説明される。コマンドは、「オープン」コマンドであり得、特定のＣＯＭ通信ポートに向けられ得る。コマンドは、さらなる処理のためにクライアント側の上のＩ／ＯリダイレクタＶＤ（ＣＣＭ  ＶＤ）４２に転送され、そこでコマンドの実行が試みられる。
【００３４】
サーバ側のプレゼンテーションレベルプロトコルサポーティングアーキテクチャ１４によって従事されるマッピング処理を、以下にさらに詳細に説明する。図５は、受信されたイベント通知を既存のユーザセッションにおける仮想デバイスにマップするために本発明の一実施形態によって辿られる、ステップのシーケンスを示す。シーケンスは、サーバ側の制御ＶＤ４６が、バインドされたＰＮＰイベント通知を受信し、仮想デバイスをユーザセッションの中にマップすることをリクエストした後に始まる（図４のステップ３２０）。ＣＴＬ  ＶＤ４６は、イベント通知における情報を使用して、サーバおよび遠隔クライアントに対して一意の名前を生成する（ステップ３３８）。サーバに対する一意の名前は、イベント通知、ＧＵＩＤ、仮想コンテキスト、またはコンテキストＩＤにおいて受信された情報に基づき得る。たとえば、ＧＵＩＤがＷｉｎＣＥインタフェースクラスである場合には、生成される名前は順番にＷＣＥＵＳＢＳＨｘｘｘであり得、ここでｘｘｘはＣＯＭコンテキストである。遠隔クライアントについての一意の名前は、仮想コンテキスト（ＶＤ名およびコンテキスト）に基づき得る。ＣＴＬ  ＶＤ４６は、ドライバマッピングネットワークプロバイダモジュール５２をロードし、一意の名前を提供する（ステップ３４０）。ネットワークプロバイダモジュール５２は、ドライバマッピングサービスモジュール５６に、ＲＰＣ呼出しをする（ステップ３４２）。ドライバマッピングサービス５６は、仮想デバイスへの経路を生成し、オブジェクトマネジャー５８に、名前情報を使用してユーザセッション１６における仮想デバイスへの記号リンクを作成するようにリクエストする（ステップ３４４）。記号リンクは、セッションにおける内部テーブルの中に入力される（ステップ３４６）。Ｉ／Ｏマネジャー５４は、リダイレクションを実行するために記号リンク情報の最初の部分を後に使用する。サーバ側の制御ＶＤ４６は、次に、仮想デバイスへの記号リンクを含むセッションの中でＰＮＰ通知をブロードキャストする（図４のステップ３２４）。当業者は、制御ＶＤによるイベント通知のブロードキャストが上記に説明されたが、本発明の範囲から逸脱することなく、指定されたイベントの発生を通知されるセッションの中にアプリケーションが登録する、コールバック登録処理もまた採用され得ることを認識する。そのような場合、指定されたイベントの発生の通知を以前にリクエストしたセッションの中のアプリケーションのみが、セッションの中の仮想デバイスのマッピングの後に通知される。
【００３５】
クライアントシステムと通信するデバイスが、ユーザセッション１６、およびセッションの中のイベント通知ブロードキャストにマップされた後で、セッションの中で実行するアプリケーションはイベントに応答することができる。アプリケーション２２は、ＰＮＰイベント通知を受信するとすぐに、デバイスのローカルデバイス名を開くことを試みるので、コマンドおよびデータがデバイスに送信され得る。クライアントシステムと通信するデバイスがＷｉｎＣＥデバイスである場合には、ＡＣＴＩＶＥＳＹＮＣ（登録商標）はＷＳＥＵＳＢＳＨｘｘｘの形式における特定の名前を要求する。ＡＣＴＩＶＥＳＹＮＣ（登録商標）によって一つのみのデバイスがサポートされるので、ＷＳＥＵＳＢＳＨｘｘｘの形式における一意の名前は、本発明において順番に生成される。他の同期化アプリケーションについては、デバイスインタフェースクラスＧＵＩＤおよびＶ−Ｃｏｎｔｅｘｔの組み合わせであって、そこで仮想デバイス名およびデバイスインタフェースクラスの両方が一意である、一意の名前が使用され得る。
【００３６】
図６は、イベント通知に応答するために本発明の一実施形態によって辿られるステップのシーケンスを示すフローチャートである。アプリケーション２２は、ＰＮＰイベント通知を受信するとすぐに、デバイスのローカルデバイス名を開くことを試みるので、コマンドおよびデータがデバイスに送信され得る。シーケンスは、アプリケーション２２がローカルＩ／Ｏマネジャー５４にオープンコマンドを送信することに始まる（ステップ３６０）。Ｉ／Ｏマネジャー５４は、オブジェクトマネジャー５８に名前分解リクエストを送信する（ステップ３６２）。オブジェクトマネジャーは、リダイレクション経路をＩ／Ｏマネジャー５４に返し（ステップ３６４）、Ｉ／Ｏマネジャー５４はオープンコマンドおよびリダイレクション経路をデバイスリダイレクタ５０に転送する（ステップ３６６）。デバイスリダイレクタ５０は、経路を、特定のセッションおよびＩ／ＯリダイレクションＶＤ５０（ＣＣＭ  ＶＤ）に分解する（ステップ３６８）。デバイスリダイレクタ５０は、次に、実行のためにコマンドをＣＣＭ  ＶＤ４２に送信する（ステップ３７０）。たとえば、アプリケーションは仮想ＣＯＭポート３について「オープン」リクエストを送信し得、そのリクエストは実行のためにクライアント側のＩ／ＯリダイレクタＶＤ（ＣＣＭ  ＶＤ４２）に送信される。クライアントＣＣＭ  ＶＤ４２は、仮想ＣＯＭポートにバインドされた実際のデバイスにオープンコマンドを適用することになる。ひとたび仮想ＣＯＭポートが開くと、仮想ＣＯＭポートは、サーバ側のアプリケーション２２と、仮想通信チャネル４８を介してクライアントシステム２４と通信するデバイスとの間で、データを送信するために使用される。本発明の範囲から逸脱することなく、「オープン」以外のコマンドが送信され得ることが理解されるべきである。
【００３７】
デバイスの取り外しは、デバイスの追加と同様に作用する。検出された取り外しイベントは、リリースデバイスリクエストとともに、リダイレクタＶＤ４２に送信される。リダイレクタＶＤ４２は、ＣＯＭコンテキストを通知にバインドする。バインドされたイベントは、サーバに送信され、そこで解析される。サーバにおいて、仮想デバイスインスタンスはユーザセッション１６からアンマップされる。ＭＰＳは、クライアントシステムの上のＣＴＬ  ＶＤにリリースコマンドを送信し返す。ＣＴＬ  ＶＤは、割り当てられたＣＯＭコンテキストをリリースするＣＣＭ  ＶＤにリリースコマンドを転送し、ＣＯＭポートの利用可能性を記録する。
【００３８】
クライアントシステム４と通信するデバイス２４からＰＮＰイベントを検出することに加えて、本発明の説明的な実施形態はまた、プラグアンドプレイイベントをエミュレートし、次にエミュレートされたイベントを上記に概説されたように処理することによって、すでに接続されたデバイスがユーザセッションの中にマップされることを可能にする。図７は、デバイスを既存のユーザセッションの中にマップするために、既に接続されたデバイスについてのプラグアンドプレイイベントをエミュレートするための、本発明の一実施形態によって辿られるステップのシーケンスを示す。シーケンスは、クライアントシステムと通信するデバイスの決定に始まる（ステップ３８０）。これは、通信するデバイスをエミュレートするクライアントシステムのオペレーティングシステムによって決定され得る。次に、各デバイスについて、クライアントシステムはイベントをエミュレートする（ステップ３８２）。コンテキストＩＤは上記に概説されたように各イベントにバインドされ（ステップ３８４）、バインドされたコンテキストＩＤを含むエミュレートされたイベント情報は、制御通信チャネルを介してサーバに送信される（ステップ３８６）。次に、デバイスをユーザセッションの中にマップした後で、クライアントシステムは、デバイスについての仮想ドライバに向けられたユーザセッションにおいて実行中のアプリケーションインスタンスから、コマンドを受信し得る（ステップ３８８）。
【００３９】
本発明の説明的な実施形態はまた、サーバの上のデータの収集と、クライアントシステムと通信するデバイスの上のデータの収集との同期化を可能にする。たとえば、ＰＤＡの上のユーザのＯＵＴＬＯＯＫ（登録商標）（Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎの）アプリケーションの中のデータは、ＯＵＴＬＯＯＫ（登録商標）アプリケーションをＰＤＡが通信しているクライアントシステムからのデータと同期化されるのではなく、ユーザセッションの中で実行する同期化アプリケーションを使用して、サーバの上のユーザのＯＵＴＬＯＯＫ（登録商標）データと同期化され得る。
【００４０】
図８は、既存のユーザセッションの中のサーバの上のデータの収集と、クライアントシステムと通信するデバイスの上のデータの収集とを同期化するために、本発明の一実施形態によって辿られるステップのシーケンスを示す。シーケンスは、上述のように、クライアントシステムにおける仮想コンテキストにバインドされる、クライアントシステムと通信するデバイスの存在の通知と共に始まる（ステップ４００）。次にバインディングはサーバに送信され（ステップ４０２）、そこでデバイスはユーザセッションにマップされる（ステップ４０４）。次に、ユーザセッションにおいて実行している同期化アプリケーションのインスタンスが、ユーザによって選択される。同期化アプリケーションは、Ｍｉｃｒｏｓｏｆｔ  ＣｏｒｐｏｒａｔｉｏｎのＡＣＴＩＶＥＳＹＮＣ（登録商標）、ＰａｌｍＯｎｅのＨＯＴＳＹＮＣ、または別の種類の同期化アプリケーションであり得る。次に、同期化アプリケーションは、クライアントアプリケーションと通信するデバイス２４の上のデータの指定された収集を、ユーザセッションからアクセス可能なデータの収集と比較する（ステップ４０８）。たとえば、ＡＣＴＩＶＥＳＹＮＣ（登録商標）は、クライアントシステム４と通信するデバイス２４上のＯＵＴＬＯＯＫ（登録商標）におけるカレンダーを、セッションの中のユーザデスクトップの上のＯＵＴＬＯＯＫ（登録商標）のインスタンスにおけるカレンダーと同期化するために使用され得る。ひとたびデータの収集が比較されると、データの収集はアプリケーションによって同期化される（ステップ４１０）。
【００４１】
ＡｃｔｉｖｅＳｙｎｃ（登録商標）は、ＷｉｎＣＥベースのＰＤＡデバイス（ＰｏｃｋｅｔＰＣ）に対して同期化およびデバイス管理を提供する、標準的なＭｉｃｒｏｓｏｆｔのアプリケーションである。
【００４２】
ＡｃｔｉｖｅＳｙｎｃ（登録商標）は、意識されない（ｕｎａｗａｒｅ）セッション（マルチユーザ）および意識されないマルチホスト（マルチコンピュータ）の両方である。ＡｃｔｉｖｅＳｙｎｃ（登録商標）プロセスは、プロセス自身と他のプロセス（たとえばｅｘｐｌｏｒｅｒ．ｅｘｅ、ｏｕｔｌｏｏｋ．ｅｘｅ）との間のプロセス間通信（ＩＰＣ）のためのウィンドウソケット（ｗｉｎｄｏｗ  ｓｏｃｋｅｔ）を使用する。ソケットは、ＡｃｔｉｖｅＳｙｎｃ（登録商標）プロセスの異なるスレッドの間の通信にも使用される。ローカルホストループバックアドレス（１２７．０．０．１）およびすべてのインタフェース（０．０．０．０、すなわちＩＮＡＤＤＲ＿ＡＮＹ）の組み合わせが使用される。さらに、ＡｃｔｉｖｅＳｙｎｃ（登録商標）はたとえスタートアップから取り除かれても、次回に起動されたときに自分自身をスタートアップにおいて再生するので、ＡｃｔｉｖｅＳｙｎｃ（登録商標）はコンソールの上でつねに実行する。フッキングすることなしに、ＡｃｔｉｖｅＳｙｎｃ（登録商標）が複数のユーザセッションにおいて実行するときには、ソケット接続は衝突する（ｃｏｌｌｉｄｅ）。たとえ単一のＡｃｔｉｖｅＳｙｎｃ（登録商標）インスタンスが遠隔セッションにおいて実行していても、ローカルコンソールのＡｃｔｉｖｅＳｙｎｃ（登録商標）インスタンスとの衝突は発生する。したがって、本発明の説明的な実施形態は、衝突を回避するためにソケット呼出しをフッキングする。
【００４３】
ＡｃｔｉｖｅＳｙｎｃ（登録商標）プロセスおよびｅｘｐｌｏｒｅｒ．ｅｘｅ（ＡｃｔｉｖｅＳｙｎｃ（登録商標）プロセスのみと通信する）のウィンドウソケット通信は、衝突を回避するために本発明によってフッキングされる。セッションにおいて、特殊なＩＰアドレスフッキング、および仮想ループバックアドレスフッキングが実行される。仮想ループバックアドレスフッキングは、ＵＬＯＮＧとして表されるローカルホストループバックアドレス（１２７．０．０．１）に、セッションＩＤを追加する。仮想ループバックアドレスは、サーバごとに一つのみのアドレスについて一意であり、かつ一意でなければならない。仮想ループバックアドレスはまた、仮想ＩＰアドレスとしても使用される。仮想ＩＰアドレスフッキングは、ゼロでないポートについてのみ、すなわちＡｃｔｉｖｅＳｙｎｃ（登録商標）のローカル通信についてのみ、実行される。ソケット通信は、コンソールの上においてもフッキングされる。
【００４４】
本発明の説明的な実施形態によって実行されるフッキングの例を以下に述べる。
【００４５】
プロセスについて構成される場合には、仮想ループバックアドレス、および／または仮想ＩＰアドレスフッキング／変更は、以下のインタセプトされる方法のすべてにおいて行われ得る。
【００４６】
Ｂｉｎｄ
Ｖｉｒｔｕａｌ  ｌｏｏｐ−ｂａｃｋ：ローカルアドレスがローカルホストループバックアドレス（１２７．０．０．１）である場合には、仮想ループバックアドレスと置換される。
【００４７】
Ｖｉｒｔｕａｌ  ＩＰ：ローカルアドレスがＩＮＡＤＤＲ＿ＡＮＹ（０．０．０．０、すべてのインタフェース）である場合には、仮想ＩＰアドレスと置換される。
【００４８】
ほとんどの実装において、（ローカル）ポートはチェックされないが、ポートがゼロでないことに依存して（または依存せずに）置換を行なうために、構成が追加され得る。
【００４９】
Ｃｏｎｎｅｃｔ
Ｖｉｒｔｕａｌ  ｌｏｏｐ−ｂａｃｋ：遠隔アクセスがローカルホストループバックアドレスである場合には、仮想ループバックアドレスと置換される。
【００５０】
Ｖｉｒｔｕａｌ  ＩＰ：Ｃｏｎｎｅｃｔ呼出し（ＩＮＡＤＤＲ＿ＡＮＹ）においてローカルアドレスが指定されない場合には、ローカルアドレスとしての仮想ＩＰアドレスに対してフォース−Ｂｉｎｄが行なわれる。
【００５１】
（ローカル）ポートは通常はチェックされないが、ポートがゼロであることに依存して（または依存せずに）置換を行うために、構成が追加されることができる（ローカルポートはゼロであるので、Ｂｉｎｄは影響されない）。ループバックアドレスフッキングの場合には、Ｂｉｎｄは強制されない（明示的なＢｉｎｄがない）。なぜなら、さもなければ、Ｗｉｎｓｏｃｋ  ＡＰＩはエラー「Ｈｏｓｔ  Ｕｎｒｅａｃｈａｂｌｅ」を返すからである。
【００５２】
ＳｅｎｄＴｏ
Ｃｏｎｎｅｃｔに同じ。
【００５３】
Ａｃｃｅｐｔ
Ｖｉｒｔｕａｌ  ｌｏｏｐ−ｂａｃｋ：遠隔アドレスがプロセスについて仮想ループバックアドレスである場合には、ローカルホストループバックアドレスに置換され得る。
【００５４】
Ｖｉｒｔｕａｌ  ＩＰ：アクションなし。
【００５５】
ポートは通常はチェックされないが、ポートがゼロでないことに依存して（または依存せずに）置換を行うために、構成が追加されることができる。
【００５６】
ＧｅｔＰｅｅｒＮａｍｅ（遠隔ソケットについて）
Ａｃｃｅｐｔに同じ
ＧｅｔＳｏｃｋＮａｍｅ（ローカルソケットについて）
Ｖｉｒｔｕａｌ  ｌｏｏｐ−ｂａｃｋ：ＡｃｃｅｐｔおよびＧｅｔＰｅｅｒＮａｍｅに同じであるが、ローカルアドレスに関してである。
【００５７】
Ｖｉｒｔｕａｌ  ＩＰ：アクションなし。すなわち、ＡｃｃｅｐｔおよびＧｅｔＰｅｅｒＮａｍｅに同じ。
【００５８】
ｅｘｐｌｏｒｅｒ．ｅｘｅは、セッションにおいてもフッキングされるので、ＡｃｔｉｖｅＳｙｎｃ（登録商標）とのｅｘｐｌｏｒｅｒ．ｅｘｅのローカルホストループバックソケット通信のみに影響する。他のプロセスとの通信ならびにｅｘｐｌｏｒｅｒ．ｅｘｅの遠隔ソケット通信には影響しない。
【００５９】
コンソールの上で特殊な仮想ＩＰアドレスフッキングが実行されるので、ポートが０（ゼロ）でない場合には、ＩＮＡＤＤＲ＿ＡＮＹはローカルホストループバックアドレス（ＳＩＤ＝０に対する仮想ループバックアドレスと同じ１２７．０．０．１）に置換される（ｓｕｂｓｔｉｔｕｔｅｄ）。
【００６０】
当業者は、本発明の範囲から逸脱することなく、上記に概説されたものへの追加または代用として、他のフッキング操作が実行され得ることを認識する。代替的には、本発明の範囲から逸脱することなく、ＡＣＴＩＶＥＳＹＮＣ（登録商標）ループバック発行（ｉｓｓｕｅ）をアドレス指定する代替的な方法として、使用されないポートが、目標とされるポートと置換され得る。
【００６１】
既に説明されたクライアントサーバアーキテクチャに加えて、本発明の説明的な実施形態は、セッションとネットワークを介して接続されたクライアントシステムと通信するデバイスが、プロキシクライアントをホストしているサーバの上で実行する「パススルー」アーキテクチャを可能にする。図９Ａは、クライアントシステム５０１に接続された、ＷｉｎＣＥ使用可能なＰＤＡ５００を示す。クライアントシステム５０１は、サーバ５１０の上でホストされるセッション５０５において実行するプロキシクライアント５２０にアクセスする。クライアントシステム５０１は、サーバ５１０との制御ＶＤ５０３およびＩ／ＯリダイレクタＶＤ５０４を確立するＩＣＡクライアントであり得る。プロキシクライアント５２０は、第２のサーバ５５０の上で実行する別のセッション５６０にネットワークを介して接続される。プロキシクライアント５２０は、第２のサーバ５５０との制御仮想チャネル５３０およびＩ／ＯリダイレクタＶＤ５４０を確立するＩＣＡクライアントであり得る。アプリケーション５７０のインスタンスは、セッション５６０の中で実行する。ＷｉｎＣＥ  ＰＤＡ５００は、上記に概説されたメカニズムと整合性のある第２のサーバ５５０の中にマップされ得る。
【００６２】
同様に、図９Ｂは、プロキシクライアント、およびアプリケーションのインスタンスを実行するユーザセッションの両方が、同一のサーバによってサポートされる、代替的なアーキテクチャを示す。図９Ｂにおいて、デバイス６００はクライアントシステム６０１と通信し、クライアントシステム６０１はサーバ６１０の上で実行するセッション６０５とネットワークを介して接続される。セッション６０５は、同一のサーバ６１０の上で実行するユーザセッション６３０に接続されるプロキシクライアント６２０を実行する。ユーザセッション６３０は、実行するアプリケーション６４０のインスタンスを含む。デバイス６００は、サーバ６１０の上のユーザセッション６３０の中に、プロキシクライアント６２０を介してマップされ得る。
【００６３】
別の実施形態において、図９Ｃは、プレゼンテーションレベルプロトコルサポーティングアーキテクチャを使用することなく実装される、本発明の一実施形態のブロック図である。図９Ｃにおいて、デバイス７００はクライアントシステム７１０と通信し、クライアントシステム７１０はネットワークを介してサーバ７２０に接続される。サーバ７２０は、実行するアプリケーション７４０をホストする。デバイス７００において発生するイベントは、サーバ７２０およびアプリケーション７４０にリダイレクトされる。当業者は、本発明の範囲の範囲内において、追加の実装および代替的なアーキテクチャも可能であることを認識する。
【００６４】
別の実施形態において、本発明は、サーバセッションにおけるデバイス列挙方法のインタセプション（フッキングされたＤＬＬを介して実行され得る）、およびサーバセッションにおいて実行する制御ＶＤ４６への方法のリダイレクション（ＲＰＣ呼出しを介して実行され得る）を含む（図１Ｂを参照）。リダイレクトされた方法は、仮想デバイスマッピングの内部的に保持されたテーブルにおける情報に基づいて、サーバコンソールそのものに接続されたデバイスではなく、それぞれのセッションにおいてマップされたデバイスのみを列挙することになる。したがって、サーバセッションにおいて実行するアプリケーションは、既にアプリケーションの起動前にマップされたデバイスを列挙することができる。すなわち、アプリケーションがデバイスＰｎＰイベント通知を見逃したデバイスである。
【００６５】
本明細書においては、仮想化するシリアルチャネルおよびＣＯＭポートに関して同期化プロセスが説明および図示されたが、同期化プロセスの一部として、本明細書において説明された態様において他の種類の通信が仮想化され得ることが、当業者によって認識される。たとえば、代替的な実施形態において同期化通信を実行するためにＵＳＢ通信が仮想化され得る。
【００６６】
本発明は、一つ以上の製品の上または中において具体化される一つ以上のコンピュータ読出し可能なプログラムとして提供され得る。製品は、フロッピー（登録商標）ディスク、ハードディスク、コンパクトディスク、デジタル汎用ディスク、フラッシュメモリカード、ＰＲＯＭ、ＲＡＭ、ＲＯＭ、または磁気テープであり得る。一般的に、コンピュータ読出し可能なプログラムは任意のプログラミング言語において実装され得る。使用されることができる言語のいくつかの例は、Ｃ、Ｃ＋＋（登録商標）、Ｃ＃（登録商標）、またはＪＡＶＡ（登録商標）を含む。ソフトウェアプログラムは、一つ以上の製品の上または中にオブジェクトコードとして格納され得る。
【００６７】
本発明は特定の好ましい実施形態に関して示され説明されたが、特許請求の範囲によって定義される本発明の精神および範囲から逸脱することなく、形態および詳細において種々の変更がなされ得ることが、当業者によって理解されるべきである。
【図面の簡単な説明】
【００６８】
【図１Ａ】図１Ａは、本発明の説明的な実施形態を実行するうえで適切な環境の一実施形態のブロック図である。
【図１Ｂ】図１Ｂは、図１Ａの環境をより詳細に示すブロック図である。
【図２Ａ】図２Ａは、本発明に関して有用なコンピュータの実施形態を示すブロック図である。
【図２Ｂ】図２Ｂは、本発明に関して有用なコンピュータの実施形態を示すブロック図である。
【図３】図３は、プレゼンテーションレベルプロトコルを使用して、クライアントシステムにおいて検出されたデバイス生成のイベントをサーバシステムにリダイレクトするために、本発明によって辿られるステップのシーケンスの一実施形態のフローチャートである。
【図４】図４は、図３において検出されたイベントを処理するために、本発明におけるサーバによって辿られるステップのシーケンスの一実施形態のフローチャートである。
【図５】図５は、仮想デバイスをユーザセッションにマップするために、本発明によって辿られるステップのシーケンスの一実施形態のフローチャートである。
【図６】図６は、セッションの中で実行するアプリケーションインスタンスから、ユーザセッションにマップされたクライアントシステムと通信する仮想デバイスに対してコマンドを送信するために、本発明によって辿られるステップのシーケンスの一実施形態のフローチャートである。
【図７】図７は、プレゼンテーションレベルプロトコルを使用して、クライアントシステムにおけるデバイス生成のイベントをサーバシステムに対してエミュレートおよびリダイレクトするために、本発明によって辿られるステップのシーケンスの一実施形態のフローチャートである。
【図８】図８は、クライアントシステムと通信するデバイスの上のデータの収集を、既存のユーザセッションの中のサーバの上のデータの収集と同期化するために、本発明の一実施形態によって辿られるステップのシーケンスのフローチャートである。
【図９Ａ】図９Ａは、パススルー環境におけるプロキシクライアントの使用を示す、本発明の一実施形態のブロック図である。
【図９Ｂ】図９Ｂは、パススルー環境におけるプロキシクライアントの使用を示す、本発明の別の実施形態のブロック図であり、プロキシクライアントはユーザセッションをホストするサーバの上に位置される。
【図９Ｃ】図９Ｃは、プレゼンテーションレベルプロトコルサポーティングアーキテクチャを使用することなく実装される、本発明の一実施形態のブロック図を示す。
【図１Ａ】
2008516309.tif 000003
【図１Ｂ】
2008516309.tif 000004
【図２Ａ】
2008516309.tif 000005
【図２Ｂ】
2008516309.tif 000006
【図３】
2008516309.tif 000007
【図４】
2008516309.tif 000008
【図５】
2008516309.tif 000009
【図６】
2008516309.tif 000010
【図７】
2008516309.tif 000011
【図８】
2008516309.tif 000012
【図９Ａ】
2008516309.tif 000013
【図９Ｂ】
2008516309.tif 000014
【図９Ｃ】
2008516309.tif 000015
【国際調査報告】
2008516309.tif 000016
2008516309.tif 000017
2008516309.tif 000018