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