(57)【要約】ユーザモードベースのリモートデスクトッププロトコル（ＲＤＰ）コード化アーキテクチャのために、技術を開示する。ユーザモードデスクトップアプリケーション、およびユーザモード仮想チャネルアプリケーションは、ユーザモード・セッション空間において起動する。仮想チャネルアプリケーションからの仮想チャネルデータは、マーシャルされ、ユーザモード・システム空間において処理するＲＤＰエンコーダプロセスに送信される。そこで、仮想チャネルデータは、ＲＤＰ・プロトコルデータユニット（ＰＤＵ）に変換され、リモートクライアントに、通信ネットワーク経由で送信される。デスクトップアプリケーションからのグラフィックデータは、カーネルモード・セッション空間におけるディスプレイドライバに送信され、その後、グラフィックデータをマーシャルするグラフィックリフレクタへ、そして、グラフィックデータを、同様の変換のため、ＲＤＰエンコーダに送信する。
2012511777.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータのユーザモード・アドレス空間においてグラフィックデータをコード化する方法であって、
クライアントからの要求に対応するグラフィックデータを、ユーザモード・セッション空間（３２４ａ）において実行するユーザアプリケーションから、カーネルモード（３２４ｂ）において実行するディスプレイドライバに送信することと、
前記グラフィックデータを、ユーザモード・システム空間（３２４ｃ）において実行する、リモートデスクトッププロトコル（ＲＤＰ）エンコーダプロセス（３１２）に送信することと、
前記グラフィックデータを、ＲＤＰエンコーダプロセス（３１２）からクライアント（３１８）に、通信ネットワーク上で、送信することと
を備えたことを特徴とする方法。
【請求項２】
前記グラフィックデータは、前記ＲＤＰエンコーダプロセスに共有メモリ機構を介して送信されることを特徴とする請求項１に記載の方法。
【請求項３】
前記グラフィックデータを、前記ＲＤＰエンコーダプロセスに送信する前に、前記グラフィックデータをマーシャルすることをさらに備えたことを特徴とする請求項２に記載の方法。
【請求項４】
前記ユーザアプリケーションは、前記コンピュータの仮想マシン（ＶＭ）上で実行するゲスト・オペレーティングシステム（ＯＳ）のユーザモード・セッション空間において実行し、前記ディスプレイドライバは、前記ゲストＯＳのカーネルモード・セション空間において実行することを特徴とする請求項１に記載の方法。
【請求項５】
前記ディスプレイドライバは、カーネルモード・セッション空間において実行することを特徴とする請求項１に記載の方法。
【請求項６】
前記グラフィックデータは、グラフィックデバイスインターフェース（ＧＤＩ）フォーマット、Ｄｅｓｋｔｏｐ  Ｗｉｎｄｏｗｓ  Ｍａｎａｇｅｒ（ＤＷＭ）フォーマット、またはＤｉｒｅｃｔＸ（ＤＸ）フォーマットのいずれかのデータを備えたことを特徴とする請求項１に記載の方法。
【請求項７】
前記クライアントからの要求に対応する仮想チャネルデータを、ユーザモード・セッション空間において実行する仮想チャネルアプリケーションから前記ＲＤＰエンコーダプロセスに送信することと、  
前記仮想チャネルデータを、前記ＲＤＰエンコーダプロセスから前記クライアントに、通信ネットワーク上で送信することと
をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項８】
前記仮想チャネルデータは、前記ＲＤＰエンコーダプロセスに名前付きパイプを介して送信されることを特徴とする請求項７に記載の方法。
【請求項９】
前記仮想チャネルデータを前記ＲＤＰエンコーダプロセスに送信する前に、前記仮想チャネルデータをマーシャルすることをさらに備えたことを特徴とする請求項８に記載の方法。
【請求項１０】
前記仮想チャネルデータは、前記グラフィックデータに対応することを特徴とする請求項７に記載の方法。
【請求項１１】
前記ＲＤＰエンコーダプロセスは、前記グラフィックデータに関するセットから少なくとも１つを処理し、前記セットは、
前記グラフィックデータをフレーム化することと、
前記グラフィックデータを圧縮することと、
前記グラフィックデータを暗号化することと
を備えたことを特徴とする請求項１に記載の方法。
【請求項１２】
前記グラフィックデータを、前記ＲＤＰエンコーダプロセスに送信する前に、前記グラフィックデータを、前記ディスプレイドライバによって前記ＲＤＰエンコーダプロセスが認識できる、少なくとも１つのコマンドにコード化することをさらに備えたことを特徴とする請求項１に記載の方法。
【請求項１３】
コンピュータの前記ユーザモード・アドレス空間においてグラフィックデータをコード化するシステムであって、
プロセッサ（２１）と、
ユーザモード・セッション空間（３２６ａ）において実行するユーザアプリケーション（３０２ａ）から、グラフィックデータを受信するように構成されるカーネルモード空間（３２６ｂ）において実行するディスプレイドライバと、
前記ディスプレイドライバから、前記グラフィックデータを受信し、
前記グラフィックデータをコード化し、
前記グラフィックデータに対応する前記コード化されたデータを、通信ネットワーク経由でクライアント（３１８ａ）に伝送するように構成されるユーザモード・システム空間（３２４ｃ）において実行するリモートデスクトッププロトコル（ＲＤＰ）エンコーダ（３１２ａ）と
を備えたことを特徴とするシステム。
【請求項１４】
前記ＲＤＰエンコーダは、
ユーザモード・セッション空間において実行する仮想チャネルアプリケーションから仮想チャネルデータを受信し、
前記仮想チャネルデータをコード化し、
前記コード化された仮想チャネルデータを、前記通信ネットワーク経由で前記クライアントに伝送する
ようにさらに構成されることを特徴とする請求項１３に記載のシステム。
【請求項１５】
前記ＲＤＰエンコーダは、前記仮想チャネルデータを、名前付きパイプを備えた仮想チャネルリフレクタ経由で受信するようにさらに構成されることを特徴とする請求項１４に記載のシステム。
【請求項１６】
前記ＲＤＰエンコーダは、
前記グラフィックデータを、グラフィックリフレクタ経由で受信するようにさらに構成され、前記グラフィックリフレクタは、共有メモリを備えたことを特徴とする請求項１３に記載のシステム。
【請求項１７】
前記ユーザアプリケーションは、前記コンピュータの仮想マシン（ＶＭ）上で実行するゲスト・オペレーティングシステム（ＯＳ）のユーザモード・セッション空間において実行し、前記ディスプレイドライバは、前記ゲストＯＳのカーネルモード・セッション空間において実行することを特徴とする請求項１３に記載のシステム。
【請求項１８】
前記エンコードされたグラフィックデータは、リモートデスクトッププロトコル（ＲＤＰ）フォーマットにおけるグラフィックデータを備えたことを特徴とする請求項１３に記載のシステム。
【請求項１９】
プロセッサ上で実行されると動作を処理し、コンピュータのユーザモード・アドレス空間においてグラフィックデータをコード化するコンピュータ可読命令を備えたコンピュータ可読記憶媒体であって、前記動作は、
クライアント（３１８ａ）からの要求に対応するグラフィックデータを、ユーザモード・セッション空間（３２６ａ）において実行するユーザアプリケーション（３０２ａ）から、カーネルモード（３２６ａ）において実行するディスプレイドライバに送信することと、
前記グラフィックデータを、前記ディスプレイドライバによって、ＲＤＰエンコーダプロセスによって認識可能なフォーマットにおける少なくとも１つのグラフィックコマンドに変換することと、
各ＰＤＵをマーシャルすることと、
マーシャルされた各ＰＤＵを、共有メモリを備えたグラフィックリフレクタ経由で、ユーザモード・システム空間において実行する前記ＲＤＰエンコーダプロセスに送信することと、
各ＰＤＵをアンマーシャルすることと、
前記ＲＤＰエンコーダプロセスによって、各ＰＤＵを圧縮することと、
圧縮された各ＰＤＵを、前記ＲＤＰエンコーダプロセス（３１２ａ）から前記クライアント（３１８ａ）に通信ネットワーク上で送信することと、
ユーザモード・セッション空間（３２６ａ）において実行する仮想チャネルアプリケーション（３２０ａ）からの前記クライアントからの要求に対応する仮想チャネルデータをマーシャルすることと、
前記マーシャルされた仮想チャネルデータを、前記ＲＤＰエンコーダプロセス（３１２ａ）に、名前付きパイプを備えた仮想チャネルリフレクタ経由で送信することと、
前記仮想チャネルデータをアンマーシャルすることと、
前記仮想チャネルデータを、少なくとも１つの仮想チャネルＲＤＰ  ＰＤＵに変換することと、
各仮想チャネルＲＤＰ  ＰＤＵを圧縮することと、
圧縮された各仮想チャネルＲＤＰ  ＰＤＵを、前記ＲＤＰエンコーダプロセスから前記クライアント（３１８ａ）に通信ネットワーク上で送信することと
を備えたことを特徴とするコンピュータ可読記憶媒体。
【請求項２０】
前記ユーザアプリケーションは、前記コンピュータの仮想マシン（ＶＭ）上で実行するゲスト・オペレーティングシステム（ＯＳ）のユーザモード・セッション空間において実行し、前記ディスプレイドライバは前記ゲストＯＳのカーネルモード・セッション空間において実行する
ことを特徴とする請求項１９に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ユーザモードベースのリモートデスクトッププロトコル（ＲＤＰ）コード化アーキテクチャに関する。
【背景技術】
【０００２】
Ｗｉｎｄｏｗｓ（登録商標）ファミリーにおける一部のオペレーティングシステムは、その機能を介して、ユーザが、他のコンピュータ上で動作中のアプリケーション上のユーザインターフェースとリモートで対話できる機能を提供する。このような機能は、リモートデスクトップ、またはターミナルサービスとして知られている。このような機能の例として、ＷＩＮＤＯＷＳ  ＴＥＲＭＩＮＡＬ  ＳＥＲＶＥＲ、またはリモートデスクトッププロトコル（ＲＤＰ）がある。これらの機能は、ＲＤＰプロトコルのコード化を担うコードが、カーネルモードドライバセットにより実行されるという事実の結果、短所を有することがある。これらのカーネルモードドライバは一般に、このようなドライバがプロトコル用にコード化されることになるデータに容易にアクセスできるため、使用されてきた。しかし、このようなドライバは、サービス提供される機能が固定的で、開発、メンテナンス、または機能を拡張することが非常に難しい。そのために、前記機能をユーザモードプロセス上で実行することで、これらの制限を緩和することができる。
【発明の概要】
【０００３】
本発明の一実施形態は、ユーザモードベースのリモートデスクトッププロトコル（ＲＤＰ）コード化アーキテクチャを含む。本実施形態において、データは、セッション空間プロセスから抽出され、コード化されるためにシステム空間ユーザモードプロセスにマーシャルされる(（データ）変換される、marshaled)。本実施形態において、プロセスは、ユーザモード・セッション空間、カーネルモード・セッション空間、およびユーザモード・システム空間の各々において実行する。
【０００４】
ユーザモード・セッション空間におけるユーザモード・デスクトップアプリケーション操作からのグラフィックデータは、カーネルモード・セッション空間におけるディスプレイドライバ操作を介して、送信される。そのドライバは、グラフィックデータを、データをマーシャルするカーネルモード・セッション空間におけるグラフィックリフレクタに送信する。グラフィックリフレクタは、グラフィックデータを、ユーザモード・システム空間におけるＲＤＰエンコーダプロセスに送信する。
【０００５】
同様に、ユーザモード・セッション空間におけるユーザモード仮想チャネルアプリション操作からの仮想チャネルデータは、データをマーシャルするユーザモード・セッション空間における仮想チャネルリフレクタを介して、送信される。仮想チャネルリフレクタは、まとめられた仮想チャネルデータを、ＲＤＰエンコーダプロセスに送信する。
【０００６】
ＲＤＰエンコーダプロセスは、これらの種類のデータの両方を受け入れ、これらのデータをＲＤＰ・プロトコルデータ単位(RDP protocol data units)（ＰＤＵ）にコード化し、これらの単位を、本技術を実行するコンピュータとＲＤＰセッションのやり取りをするクライアントに送信する。
【０００７】
本解決法は、セッション空間からの仮想チャネルデータ、およびグラフィックデバイスインターフェース（ＧＤＩ）を効率的にマーシャルする機構およびアーキテクチャを、システム空間内のユーザモード・コンテキストにおいて実行しているプロセスに、提供する。これは、プロトコルコード化が、単一のマシン全体のユーザモード・コンポーネントにおいて実行されるところで、ターミナルサービス実行を可能にする。
【０００８】
これらの技術は、単一のオペレーティングシステム（ＯＳ）上で実行しているセッション、または、ホストＯＳを有するホストマシン上のそのＯＳによって提供された仮想マシン（ＶＭ）内のゲストＯＳ上で実行されているセションに適用できる。後者の実施形態の場合には、本技術は、複数のこのようなゲストＯＳに適用できる。
【０００９】
一実施形態において、グラフィックデータは、低オーバヘッドの共有メモリ機構を介してマーシャルされ、仮想チャネルデータは、名前付きパイプを介してマーシャルされる。名前付きパイプは、任意の既存ターミナルサーバ仮想チャネルのアプリケーションプログラミングインターフェース（ＡＰＩｓ）のための動作を保持するために使用できるが、一方、一般的な高速共有メモリ機構は、このような名前付きパイプが、このような動作を保持する必要のないところで使用できる。
【００１０】
上記の技術は、デバイスドライバインターフェース、またはセッションアプリケーションスレッドに頼らない、単一のユーザモード・システム空間プロセス（ＲＤＰエンコーダプロセス）を介して、グラフィックおよびデータ出力を制御できるようにする。すなわち、これらの技術を実行するために使用されるスレッドの数は、性能で最適化された数で知られ、限定され、および動作し続けられることができる。
【００１１】
上記プロセス、および類似のプロセスを処理するシステム、方法、およびコンピュータ可読記憶媒体を開示する。
【００１２】
１つまたは複数の本開示の様々な態様は、本開示の本願明細書に参照された態様を達成する回路構成および／またはプログラミングを含むことができるが、これらに限定されないことを、当業者であれば十分に理解できる。回路構成および／またはプログラミングは、実質的には、システム設計者の設計上の選択により、本願明細書に参照される態様を達成するよう構成された、ハードウェア、ソフトウェア、および／またはファームウェアの任意の組み合わせとすることができる。
【００１３】
上述は、概要であり、それゆえに、必然的に、詳細の省略、簡易化、および一般化を含む。当業者は、本概要は、一例に過ぎず、何らかの限定を意図されるものでないことを十分に理解できるだろう。
【図面の簡単な説明】
【００１４】
【図１】本開示の態様を実行することができるコンピュータシステムの例を示す図である。
【図２】カーネルモードベースのターミナルサービスアーキテクチャの例を示す図である。
【図３】ユーザモードベースのターミナルサービスアーキテクチャの例を示す図である。
【図３Ａ】ユーザモードベースのターミナルサービスアーキテクチャの別の例を示す図である。
【発明を実施するための形態】
【００１５】
本開示の実施形態は、１つまたは複数のコンピュータ上で実装できる。図１および以下の考察は、そこで本開示を実装できる適切なコンピューティング環境の簡単な概要を提供しようとするものである。当業者は、図１のコンピュータシステムのコンポーネントの一部または全部を使用し、図２、図３、および図３Ａのコンピュータを達成できることを、十分に理解できる。
【００１６】
本開示を通じて使用される回路構成という用語は、専用ハードウェアコンポーネント、例えばハードウェア割り込みコントローラ、ハードドライブ、ネットワークアダプタ、グラフィックプロセッサ、および音声コーデックなどを含むことができる。一部または他の実施形態において、回路構成は、ファームウェアにより、またはスイッチを設定することにより、機能を処理するよう構成されたマイクロプロセッサを含むことができる。一部または他の実施形態の例において、回路構成は、１つまたは複数の論理プロセッサ、例えばマルチコアの一般的な処理装置の１つまたは複数のコアを含むことができる。本例における論理プロセッサは、メモリ、例えばＲＡＭ、ＲＯＭ、ファームウェア、および／または仮想メモリからロードされる論理回路を実現するソフトウェア命令によって、構成することができる。回路構成が、ハードウェアおよびソフトウェアの組み合わせを含む実施形態の例において、実装者は、その後に、論理プロセッサによって処理することができる機械可読コードにコンパイルされる回路構成を実現するソースコードを書くことができる。当業者は、技術の最先端が発展して、ハードウェア、ソフトウェア、またはハードウェア／ソフトウェアの組み合わせの間の違いが小さくなっていることを十分に理解することができる。そのため、固有の機能を達成するソフトウェアに対してハードウェアの選定は、実装者に任せられる設計上の選択となる。すなわち、当業者は、ソフトウェアプロセスを、等価のハードウェア構造に変換できることを十分に理解できる。また、ハードウェア構造は、自身を、等価のソフトウェアプロセスに変換できる。したがって、ソフトウェア実装に対してハードウェア実装の選定は、実装者に任せされる設計上の選択の１つとなる。
【００１７】
図１を次に参照して、一般的な汎用コンピューティングシステムを示す。一般的な汎用コンピューティングシステムは、汎用処理装置２１を含む従来のコンピュータ２０、または同種のものを含むことができる。汎用処理装置２１は、１つまたは複数の論理プロセッサ、システムメモリ２２、およびシステムバス２３を含むことができる。システムバス２３は、システムメモリを含む様々なシステムコンポーネントを、処理装置２１と接続する。システムバス２３は、任意のいくつかのタイプのバス構造をとることができる。バス構造は、メモリバスまたはメモリコントローラ、周辺機器用バス、および任意の様々なバス構造を使用するローカルバスを含む。システムメモリは、リードオンリーメモリ（ＲＯＭ）２４、およびランダムアクセスメモリ（ＲＡＭ）２５を含む。コンピュータ２０内部の素子間の情報を転送することを支援する標準ルーチンを含む標準入出力システム２６（ＢＩＯＳ）は、例えば起動中など、ＲＯＭ２４に記憶される。コンピュータ２０は、ハードディスク（図示せず）と読み書きを行なうハードディスクドライブ２７、リムーバブル磁気ディスク２９と読み書きを行なう磁気ディスクドライブ２８、およびリムーバブル光ディスク３１、例えばＣＤ  ＲＯＭまたは他の光学媒体などと読み書きを行なう光ディスクドライブ３０をさらに含むことができる。ある実施形態の例において、本開示の態様を具体化するコンピュータ実行可能命令を、ＲＯＭ２４、ハードディスク（図示せず）、ＲＡＭ２５、リムーバブル磁気ディスク２９、光ディスク３１、および／または汎用処理装置２１のキャッシュに記憶できる。ハードディスクドライブ２７、磁気ディスクドライブ２８、および光ディスクドライブ３０は、各々、ハードディスクドライブインターフェース３２、磁気ディスクドライブインターフェース３３、および光ディスクドライブインターフェース３４を介して、システムバス２３に接続される。ドライブ群、およびこれらに関係するコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびコンピュータ２０のための他のデータの、非揮発性記憶装置を提供する。しかし、本願明細書において記述される通常の環境は、ハードディスク、リムーバブル磁気ディスク２９、および光ディスク３１を採用する。当業者によって十分に理解されるべきことは、他のタイプのコンピュータ可読媒体は、コンピュータ、例えば磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌイカートリッジ、ランダムアクセスメモリ（ＲＡＭｓ）、リードオンリーメモリ（ＲＯＭｓ）、または同種のものによって参照可能なデータを記憶でき、また、それを通常の動作環境において使用することができることである。
【００１８】
オペレーティングシステム３５、１つまたは複数のアプリケーションプログラム３６、別プログラムモジュール３７、およびプログラムデータ３８を含む、多くのプログラムモジュールを、ハードディスク、磁気ディスク２９、光ディスク３１、ＲＯＭ２４、またはＲＡＭ２５上に記憶することができる。ユーザは、入力デバイス、例えばキーボード４０、およびポインティングデバイス４２などを介して、コンピュータ２０に、コマンドおよび情報を入力できる。他の入力デバイス（図示せず）は、マイク、ジョイスティック、ゲームパッド、衛星受信装置、スキャナ、または同種のものを含むことができる。これらおよび他の入力デバイスは、システムバスに接続されるシリアルポートインターフェース４６を介して、処理装置２１にたびたび接続されるが、他のインターフェース、例えばパラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などによって、接続される場合もある。また、ディスプレイ４７、または他のタイプのデバイスを、インターフェース、例えばビデオアダプタ４８などを介して、システムデバイス２３に接続することができる。ディスプレイ４７に加えて、コンピュータは、他の周辺機器用出力デバイス（図示せず）、例えばスピーカ、およびプリンタなどを一般に含む。図１の一般的なシステムもまた、ホストアダプタ５５、小型コンピュータシステムインターフェース（ＳＣＳＩ）バス５６、およびＳＣＳＩバス５６に接続される外部記憶装置６２を含む。
【００１９】
コンピュータ２０は、１つまたは複数のリモートコンピュータ、例えばリモートコンピュータ４９などへの論理接続を使用するネットワーク環境において動作できる。リモートコンピュータ４９は、他のコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の共通ネットワークノードになることができ、図１にメモリ記憶装置５０が示されているだけではあるが、コンピュータ２０に関連して上述した、多くのまたは全ての素子を一般に含むことができる。図１に示す論理接続は、ローカルエリアネットワーク（ＬＡＮ）５１、およびワイドエリアネットワーク（ＷＡＮ）５２を含むことができる。このようなネットワーク環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいて、ありふれたものである。
【００２０】
ＬＡＮネットワーク環境において使用されるとき、コンピュータ２０を、ネットワークインターフェース、またはアダプタ５３を介して、ＬＡＮ５１に接続することができる。ＷＡＮネットワーク環境において使用されるとき、コンピュータ２０は、モデム５４、またはワイドエリアネットワーク５２、例えばインターネットなどの上で通信を確立する他の手段を一般に含むことができる。内部モデム、または外部モデムになることができるモデム５４を、シリアルポートインターフェース４６を介して、システムバス２３に接続することができる。ネットワーク環境において、コンピュータ２０に関連して示したプログラムモジュール、またはその一部を、リモートメモリ記憶装置に記憶することができる。示されたネットワーク通信は、例であり、コンピュータ間の通信リンクを確立する他の手段を使用できることを十分に理解されるだろう。さらに、本開示の非常に多くの実施形態は、コンピュータシステムのために非常に適切であると想定されるが、本明細書において本開示をこのような実施形態に限定することは意図しない。
【００２１】
上記の詳細な説明は、例および／または動作図を介して、システムおよび／またはプロセスの様々な実施形態を説明した。このようなブロック図の範囲で、ならびに／または、１つもしくは複数の機能および／もしくは動作を含む例の範囲で、当業者によって理解されるであろうことは、このようなブロック図および／または例の範囲内での、各機能および／または各動作を、個々におよび／またはまとめて、ハードウェア、ソフトウェア、ファームウェア、または実質的にこれらの任意の組み合わせによって、実行できることである。
【００２２】
本願明細書において記述される本主題の特定の態様を示し、記述したが、当業者には明らかであろうことは、本願明細書における手引きに基づく、変更および修正は、本願明細書において記述した本主題から逸脱することなく、行うことができ、その広い態様、ひいては添付した特許請求の範囲は、その範囲内で、真の趣旨、および本願明細書において記述された本主題の範囲の範囲内にあるような、全てのこのような変更および修正を、含むことである。
【００２３】
図２は、カーネルモードベースのターミナルサービスアーキテクチャの例を示す。
【００２４】
これらの実施形態において、プロセスは、ユーザモード・セッション空間、カーネルモード・セッション空間、およびカーネルモード・システム空間の各々において、実行する。カーネルモード空間は、一般に、カーネル、カーネル拡張、および一部のデバイスドライバを起動するために予約されるメモリ空間である。ユーザモード空間は、一般に、全てのユーザモードアプリケーションが実行するメモリである。セッション空間は、特定のユーザセッションのために予約されるメモリ空間である。システム空間は、システムが動作している間、システムのために予約されるメモリである。カーネルモード空間、またはユーザモード空間は、セッション空間、またはシステム空間と結合され、上記空間、例えばユーザモード・システム空間などを生成することができる。他の実施形態は、ユーザモード・システム空間を利用することができる。
【００２５】
ユーザモード・セッション空間におけるアプリケーション２０２、例えばワードプロセッサ、またはＷｅｂブラウザなどは、まずグラフィックデータを生成する。アプリケーション２０２がワードプロセッサである場合には、このグラフィックデータは、テキスト、または画像であり、特定位置合わせ、例えば編集されているドキュメントのページ上で中央揃え、および太字などで、画面上に表示されることができる。このグラフィックデータは、その後、処理するため、デバイスドライバインターフェース（ＤＤＩ）２０６に従って、デバイスドライバ２０４に送信される。ドライバ２０４およびＤＤＩ２０６は、カーネルモード・セッション空間に存在する。デバイスドライバは、高水準のコンピュータプログラム、例えばワードプロセッサなどが、コンポーネントまたはコンピュータプログラムであるハードウェアデバイス、例えばコンピュータプリンタ、またはコンピュータモニタなどと通信できるようにする。デバイス２０４は、コンピュータのサブシステムと、物理的に接続されたハードウェアとの通信を介して、関連ハードウェアと一般に通信する。対応するＤＤＩ２０６は、ドライバに特有のアプリケーションプログラミングインターフェース（ＡＰＩ）の形である。プログラム２０２は、ＤＤＩ２０６に従ってＤＤＩ２０６およびドライバ２０４によって、対応するハードウェアが認識する通信に解釈される呼び出しを行なう。ＤＤＩ２０６およびドライバ２０４は、プログラム２０２のためのハードウェアから通信を受信するとき、同様の変換を行なう。
【００２６】
一実施形態において、ＤＤＩ２０４は、グラフィックオブジェクトを表し、モニタおよびプリンタのような出力デバイスに伝送するマイクロソフトウィンドウズ用のＡＰＩであるグラフィックデバイスインターフェース（ＧＤＩ）を含むことができる。ＧＤＩは、タスク、例えば直線および曲線の描画、フォントの表示、およびパレットの操作などを処理する。他の実施形態において、ＤＤＩ２０４は、ＤｉｒｅｃｔＸ（登録商標）（ＤＸ）またはＤｅｓｋｔｏｐ  Ｗｉｎｄｏｗｓ  Ｍａｎａｇｅｒ（ＤＷＭ）に対応するインターフェースを含むことができる。
【００２７】
一実施形態おいて、グラフィックデータが、リモートデスクトッププロトコル（ＲＤＰ）を介して、通信ネットワーク経由で送信されるべきである場合には、ドライバ２０４は、受信データを、少なくとも１つの、ＲＤＰ・グラフィック・プロトコルデータ単位(RDP graphics protocol data unit)（ＰＤＵ）に、部分的にコード化する。ＲＤＰ  ＰＤＵは、ＲＤＰプロトコルにおいて、特定されるデータ単位である。ドライバ２０４は、その後、各ＲＤＰ  ＰＤＵを、残りのコード化を実行するシステム空間カーネルモードドライバ２０８に送信する。このシステム空間カーネルモードドライバ２０８は、カーネルモード・システム空間に存在する。コード化は、圧縮および暗号化の両方を含むことができる。システム空間カーネルモードドライバ２０８がＰＤＵをコード化した後、それは、ＰＤＵを、下位のカーネル転送ドライバ２１０に送信する。このカーネル転送ドライバ２１０は、カーネルモード・システム空間に存在する。このカーネル転送ドライバ２１０は、ＰＤＵを、ＰＤＵを受信予定の受信者２１２に送信する。例えばクライアント装置２１２上のユーザが本装置のＲＤＰセッションを有する場合、カーネル転送ドライバ２１０は、ＰＤＵを、通信ネットワーク経由でＲＤＰに従ってクライアント２１２に送信する。
【００２８】
ユーザモードデスクトップアプリケーション２０２と同様に、ユーザモード仮想チャネルアプリケーション２１４は、ユーザモード・セッション空間に存在することができる。仮想チャネルアプリケーション２１４、例えばリモートクリップボードは、リモートクライアント装置２１２上のユーザが本マシン２００と通信している場合、同一セッションにおいて起動している他のアプリケーション（例えばデスクトップアプリケーション２０２）上の、テキストまたは画像を、リモートクリップボードに、コピーでき、その後、コピーデータを他のドキュメントにペーストできる。このような仮想チャネルデータは、カーネルモード・セッション空間に存在するファイル入出力（Ｉ／Ｏ）サブシステムドライバ２１６を介して、直接に送信される。デバイスドライバ２０４が、その受信データを、少なくとも１つのＲＤＰ  ＰＤＵに処理した方法と同様に、入出力サブシステム２１６は、フレーム化、圧縮、および暗号化を、少なくとも１つのＲＤＰ  ＰＤＵを生成するために受信した仮想チャネルデータに適用できる。入出力サブシステム２１６は、各ＰＤＵを、システム空間ＲＤＰカーネルモードドライバ２０８に送信する。ＲＤＰカーネルモードドライバ２０８は、各ＰＤＵを、システム空間カーネルモード転送ドライバ２１０に送信する。システム空間カーネルモード転送ドライバ２１０は、ＰＤＵを、ＰＤＵを受信予定の受信者２１２に送信する。
【００２９】
図２の本システムは、なんらデータ変換すること(マーシャリング、marshaling)なく、スタックを介して、データの受け渡しを可能にする。これは、複雑なデータ操作およびデータ変換を要しない単純なカーネルモードベースのＲＤＰコード化アーキテクチャを可能にする。このアーキテクチャは、コード化コードがカーネルモードで動作するという点において制限される。
【００３０】
図３は、図２と対照するユーザモードベースのターミナルサービスアーキテクチャの例のシステムを示す。
【００３１】
本実施形態において、ユーザモードデスクトップアプリケーション３０２、およびユーザモード仮想チャネルアプリケーション３２０の両方は、ユーザモード・セッション空間に存在する。
【００３２】
ユーザモードデスクトップアプリケーション３０２、例えばワードプロセッサまたはＷｅｂブラウザなどは、まずグラフィックデータを生成する。アプリケーション３０２がワードプロセッサである場合には、このグラフィックデータは、テキストまたは画像であり、特定位置合わせ、例えば編集されているドキュメントのページ上で中央揃えおよび太字などで、画面上に表示することができる。このグラフィックデータは、その後、処理するため、デバイスドライバインターフェース（ＤＤＩ）３０６に従って、デバイスドライバ３０４に送信される。ドライバ３０４およびＤＤＩ３０６は、カーネルモード・セッション空間に存在する。デバイスドライバは、高水準のコンピュータプログラム、例えばワードプロセッサなどが、コンポーネントまたはコンピュータプログラムであるハードウェアデバイス、例えばコンピュータプリンタ、またはコンピュータモニタなどと通信できるようにする。デバイス３０４は、コンピュータのサブシステムと、物理的に接続されたハードウェアとの通信を介して、関連ハードウェアと一般に通信する。対応するＤＤＩ３０６は、ドライバに特有のアプリケーションプログラミングインターフェース（ＡＰＩ）の形である。プログラム３０２は、ＤＤＩ３０６に従ってＤＤＩ３０６およびドライバ３０４によって、対応するハードウェアが認識する通信に解釈される呼び出しを行なう。ＤＤＩ３０６およびドライバ３０４は、プログラム３０２のためのハードウェアから通信を受信するとき、同様の変換を行なう。
【００３３】
一実施形態において、ＤＤＩ３０４は、グラフィックオブジェクトを表し、モニタおよびプリンタのような出力デバイスに伝送するマイクロソフトウィンドウズ用のＡＰＩであるグラフィックデバイスインターフェース（ＧＤＩ）を含むことができる。ＧＤＩは、タスク、例えば直線および曲線の描画、フォントの表示、およびパレットの操作などを処理する。
【００３４】
一実施形態おいて、グラフィックデータがリモートデスクトッププロトコル（ＲＤＰ）を介して、通信ネットワーク経由で送信されるべき場合には、ドライバ３０４は、受信データを、ＲＤＰエンコーダプロセスによって認識することができる少なくとも１つのコマンドに、部分的にコード化する。ドライバ３０６は、各コマンドを、カーネルモード・セッション空間に存在する共有メモリグラフィックリフレクタ３０８に送信する。共有メモリグラフィックリフレクタ３０８は、全ての受信データを交換するように操作し、それを、ユーザモード・システム空間におけるグラフィックリフレクタ３１０に送信する。リフレクタにより、ユーザセション空間およびシステム空間の間でデータをやり取りする通常は複雑なタスクを、効率的な方法で進めることが確実になる。
【００３５】
マーシャリングは、オブジェクトのメモリ表現を、記憶、または伝送に適しているデータフォーマットへの変換処理である。また、マーシャリングは、データを、コンピュータプログラムの異なる部品の間、または１つのプログラムから他のプログラムに移動する必要があるとき一般に使用される。反対の動作は、「アンマーシャリング(unmarshaling)」として知られている。
【００３６】
２つのリフレクタ３０８、３１０は、カーネルモード・セッション空間ドライバ（共有メモリグラフィックリフレクタ３０８）、およびユーザモード・システム空間プロセス（グラフィックリフレクタ３１０）の間にマップされた共有メモリに基づいて通信する。
【００３７】
一実施形態、グラフィックリフレクタ３１０は、ＲＤＰ出力スケジューラ／エンコーダ３１４およびユーザモード転送３１６と並んで、ＲＤＰエンコーダプロセス３１２の一部をなす。ＲＤＰエンコーダプロセス３１２は、ユーザモード・システム空間に存在する。
【００３８】
グラフィックリフレクタ３１０は、受信グラフィックデータを取り込み、それを、ＲＤＰ出力スケジューラ／エンコーダ３１４に送信する。図２に示すように、カーネルモードアーキテクチャは、ＲＤＰデータをコード化し、それを、そのデータを提供したアプリケーションの存在しているスレッドを使用するネットワーク経由で送信する。ほとんどの場合、これらのアプリケーションは、データがコード化されている間、ブロックされた。図３によって示されるユーザモードアーキテクチャにおいて、コード化は、ＲＤＰ出力スケジューラ／エンコーダ３１４によって処理される。ＲＤＰ出力スケジューラ／エンコーダ３１４は、仮想チャネルデータおよびグラフィックマーシャルデータを処理し、自身の所有するスレッドセット上で、そのデータをＲＤＰフォーマットにコード化することを担う。このアーキテクチャは、装置上に存在している各ＲＤＰセッションのためのコード化を、有限かつ最適なスレッドセット上の単一のコンポーネントによって、処理できるようにする。
【００３９】
ＲＤＰ出力スケジューラ／エンコーダ３１４が、受信グラフィックデータを、少なくとも１つのＲＤＰ  ＰＤＵにコード化した場合、各ＰＤＵをユーザモード転送３１６に送信する。ユーザモード転送３１６は、ＰＤＵを、ＰＤＵを受信予定の受信者３１８に送信する。例えばクライアント装置３１８上のユーザが、本装置のＲＤＰセションを有する場合、ユーザモード転送３１６は、ＰＤＵを通信ネットワーク経由でＲＤＰに従ってクライアント３１８に送信する。
【００４０】
ユーザモードデスクトップアプリケーション３０２と同様に、ユーザモード仮想チャネルアプリケーション３２０は、ユーザモード・セッション空間に存在することができる。仮想チャネルアプリケーション３２０、例えばリモートクリップボードは、リモートクライアント装置３１８上のユーザが本装置３００と通信している場合、同一セッションにおいて起動している他のアプリケーション（例えばデスクトップアプリケーション３０２）上の、テキストまたは画像を、リモートクリップボードにコピーでき、その後、コピーデータを他のドキュメントにペーストできる。このような仮想チャネルデータは、ユーザモード仮想チャネルアプリケーション３２０から、仮想チャネルリフレクタ３２２を介して、ＲＤＰ出力スケジューラ／エンコーダ３１４に送信される。仮想チャネルリフレクタ３２２は、受信仮想チャネルデータをマーシャルし、対応するマーシャル仮想チャンネルデータを、ＲＤＰ出力スケジューラ／エンコーダ３１４に送信する。
【００４１】
一実施形態、仮想チャネルリフレクタ３２２は、名前付きパイプ、および名前付きパイプハンドルを使用する。名前付きパイプは、例えば仮想チャネルリフレクタ３２２によって行なわれるようなプロセス間通信に使用することができる。名前付きパイプは、複数のプロセスのためのシステム永続的(persistent)プロセス間通信(inter-process communications)（ＩＰＣ）チャネルを提供するＡＰＩであり、互いに通信し、通常、プロセスはファイルに見える。プロセスは、一般に名前付きパイプにより、他のプロセスとのプロセス間通信を処理する。一実施形態、名前付きパイプは、要求されるとメモリ内でデータを記憶したり、読み込んだりし、かつそれを検索する。名前付きパイプハンドルは、名前付きパイプを処理する。
【００４２】
名前パイプハンドルを使用することによって、チャネルハンドル上の入出力動作は、以前から存在するターミナルサーバＡＰＩ、例えばＷＩＮＤＯＷＳ  ＴＥＲＭＩＮＡＬ  ＳＥＲＶＥＲと互換性を有する。これは、現在の仮想チャネルベースのアプリケーションとの互換性を提供することへの鍵となる。名前付きパイプが仮想チャネルリフレクタ３２２によって使用されないとすると、現在の仮想チャネルベースのアプリケーションは、仮想チャネルリフレクタ３２２を介しては、動作不可能な状態となるであろう。
【００４３】
ＲＤＰ出力スケジューラ／エンコーダ３１４が、グラフィックリフレクタ３１０から受信したグラフィックデータを、少なくとも１つのＲＤＰ  ＰＤＵにコード化した方法と同様に、ＲＤＰ出力スケジューラ／エンコーダ３１４は、仮想チャネルリフレクタ３２２から受信した仮想チャネルデータを、少なくとも１つのＲＤＰ  ＰＤＵにコード化する。ＲＤＰ出力スケジューラ／エンコーダ３１４は、その後、各ＰＤＵを、ユーザモード転送３１６に送信する。ユーザモード転送３１６は、ＰＤＵを、ＰＤＵを受信予定の受信者３１８に送信する。
【００４４】
図３Ａは、図３のシステムの実装を示す。この場合、グラフィックデータおよび仮想チャネルデータは、システム上で起動している仮想マシン（ＶＭ）によって生成される。データは、リフレクタ３０８ａ、３１０ａ、３２２ａを介して、ＶＭ３２８上で動作するゲストにおいて起動しているユーザセッションから集められる。それから、データは、
コード化のために、マシン３００ａ上のホストＯＳにおいて起動しているＲＤＰエンコーダプロセス３１２ａに送信される。本実施形態において、ホストＯＳエンコーダプロセス３１２ａは、複数のＶＭから届くデータをコード化できる。本実施形態におけるリフレクタコンポーネント３０８ａ、３１０ａ、３２２ａのための実装は、ホスト−ゲスト間のデータ交換に特有の機構に基づいている。仮想チャネルリフレクタ(VC reflector)が、ＶＭバス（ＶＭＢＵＳ）３２２ａを利用できる間はグラフィックリフレクタ３０８ａ、３１０ａは、ゲストおよびホストの間で共有されるメモリを使用できる。本実施形態において、ユーザモードデスクトップアプリケーション３０２ａ、およびユーザモード仮想チャネルアプリケーション３２０ａは、ゲストＯＳのユーザモード・セッション空間３２６ａにおいて実行する。デバイスドライバインターフェース３０６ａ、およびユーザセッションＲＤＰカーネルモードディスプレイドライバ３０４ａは、ゲストＯＳのカーネルモード・セッション空間３２６ｂにおいて実行する。さらに、ＲＤＰエンコーダプロセス３１２ａは、ホストＯＳのユーザモード・システム空間３２４ｃにおいて実行される。
【００４５】
一部のコンポーネントは、明確さ、および簡潔さのために、上記図から、やむを得ず除外された。例えば伝送制御プロトコル（ＴＣＰ）リスナ、または転送リスナ(transport listeners)は、図２、および図３、および図３Ａの実装の間で異なることができる。図２のカーネルモードアーキテクチャにおけるＴＣＰリスナは、カーネルモードリスナを使用する。しかし一方、図３のＴＣＰリスナ、および図３ＡのＴＣＰリスナは、ユーザモードリスナを使用する。同様のやり方は、入力インジェクション(input injections)を処理するコンポーネントにもとられる。当業者は、図２、および図３、および図３Ａの実装の間の他の補助的な相違点を十分に理解するだろう。
【図１】
2012511777.tif 000003
【図２】
2012511777.tif 000004
【図３】
2012511777.tif 000005
【図３Ａ】
2012511777.tif 000006
【国際調査報告】
2012511777.tif 000007
2012511777.tif 000008