(57)【要約】  ＷＰＦ(Windows Presentation Foundation)ベースのアプリケーションなどのアプリケーションをリモーティングするためのシステムおよび方法を説明する。本システムおよび方法は、構造表現と関連付けられた情報のリモーティングに基づく。構造表現は、クライアント側またはリモート側でそのコンテンツをレンダリングせずに、リモート側またはクライアント側で表示されるデスクトップのビジュアルコンテンツまたは要素に対応する。構造表現と関連する情報または構造情報は、表示される際のデスクトップにおけるビジュアルコンテンツの配置を指定するデータを含む。この情報は、クライアント側で構造表現を再作成し、該構造表現と適合するビジュアルコンテンツを表示するために使用される。
2010525428.tif 000002
【特許請求の範囲】
【請求項１】
サーバコンピューティング装置であって、
メモリと、
前記メモリに動作可能なように接続される１つまたは複数のプロセッサと、
１つまたは複数のデスクトップおよび該サーバコンピューティング装置のアプリケーションをリモーティングする、前記メモリ内のリダイレクトエージェントと、
前記デスクトップの構造情報を転送する構造リダイレクトエージェントと
を備えたことを特徴とするサーバコンピューティング装置。
【請求項２】
ＷＰＦアプリケーションおよびＧＤＩアプリケーションは、リモーティングされることを特徴とする請求項１に記載のサーバコンピューティング装置。
【請求項３】
ＧＤＩアプリケーションと関連付けられたビジュアルコンテンツは、１つまたは複数のクライアントコンピューティング装置に送信される前に、ラスタライズされたデータとして前記サーバコンピューティング装置に格納されることを特徴とする請求項１に記載のサーバコンピューティング装置。
【請求項４】
前記アプリケーションに対応するビジュアルツリーを作成するビジュアルツリージェネレータをさらに備えたことを特徴とする請求項１に記載のサーバコンピューティング装置。
【請求項５】
前記ビジュアルツリーは、デスクトップの表現として子ツリーと、１つまたは複数のクライアントコンピューティング装置にリモーティングされるＷＰＦアプリケーションの対応する複数の子ツリーとを含むことを特徴とする請求項４に記載のサーバコンピューティング装置。
【請求項６】
構造情報を前記構造リダイレクトエージェントに提供し、構造情報のノードデータを生成するウィンドウマネージャエージェントをさらに備えたことを特徴とする請求項１に記載のサーバコンピューティング装置。
【請求項７】
構造リダイレクトマネージャリダイレクトエージェントは、デスクトップ全体に対するビジュアルツリーを保持し、リモートディスプレイクライアントにビジュアルツリーを作成するように命令することを特徴とする請求項６に記載のサーバコンピューティング装置。
【請求項８】
メモリと、
前記メモリに動作可能なように接続される１つまたは複数のプロセッサと、
デスクトップを表現する子ツリーと、該デスクトップを経由して実行される１つまたは複数のリモートアプリケーションの対応する子ノードとを含むビジュアルツリーを生成する、前記メモリ内のビジュアルツリージェネレータと
を備えたことを特徴とするクライアントコンピューティング装置。
【請求項９】
ビジュアルツリーを、該クライアントコンピューティング装置内にデータとして別個に格納することを特徴とする請求項８に記載のクライアントコンピューティング装置。
【請求項１０】
該クライアントコンピューティング装置は、レンダリングするためのＷＰＦアプリケーションおよびＧＤＩアプリケーションを受信することを特徴とする請求項８に記載のクライアントコンピューティング装置。
【請求項１１】
前記ビジュアルツリーに従ってビジュアルコンテンツをレンダリングするためのディスプレイ実行モジュールをさらに備えたことを特徴とする請求項８に記載のクライアントコンピューティング装置。
【請求項１２】
前記ディスプレイ実行モジュールは、メディアインフラストラクチャレイヤ（Media Infrastructure Layer）の動作可能コンポーネントであることを特徴とする請求項１１に記載のクライアントコンピューティング装置。
【請求項１３】
表示すべき１つまたは複数の視覚コンポーネントを関連付けるステップと、
ビジュアルツリーのノードとして表現される前記視覚コンポーネントを用いてビジュアルツリーを生成するステップと、
前記ビジュアルツリーと関連付けられた構造情報を収集し、該構造情報を管理リダイレクトレイヤに転送するステップと、
前記構造情報に基づいてリモートクライアントにおいてビジュアルツリーを生成するステップと
を含むことを特徴とする方法。
【請求項１４】
関連付けは、表示すべきウィンドウのｚ順、相対的配置、および透明性のうちの１つまたは複数を含むことを特徴とする請求項１３に記載の方法。
【請求項１５】
前記ビジュアルツリーを作成するステップは、リモーティングされたアプリケーションに対するビジュアルツリーの関連付けを行わずに実行されることを特徴とする請求項１３に記載の方法。
【請求項１６】
前記収集するステップは、前記ビジュアルツリーを保持するための処理のみを含むことを特徴とする請求項１３に記載の方法。
【請求項１７】
前記ビジュアルツリーは、転送されたノードデータに対応することを特徴とする請求項１３に記載の方法。
【請求項１８】
ＧＤＩアプリケーションおよびＷＰＦアプリケーションは、前記視覚コンポーネントによって表現されることを特徴とする請求項１３に記載の方法。
【請求項１９】
ＷＰＦアプリケーションが開始されるときに、単一の即時モードの可視表面を保持するステップをさらに備えたことを特徴とする請求項１３に記載の方法。
【請求項２０】
前記リモートクライアント装置で前記ビジュアルツリーからのビジュアルコンテンツをレンダリングするステップをさらに備えたことを特徴とする請求項１３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、未構成のデスクトップ内のウィンドウズ・プレゼンテーション・フレームワーク（Windows Presentation Framework）ベースのアプリケーションのリモーティング（remoting）に関する。
【背景技術】
【０００２】
特定のオペレーティングシステムでは、コンピューティングベースの装置でアプリケーションを実行するデスクトップの最終的な視覚的表現は、構成（composition）の結果である。構成とは、様々な視覚コンポーネントが可視化デバイス（visualization device）上で表されるプロセスである。可視化デバイスは、モニタとすることができ、デスクトップは、物理的な可視化デバイスの論理的な抽象化（logical abstraction）である。デスクトップを構成するプロセスは、様々な視覚コンポーネントの構造表現（structural representation）を生成すること、例えば、デスクトップ上の色や配置などの属性の関連付けを行うこと、および、構造表現と適合するコンテンツを表示することを含む。この構成のプロセスは、他のコンピューティングベースのアプリケーションによって利用することができる。ビジュアルコンテンツまたは要素の構成を実装する上記コンピューティングベースのアプリケーションの例には、ＷＰＦ（Windows（登録商標）Presentation Foundation）のアプリケーションが含まれる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
リモーティングのとき、デスクトップは完全に構成され、該デスクトップは、クライアントまたはユーザ側に対してリモートにされる。構成プロセスの後はデスクトップに対するデータ転送は、ネットワークリソースの不正な使用となるので、リモート処理が非効率的になり遅くなる。
【課題を解決するための手段】
【０００４】
この課題を解決するための手段の記載は、Windows（登録商標）Presentation Foundation（以下、ＷＰＦと称する）ベースのアプリケーションなどのアプリケーションのリモーティングに関連する概念を紹介するために提供される。これらの概念を、以下の詳細な説明でさらに説明する。この課題を解決するための手段の記載は、特許請求する対象の本質的な特徴を特定することは意図されておらず、または実施形態における特許請求する対象の範囲を定めることも意図されていない。
【０００５】
以下の詳細な説明では、添付の図面を参照して説明する。図面において、参照番号の最左の番号は、その参照番号が最初に登場する図面の番号を示す。類似の機能およびコンポーネントを示すために、図面全体を通じて同じ参照番号を使用している。
【図面の簡単な説明】
【０００６】
【図１】未構成のデスクトップにおけるＷＰＦベースのアプリケーションのリモーティングを実装する例示的なシステムを示す図である。
【図２】ＧＤＩおよびＷＰＦアプリケーションのレンダリングターゲットへのビジュアルコンテンツのレンダリングを示す図である。
【図３】例示的なビジュアルツリーを示す図である。
【図４】例示的なサーバベースの装置を示す図である。
【図５】未構成のデスクトップにおいてＷＰＦベースのアプリケーションをリモーティングするための様々なコンポーネント間の対話を示す図である。
【図６】未構成のデスクトップにおいてＷＰＦベースのアプリケーションをリモーティングするための例示的な方法を示す図である。
【図７】コンピューティングベースの装置において重複コード（overlapping code）を使用してソフトウェア保護を実装する例示的な方法を示す図である。
【発明を実施するための形態】
【０００７】
ＷＰＦベースのアプリケーションなどのアプリケーションをリモーティングするためのシステムおよび方法を説明する。該システムおよび方法は、構造表現と関連付けられたリモート情報に基づくものである。構造表現は、アプリケーションまたはデスクトップのビジュアルコンテンツまたは要素に対応する。構造表現は、コンテンツをリモート側でレンダリングすることなく、アプリケーションをリモート側またはクライアント側で表示することを可能にする。構造情報（structural information）と関連付けられた情報は、表示されるときのデスクトップ上のビジュアルコンテンツの配置を指定するデータを含む。構造情報は、（構造表現と関連付けられた）ビジュアルツリー（visual tree）を介してレンダリングされるウィンドウの部分と、ウィンドウマネージャエージェントなど、デフォルトの共通のシステムコンポーネントによってレンダリングされるウィンドウの部分との関係の記述も含む。構造情報は、クライアント側において構造表現を再作成し、構造表現と適合するビジュアルコンテンツを表示するために使用される。一実装において、構造情報は、デスクトップに関する特定のレンダリングターゲットの配置情報によって作成される。一実装において、構造表現を、ビジュアルツリーとすることができる。
【０００８】
目的を達成するために、システムは、リモート側からクライアント側への構造情報のリモーティングを提供する。構造情報を使用して、１つまたは複数のビジュアルツリーによって生成されたビジュアルコンテンツが正しく配置され、該コンテンツは、ウィンドウマネージャエージェントなどのデフォルトの共通システムコンポーネントによってレンダリングされる。
【０００９】
目的を達成するために、構造表現をリモート側からクライアント側にリモーティングするシステムプロバイダでは、構造表現が、該構造表現（例えば、ビジュアルツリー）の再生成のために使用される。該システムは、クライアント側における構造表現と適合するビジュアルコンテンツのラスタライズ、およびレンダリングを可能にする。
【００１０】
システムは、デスクトップに対応する構造情報のリモート側からクライアント側へのリモーティングに作用し得る、１つまたは複数のコンピュータプログラムまたはエージェントを含むことができる。エージェントは、表示されるデスクトップの１つまたは複数のビジュアルコンテンツを関連付けて、対応する構造表現（例えば、ビジュアルツリー）を生成する。構造情報に関連する構造表現は、表示される際のビジュアルコンテンツの視覚な特性を決定する属性を提供する。リモート側のエージェントは、構造表現における全ての変更を認識することができ、対応する変更を、クライアント側で生成された構造表現に対して行うこともできる。変更された構造表現を、ビジュアルコンテンツに応じて表示するために使用することができる。一実装において、リモート側は、１つまたは複数のコンピューティングベースのアプリケーションまたはプログラムをホストするサーバコンピュータ装置である。
【００１１】
デスクトップの構成を行わない未構成デスクトップ（non-composed desktop）上のＷＰＦベースのアプリケーションをリモーティングするためのシステムおよび方法について説明した態様を、任意の数の異なるコンピュータシステム、環境、および／または構成で実装することができるが、実施形態は、以下の例示的なシステムアーキテクチャとの関連で説明される。
【００１２】
例示的なシステム
図１は、未構成のデスクトップにおいてＷＰＦアプリケーションに基づくアプリケーションをリモーティングするための例示的なシステム１００を示す。目的を達成するために、システム１００は、ネットワーク１０４を通じて１つまたは複数のクライアントコンピュータ装置１０６（１）−（Ｎ）と通信するサーバコンピュータ装置１０２を含む。例えば、一実装では、システム１００は、数千ものオフィスＰＣ、様々なサーバ、および数カ国に広がる他のコンピューティングベースの装置を含む、企業ネットワークとすることができる。代替的に、別の可能な実装では、システム１００は、単一のファミリーに属する限られた数のＰＣのホームネットワークを含むことができる。
【００１３】
システム１００は、複数のクライアントコンピュータ装置１０６が、サーバコンピュータ装置１０２にインストールまたはホストされているアプリケーションにアクセスする、マイクロソフト（登録商標）社によるターミナルサービス（Terminal Service）（登録商標）を含むか、または同様にすることができる。したがって、サーバコンピュータ装置１０２にホストされるアプリケーションへのアクセスを望むクライアントコンピュータ装置１０６は、Windows（登録商標）インタフェースを通じてそのアプリケーションと対話する。クライアント側で表示されるWindows（登録商標）インタフェースは、あたかもユーザがクライアントコンピュータ装置１０６を介したリモートではなくサーバコンピュータ装置１０２を通じて直接アプリケーションにアクセスしていたように、サーバコンピュータ装置１０２にレンダリングされる、デスクトップ環境を再現する。アクセスを、一定数のアプリケーションに対して、またはサーバコンピュータ装置１０２でホストされる全てのアプリケーションに対して与えることができることを理解されたい。
【００１４】
サーバコンピュータ装置１０２でホストされるアプリケーションおよびサービスは、例えば、リモートデスクトッププロトコル（ＲＤＰ：remote desktop protocol)などの１つまたは複数のプロトコルを通じてデスクトップをリモーティングすることによって、クライアントコンピュータ装置１０６によるアクセスが可能である。このようなプロトコルの使用は、ターミナルサービス（登録商標）システムなどのリモートクライアントアクセスシステムとの関連において実装され得る。
【００１５】
クライアントコンピュータ装置１０６を互いに接続することができ、あるいはＬＡＮ、ＷＡＮ、または当技術分野で公知の任意の他のネットワーク技術を含む、有線および／または無線ネットワークを通じて様々な組み合わせでサーバコンピュータ装置１０２と接続することができる。
【００１６】
サーバコンピュータ装置１０２およびクライアントコンピュータ装置１０６は、ＷＰＦに基づくアプリケーションをサポートするオペレーティングシステムを用いて実装され得る。例えば、クライアントコンピュータ装置１０６には、これに限定されないがマイクロソフト（登録商標）社によるWindows（登録商標）Vista（登録商標）のオペレーティングシステムを含む、オペレーティングシステムを備えることができる。
【００１７】
サーバコンピュータ装置１０２は、リダイレクトエージェント（redirection agent）１０８も含む。リダイレクトエージェント１０８は、サーバコンピュータ装置１０２にホストされているアプリケーションを、クライアントコンピュータ装置１０６にリモーティングするための機能を有する。これを実装するために、リダイレクトエージェント１０８は、サーバコンピュータ装置１０２のデスクトップに関連付けられた構造情報を収集して転送し、該構造情報にしたがって、サーバコンピュータ装置１０２のデスクトップに関連付けられたビジュアルコンテンツをレンダリングする。
【００１８】
図２は、様々なタイプのコンピュータベースのアプリケーション（例えば、ＧＤＩアプリケーション、またはＷＰＦアプリケーション）が、あるコンピューティングベースの装置のデスクトップにおいて、それらに関連付けられたビジュアルコンテンツをレンダリングする方法を図示している。一般的に、ユーザは、インタフェース（例えば、Windows（登録商標）インタフェース）を通じてアプリケーションと対話することができる。上記アプリケーションの実行の結果として生成されるデータは、そのアプリケーションに関連付けられたWindows（登録商標）インタフェースにおいて可視である。
【００１９】
ブロック２０２は、ＧＤＩアプリケーション２０４に関連付けられたビジュアルコンテンツのレンダリングターゲット２０６へのレンダリングを図示している。レンダリングターゲットは、ラスタライズされレンダリングされた全てのピクセルが配置されている領域として定義することができる。フレームバッファは、レンダリングターゲットの一例である。ＧＤＩアプリケーション２０４は、通常、それらのビジュアルコンテンツを即時描画モード（immediate drawing mode）でレンダリングする。このような場合、ＧＤＩアプリケーション２０４は、それらの出力を、例えばフレームバッファなどのレンダリングターゲット２０６に直接出力する。したがって、描画（drawing）または視覚的表現は、ＧＤＩアプリケーション２０４によって作成されるたびに、フレームバッファ上に直接レンダリングされる。ＧＤＩアプリケーション２０４に何らかの変更が生じた場合、それらの全てのビジュアルコンテンツは再び、フレームバッファ上に再レンダリングされる。ＧＤＩアプリケーション２０４が、表示すべきビジュアルコンテンツをラスタライズし、レンダリングすること、および、それによって描画オペレーションの記述と、描画を処理するラスタライズおよびレンダリングを介した実行との間で論理的な区別は生じないことを理解されたい。
【００２０】
ブロック２０４は、ＷＰＦアプリケーション２０８と関連付けられたビジュアルコンテンツのレンダリングを図示している。ＷＰＦアプリケーション２０８におけるビジュアルコンテンツのレンダリングは、ＧＤＩアプリケーション２０４におけるレンダリングとは異なるが、これは、ＷＰＦアプリケーション２０８の表示すべきビジュアルコンテンツは、ＧＤＩアプリケーション２０４とは異なり、フレームバッファに直接レンダリングされないためである。ＷＰＦアプリケーション２０８の場合、関連付けられたビジュアルコンテンツは、例えば、ストレージバッファなどに別個に格納される。ビジュアルコンテンツを、ラスタライズモジュールによって生成することができる。
【００２１】
例えば、Windows（登録商標）Vista（登録商標）のオペレーティングシステムでは、ビジュアルコンテンツは、ビジュアルツリー２１０と呼ばれる構造表現として格納される。ビジュアルツリー２１０は、ノードで表されるような、中核のビジュアルコンテンツおよび関連付けられた情報を有する。ノードは、空間配置、アプリケーションウィンドウのサイズ、描画リソース、および描画命令などの属性を指定することができる。
【００２２】
ＷＰＦアプリケーション２０８のコンテンツを表示することを担うディスプレイ実行モジュールは、レンダリングターゲット２１２（例えば、フレームバッファ）への表示用にビジュアルツリーの一部分を選択する。ディスプレイ実行モジュールは、ＷＰＦレンダリングスレッドとすることができる。ビジュアルツリー２１０と適合するビジュアルコンテンツをレンダリングするために、ＷＰＦレンダリングスレッドは、ビジュアルツリー２１０の全てのノードをトラバースして、ビジュアルツリー２１０と適合するビジュアルコンテンツをレンダリングする。実行アプリケーションによって行われた全ての変更について、ビジュアルツリー２１０のノードへの対応する変更が存在する。ＷＰＦレンダリングスレッドは、ビジュアルツリー２１０への変更を認識し、実行アプリケーションによる影響があった変更によって特定される部分を、再レンダリングすることもできる。
【００２３】
デスクトップがリモートからアクセスされる方法は、アプリケーションのリモートアクセスとは異なってもよいことに留意されたい。例えば、デスクトップがリモートからアクセスされる場合、最初に、該デスクトップに対応するビジュアルツリーが作成される。この後、該デスクトップ上で実行中の１つまたは複数のアプリケーションに対応するビジュアルツリーの作成が行われる。次いで、全てのビジュアルツリーが、ルートノードに対する子ノードとして関連付けられる。その後、関連付けられたデスクトップおよびアプリケーションに関連する情報を有するこのようなビジュアルツリーが構成され、ビジュアルコンテンツがレンダリングされる。前述のように、ビジュアルツリーは、構造のみ表すことができ、デスクトップの視覚的表現を表すことができない。したがって、ビジュアルツリーの生成は、デスクトップのビジュアルコンテンツの構造特性から視覚表現を分離することで収集することができる。
【００２４】
一般的に、デスクトップの構成のプロセスは、ウィンドウのｚ順（z-order）、ウィンドウの相対的配置、透明度などを特定するための、１つまたは複数の視覚的要素間の関係を特定することから開始する。したがって、ビジュアルツリーは、視覚的要素の構造表現を考慮して生成される。視覚的要素は、ビジュアルツリーの１つまたは複数のノードを形成する。次いで、ディスプレイ実行モジュールが、潜在的な属性（例えば、エフェクト、変換など）を視覚的要素と関連付けて、ビジュアルツリーの表示時点を作成する。マイクロソフト（登録商標）社によるWindows（登録商標）Vista（登録商標）のオペレーティングシステムなどのオペレーティングシステムの場合、構成は、ＤＷＭ（Desktop Windows（登録商標）Manager）と呼ばれるオペレーティングシステムコンポーネントによって管理することができる。
【００２５】
図３は、例示的なビジュアルツリー３００を図示している。ビジュアルツリー３００は、構造の親ノード、すなわちルートノードとして、ルートノード３０２を含む。ビジュアルツリー３００はさらに、１つまたは複数の子ノード３０４（１）−（Ｎ）を含む。図示されている複数の子ノードのうちの１つの子ノードである、ノード３０４（１）は、デスクトップを表す。残りのノード３０４（２）−（Ｎ）は、ビジュアルツリー３００が対応するデスクトップ上で実行中の１つまたは複数のアプリケーションに対する、それぞれの構造表現またはビジュアルツリーである。ある特定の実装において、１つまたは複数のノード３０４（２）−（Ｎ）は、他の子ノードの親ノードとすることができる。例えば、図示されたようにノード３０４（２）は、１つまたは複数の子ノード３０６（１）−（Ｎ）の親ノードである。さらに、子ノード３０６（１）−（Ｎ）は、ノード３０４（２）−（Ｎ）を定義している属性、および関連付けられたアプリケーションの構造表現を提供することができる。そのような属性の例には、ウィンドウの順序付け、クリッピングなどが含まれるが、これらには限定されない。
【００２６】
図４は、サーバコンピュータ装置１０２の関連する例示的なコンポーネントを図示している。サーバコンピュータ装置１０２は、１つまたは複数のプロセッサ４０２、およびメモリ４０４を含むことができる。プロセッサ４０２は、マイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタル信号プロセッサ、中央処理装置、状態マシン、論理回路、および／または動作命令に基づいて信号を操作する任意の装置を含むことができる。その他の機能として、プロセッサ４０２は、メモリ４０４に格納されたコンピュータ読取可能命令をフェッチして実行するように構成される。
【００２７】
メモリ４０４は、例えば、揮発性メモリ（例えば、ＲＡＭ）、および／または不揮発性メモリ（例えば、フラッシュメモリなど）を含む、当技術分野で公知の任意のコンピュータ読取可能媒体を含むことができる。図４に図示されているように、メモリ４０４は、プログラム４０６およびデータ４０８を含むこともできる。プログラム４０６は、例えば、リダイレクトエージェント１０８、リモーティングモジュール４１０、ビジュアルツリージェネレータ４１２、および他のアプリケーション４１４を含む。他のアプリケーション４１４は、ワードプロセッサアプリケーション、スプレッドシートアプリケーションなど、任意のコンピューティングベースの装置におけるアプリケーションを補完するプログラムを含む。一実装において、他のアプリケーション４１４には、ラスタライズモジュールが含まれる。
【００２８】
データ４０８は、例えば、ノードデータ４１６、構造情報データ４１８、ラスタライズデータ４２０、および他のデータ４２２を含む。ノードデータ４１６は、例えば、子ノード３０４（１）−（Ｎ）などの１つまたは複数の子ノードに関連する情報を格納する。前述したように、子ノードは、一実装において、デスクトップ上で実行中の１つまたは複数のアプリケーションに対応する。リダイレクトエージェント１０８は、構造リダイレクトエージェント４２４およびWindows（登録商標）マネージャリダイレクトエージェント４２６をさらに含む。
【００２９】
一実装において、ノードデータ４１６は、デスクトップにおけるＷＰＦアプリケーションのレンダリングターゲットの関係および配置に関する構造情報データ４１８を含む。
【００３０】
図５は、クライアントコンピュータ装置１０６の関連する例示的なコンポーネントを図示している。一実装において、クライアントコンピュータ装置１０６は、１つまたは複数のプロセッサ５０２、およびメモリ５０４を含む。プロセッサ５０２は、例えば、マイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタル信号プロセッサ、中央処理装置、状態マシン、論理回路、および／または動作命令に基づいて信号を操作する任意の装置を含む。他の機能として、プロセッサ５０２は、メモリ５０４に格納されたコンピュータ読取可能命令をフェッチして実行するように構成される。
【００３１】
メモリ５０４は、例えば、揮発性メモリ（例えば、ＲＡＭ）、および／または不揮発性メモリ（例えば、フラッシュメモリなど）を含む、当技術分野で公知の任意のコンピュータ読取可能媒体を含むことができる。図５に図示されるように、メモリ５０４は、プログラム５０６およびデータ５０８も含むことができる。プログラム５０６は、例えば、ディスプレイ実行モジュール５１０、ビジュアルツリージェネレータ５１２、および他のアプリケーション５１４を含む。他のアプリケーション５１４は、ワードプロセッサアプリケーション、スプレッドシートアプリケーションなどのアプリケーションを補完するプログラムを含む。一実装において、他のアプリケーション５１４には、ラスタライズモジュールが含まれる。データ５０８には、一例として、ビジュアルデータ５１６および他のデータ５１８が含まれる。
【００３２】
デスクトップ、および該デスクトップで実行中のアプリケーションのリモーティングは、リダイレクトエージェント１０８によって実装される。リダイレクトエージェント１０８は、サーバコンピュータ装置１０２において、デスクトップと関連付けられた構造情報および構造表現の転送に影響を与え、該リダイレクトエージェント１０８は、クライアント側（例えば、クライアントコンピュータ装置１０６）において、これをレンダリングする。
【００３３】
前述のように、１つまたは複数のアプリケーションは、サーバコンピュータ装置１０２にホストされる。クライアントコンピュータ装置１０６のうちの１つまたは複数のクライアントコンピュータ装置のユーザは、アプリケーションにアクセスするためにサーバコンピュータ装置１０２へのリモートセッションの開始を要求することができる。一実装において、サーバコンピュータ装置１０２と、１つまたは複数のクライアントコンピュータ装置１０６との間のリモートセッションは、リモーティングモジュール４１０によって開始される。
【００３４】
リモートセッションの最初の段階において、サーバコンピュータ装置１０２は、リモーティングされたアプリケーションの構造表現（例えば、ビジュアルツリー）を必要とせずに動作する。このようなシナリオにおいて、サーバコンピュータ装置１０２の１つまたは複数のアプリケーションからの全てのグラフィックのレンダリングは、単一の即時描画モードの可視表面（visible surface）をターゲットとする。一実装において、この可視表面は、フレームバッファとすることができる。
【００３５】
ＷＰＦアプリケーション（例えば、ＷＰＦアプリケーション２０８）が作成されると、サーバコンピュータ装置１０２のグラフィックシステムは、「構造リダイレクト（structural redirection）」モードと呼ばれる、新たな描画モードに遷移する。一実装において、構造リダイレクトモードは、構造リダイレクトエージェント４２２によって実装される。構造リダイレクトエージェント４２２は、１つまたは複数のビジュアルツリーを有する単一の即時モードの可視表面を保持する。このビジュアルツリーは、ビジュアルツリージェネレータ４１２によって作成され、対応する１つまたは複数のＷＰＦアプリケーション２０８によって制御される。前述のように、ビジュアルツリーは、様々な関係（例えば、１つまたは複数の視覚的要素間のアプリケーションウィンドウのｚ順）を定義する構造情報を含む。一実装において、構造情報は、ノードデータ４１６内部の構造情報データ４１８に格納される。
【００３６】
ウィンドウマネージャエージェント４２６は、構造情報を構造リダイレクトエージェント４２４に送信する。構造リダイレクトエージェント４２４は、ノードデータ４１６を収集して、クライアント側のビジュアルツリージェネレータ５１２に転送する。構造リダイレクトエージェント４２４によって保持されるビジュアルツリーは、デスクトップ全体を網羅している。一実装において、ウィンドウマネージャからのノードデータ４１６は、構造リダイレクトレイヤエージェント４２４から、クライアント側のビジュアルツリージェネレータ５１２に転送される。この段階では、ビジュアルツリーを保持すること、および、ビジュアルツリーでカバーされていないデスクトップの領域に対して任意の他の描画オペレーションを実行することにのみ、処理機能を使用してもよいことに留意されたい。リモート側では構成プロセスは起こらないので、構成素アプリケーション（constituent applications）を有するデスクトップは、未構成の状態である。この段階では、リモート側では任意の構造表現またはビジュアルツリーに対するラスタライズは起こらないことにも留意されたい。
【００３７】
（ウィンドウマネージャエージェント４２６からの）ノードデータ４１６が構造リダイレクトエージェント４２４によって収集されると、該ノードデータ４１６は、リモートディスプレイクライアントに送信される。構造リダイレクトエージェント４２４は、リモートディスプレイクライアント（例えば、クライアントコンピュータ装置１０６）に、該クライアント側で（すなわち、クライアントコンピュータ装置１０６で）ノードデータ４１６に対応するビジュアルツリーを再作成するように指示する。一実装において、クライアントコンピュータ装置１０６においてビジュアルツリーは、ビジュアルツリージェネレータ５１２によって生成される。作成されたビジュアルツリーは、リモーティングされたデスクトップの表現として子ツリーを有し、該デスクトップを通じてユーザによって実行されているＷＰＦアプリケーション２０８として、これと同じ数の他の子ツリーを有する。別の実装において、ビジュアルツリージェネレータ５１２によって生成されたビジュアルツリーは、他のデータ５１８に格納される。
【００３８】
１つまたは複数のＧＤＩアプリケーション２０４も、ＷＰＦアプリケーション２０８とともに、サーバコンピュータ装置１０２からリモーティングすることができる。この場合、ビジュアルツリーのルートノードの１つの子ノードが、全てのＧＤＩアプリケーション２０４によって表示されるコンテンツと関連付けられ、ユーザまたはクライアントによって実行中のＷＰＦアプリケーション２０８と同数の他の子ツリーを有する。一実装において、１つまたは複数のＧＤＩアプリケーション２０４と関連付けられたビジュアルコンテンツは、ラスタライズされたデータ４１６に格納される。
【００３９】
例えば、クライアントコンピュータ装置１０６などのクライアント側では、ビジュアルツリーを作成すると、クライアントコンピュータ装置１０６のディスプレイ実行モジュール５１０が、該ビジュアルツリーに従ってビジュアルコンテンツをレンダリングする。レンダリングされたビジュアルコンテンツは、ビジュアルデータ５１６に格納される。このように、デスクトップは、サーバコンピュータ装置１０２における該デスクトップのレンダリングおよび構成を必要とせずに、リモーティングされる。ディスプレイ実行モジュール５１０は、Windows（登録商標）Vista（登録商標）のオペレーティングシステムを有するクライアントコンピュータ装置１０６内の、メディアインフラストラクチャレイヤ（Media Infrastructure Layer）のレンダリングスレッドとすることができる。
【００４０】
例示的な方法
未構成のデスクトップにおけるＷＰＦベースのアプリケーションをリモーティングする例示的な方法を、図１から図５を参照して説明してきたが、図６を参照してより詳細に説明する。図６は、サーバコンピュータ装置１０２と、サーバコンピュータ装置１０２にホストされたアプリケーションにアクセスしようとする１つまたは複数のクライアントコンピュータ装置１０６との間で生じる対話を図示している。
【００４１】
これらの例示的な方法は、コンピュータ実行可能命令との一般的な関係において説明できる。一般的に、コンピュータ実行可能命令には、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造、プロシージャ、モジュール、機能、および特定の機能を実行するか、もしくは特定の抽象データ型を実装する同様のものが含まれる。本方法は、通信ネットワークを通じてリンクされるリモート処理装置によって機能が実行される、分散コンピューティング環境で実施することもできる。分散コンピュータ環境では、コンピュータ実行可能命令を、メモリ記憶装置を含む、ローカルおよびリモート両方のコンピュータ記憶媒体に配置することができる。
【００４２】
図７は、コンピューティングベースの装置において重複コード（overlapping code）を使用してソフトウェア保護を実装する例示的な方法７００を図示している。方法が記載される順序は、限定して解釈されることは意図されておらず、任意の数の記載された方法のブロックを、本方法または代替的な方法を実装する任意の順序で組み合わせることができる。さらに、本明細書で説明される対象の精神および範囲を逸脱することなく、個々のブロックを本方法から削除することができる。さらに、本方法を、任意の適切なハードウェア、ソフトウェア、ファームウェア、またはそれらの組み合わせで実装することができる。
【００４３】
ブロック７０２において、デスクトップ上の１つまたは複数の視覚コンポーネントが、相互に関連付けられる。例えば、視覚コンポーネントは、サーバコンピュータ装置１０２上で実行中の１つまたは複数のアプリケーションによって生成される、視覚的出力（例えば、Windows（登録商標）インタフェース）に対応する。一実装において、視覚コンポーネント間の関係は、表示すべきウィンドウのｚ順、相対的配置、透明性などとすることができる。
【００４４】
ブロック７０４において、第１のＷＰＦアプリケーションが開始されると、デスクトップ内で実行中の全てのアプリケーションのセットに関する構造情報データが収集され、ビジュアルツリージェネレータ５１２に送信される。例えば、ビジュアルツリーと関連付けられた構造情報が収集される。一実装において、構造リダイレクトエージェント４２２は、ウィンドウマネージャエージェントからの、ビジュアルツリーと関連付けられた構造情報データ４２１またはノードデータ４１６を収集する。一実装において、転送されたノードデータ４１６は、クライアント側のビジュアルツリージェネレータ５１２によって管理される。この段階では、ビジュアルツリーを保持する処理のみが行われることに留意されたい。構成素アプリケーションを有するデスクトップは、構造形式で表現されるので、未構成の状態である。
【００４５】
ブロック７０６において、ビジュアルツリーが、視覚コンポーネントを用いてノードとして作成される。上述のように、ビジュアルツリーは、表示すべき視覚コンポーネントの構造表現である。例えば、リモートセッションが開始されているとき、サーバコンピュータ装置１０２は、リモーティングされたアプリケーションと関連付けられた任意のビジュアルツリーなしに動作する。このようなシナリオにおいて、サーバコンピュータ装置１０２上の１つまたは複数のアプリケーションからの全てのグラフィックのレンダリングは、単一の即時描画モードの可視表面をターゲットとする。
【００４６】
ＷＰＦアプリケーション、例えば、ＷＰＦアプリケーション２０８が、サーバコンピュータ装置１０２で開始されると、該ＷＰＦアプリケーションのグラフィックシステムは、構造リダイレクトエージェント４２２を介して実装される、構造リダイレクトモードに遷移する。構造リダイレクトエージェント４２２は、単一の即時描画モードの可視表面を、例えばビジュアルツリー３００などの１つまたは複数のビジュアルツリーを用いて保持する。
【００４７】
ブロック７０８において、ビジュアルツリーがリモートクライアント側で構築される。例えば、構造リダイレクトエージェント４２２は、該ビジュアルツリーと関連付けられたノードデータ４１６を生成し、１つまたは複数のクライアントコンピュータ装置１０６内のビジュアルツリージェネレータ５１２に、ビジュアルツリーを再作成するように命令する。ビジュアルツリージェネレータ５１２によって作成されたビジュアルツリーは、転送されたノードデータ４１６に対応する。該作成されたビジュアルツリーは、リモーティングされたデスクトップを表す子ツリーのノードを有し、サーバコンピュータ装置１０２のユーザによって実行されているＷＰＦアプリケーション２０８と同数の他の子ツリーノードを有する。
【００４８】
ブロック７１０において、作成されたビジュアルツリーと適合するビジュアルコンテンツが、リモートクライアント側でレンダリングされる。例えば、ビジュアルツリーが作成されると、クライアントコンピュータ装置１０６のディスプレイ実行モジュール５１０は、該ビジュアルツリーの通りにビジュアルコンテンツをレンダリングする。一実装において、ディスプレイ実行モジュール５１０は、マイクロソフト（登録商標）社のVistaおよび同様のオペレーティングシステムのメディアインフラストラクチャレイヤのコンポーネント内のレンダースレッドである。
【００４９】
さらに、１つまたは複数のＧＤＩアプリケーション２０４も、ＷＰＦアプリケーション２０８とともに、サーバコンピュータ装置１０２からリモーティングされる。この場合、ビジュアルツリーのルートノードの１つの子ノードは、全てのＧＤＩアプリケーション２０４によって表示されるコンテントと関連付けられ、ユーザまたはクライアントによって実行されているＷＰＦアプリケーション２０８と同数の他の子ツリーを有する。ＧＤＩアプリケーション２０４と関連付けられたビジュアルコンテンツは、ＧＤＩアプリケーション２０４の即時描画モードでレンダリングされ、ＷＰＦアプリケーション２０８は、上記に例示された方法でレンダリングされる。
【００５０】
結論
未構成のデスクトップにおけるＷＰＦベースのアプリケーションをリモーティングするための実施形態について、構造的機能および／または方法に特有の言語で説明してきたが、特許請求の範囲の対象は、必ずしも説明した特定の機能または方法には限定されないことを理解されたい。むしろ、この特定の機能および方法は、コードの重複を使用するソフトウェア保護の例示的な実装として開示されている。
【図１】
2010525428.tif 000003
【図２】
2010525428.tif 000004
【図３】
2010525428.tif 000005
【図４】
2010525428.tif 000006
【図５】
2010525428.tif 000007
【図６】
2010525428.tif 000008
【図７】
2010525428.tif 000009
【国際調査報告】
2010525428.tif 000010
2010525428.tif 000011