(57)【要約】  ターミナルサービスセッションブローカのインフラストラクチャを活用して、サードパーティのプラグインアプリケーションをサポートする、アプリケーションプログラムインターフェース（ＡＰＩ）を提供する技術が説明される。一般的なシナリオにおいて、ユーザが、サードパーティのプラグインアプリケーションにアクセスするための接続を要求するとき、ＡＰＩは、セッションブローカロジックに優先し、セッションブローカ処理とインタラクトして、ユーザが接続され得るセッションまたは適切なサーバを識別し得る。ユーザは、識別されたセッションまたは適切なサーバを介して、サードパーティのプラグインアプリケーションにアクセスし得る。
2010538392.tif 000002
【特許請求の範囲】
【請求項１】
メモリと、
前記メモリに作動可能に接続される１つまたは複数のプロセッサと、
リモートクライアントのステータスおよび接続を監視する、前記メモリ内のセッションブローカモジュールと、
前記リモートクライアントが利用可能なセッションを識別する、前記メモリ内の拡張可能なアプリケーションプログラムインターフェース（ＡＰＩ）と
を備えることを特徴とするサーバ。
【請求項２】
前記セッションブローカモジュールが、クエリを前記リモートクライアントから受け取り、ＡＰＩに通知することを特徴とする請求項１に記載のサーバ。
【請求項３】
前記セッションブローカモジュールが、前記リモートクライアントを多数のサーバのうちの１つにダイレクトさせることを特徴とする請求項１に記載のサーバ。
【請求項４】
前記セッションブローカモジュールが、前記リモートクライアントが接続し得る１つまたは複数のサーバに存在するプラグインアプリケーションを初期化することを特徴とする請求項１に記載のサーバ。
【請求項５】
前記セッションブローカモジュールが、前記サーバ、前記リモートクライアント、および１つまたは複数のサーバを含むリモートアクセスシステム環境について、前記ＡＰＩの構成の変更を収集および提供することを特徴とする請求項１に記載のサーバ。
【請求項６】
前記セッションブローカモジュールが、前記ＡＰＩを初期化し、レジストリ内のプラグインアプリケーションの識別を判定する、初期化モジュールを含むことを特徴とする請求項１に記載のサーバ。
【請求項７】
前記セッションブローカモジュールが、ファンクションコールを生成して前記リモートクライアントのためのセッション情報を判定し収集する、ファンクション呼び出しモジュールを含むことを特徴とする請求項１に記載のサーバ。
【請求項８】
前記セッションブローカモジュールが、前記ファンクションコールが所定の時間を超えて保留中であるかどうかを判定する、監視モジュールを含むことを特徴とする請求項７に記載のサーバ。
【請求項９】
ファンクションコールが所定の時間を超えて保留中であるというエラーメッセージが生成されることを特徴とする請求項８に記載のサーバ。
【請求項１０】
ＡＰＩが、前記ファンクション呼び出しモジュールを起動して、前記リモートクライアントうちの１つに対して、多数のサーバのうちの１つを識別し、前記１つのリモートクライアントにセッションを提供することを特徴とする請求項７に記載のサーバ。
【請求項１１】
前記ＡＰＩは、前記リモートクライアントとサーバを接続するネットワークにわたる多数のソフトウェアコンポーネントが、お互いに通信することを可能にするコンポーネントオブジェクトモデルであることを特徴とする請求項１に記載のサーバ。
【請求項１２】
前記ＡＰＩが、前記セッションブローカモジュールを起動して、１つまたは複数のサーバ上に存在するプラグインアプリケーションを更新する、セッション変更通知を行うことを特徴とする請求項１に記載のサーバ。
【請求項１３】
前記ＡＰＩが、マシン変更通知について呼び出しを行い、セッションブローカモジュールを起動して情報を集め、リモートクライアントが接続する前記サーバおよび他のサーバにおける変更を報告することを特徴とする請求項１に記載のサーバ。
【請求項１４】
コンピュータ実行可能媒体上に実装される方法であって、
1つまたは複数のサーバ上に存在するプラグインアプリケーションにアクセスするためのセッションを求める要求を、クライアントから受け取るステップと、
前記セッションを取得するファンクションを呼び出すステップと、
前記クライアントの任意の既存のセッションを識別するステップと、
前記クライアントのユーザのための外部セッションを検索するステップと
を含むことを特徴とする方法。
【請求項１５】
前記受け取るステップが、サーバにリダイレクトするステップを含むことを特徴とする請求項１４に記載の方法。
【請求項１６】
前記外部セッションまたは別の外部セッションが存在するかどうかを判定するステップをさらに含むことを特徴とする請求項１４に記載の方法。
【請求項１７】
識別された外部セッションの、セッションの詳細を収集するステップをさらに含むことを特徴とする請求項１６に記載の方法。
【請求項１８】
既存のセッションに接続するステップをさらに含むことを特徴とする請求項１６に記載の方法。
【請求項１９】
ユーザのための適切なサーバを識別するステップをさらに含むことを特徴とする請求項１４に記載の方法。
【請求項２０】
前記適切なサーバの識別を収集するステップをさらに含むことを特徴とする請求項１９に記載の方法。
【請求項２１】
前記識別を有効にするステップをさらに含むことを特徴とする請求項２０に記載の方法。
【請求項２２】
前記識別が有効にされない場合、プラグインアプリケーションに対するエラーイベントが記録されることを特徴とする請求項２１に記載の方法。
【請求項２３】
前記適切なサーバがドレインモードである場合、プラグインエラーイベントのログをとるステップをさらに含むことを特徴とする請求項１９に記載の方法。
【請求項２４】
負荷分散の重みを有するサーバのリストから、前記適切なサーバを識別するステップをさらに含むことを特徴とする請求項１９に記載の方法。
【請求項２５】
前記適切なサーバのためのサーバリストを生成するステップをさらに含むことを特徴とする請求項１９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、セッションブローカ拡張性アプリケーションプログラムインターフェースに関する。
【背景技術】
【０００２】
ターミナルサービス（商標）（ＴＳ）システム等のリモートアクセスシステム環境において、いくつかのサーバコンピュータは、１つまたは複数のアプリケーションをいくつかのクライアント装置に対してホストし、かつ利用可能にでき、クライアント装置はネットワーク上でアプリケーションにアクセスする。一般に、ユーザは、一端であるサーバコンピュータとユーザ側の一端であるクライアント装置との間の接続を確立することにより、サーバコンピュータがホストするアプリケーションにリモートでアクセス可能である。そのような通信はユーザとサーバのとの間のセッションを作成し、その間、ユーザはインタラクトし、サーバコンピュータ上でホストされるアプリケーションを、アプリケーションがリモートクライアント装置上にローカルに存在するかのように、利用できる。
【０００３】
しかし、リモートアクセスシステム（例えば、ＴＳ）環境では、ユーザは、サーバコンピュータ上にロードされたサードパーティのアプリケーションにアクセスできない。サードパーティのアプリケーションは、「プラグイン」アプリケーションでもあり得、独立系ソフトベンダー（ＩＳＶ）により作成または提供され得る。一般的には、ＩＳＶは、サードパーティのアプリケーションにユーザをアクセス可能にするルーティング動作（処理）をユーザに提供し得ない。従って、サードパーティのアプリケーションが、リモートクライアント装置およびユーザによるアクセスのために、リモートサーバコンピュータ上でホストされる要求が存在する。
【発明の概要】
【０００４】
本要約は、サードパーティのプラグインアプリケーションをサポート可能なリモートアクセスシステムセッションブローカのインフラストラクチャを活用することに関する概念を説明するために提供される。これらの概念は、以下の発明を実施するための形態でさらに説明される。提示される要約は、請求項に記載されている主題事項の重要な特徴を確認することを意図しておらず、請求項に記載されている主題事項の範囲を決定する際に使用されることも意図していない。
【０００５】
一実装において、セッションブローカサーバは、リモートクライアントのステータスおよび接続と、クライアントが利用可能であり得るアプリケーション（プラグインアプリケーション）を有するサーバとを監視する。拡張可能なアプリケーションプログラムインターフェース（ＡＰＩ）は、リモートクライアントが利用可能なセッションを識別する。
【図面の簡単な説明】
【０００６】
発明を実施するための形態が、添付の図面を参照して説明される。図面において、参照番号の左端の桁の数字は、参照番号が最初に現れる図面を特定する。同一の番号が図面全体を通して使用されて、同様の特徴および構成要素を参照する。
【０００７】
【図１】リモートアクセスシステムセッションブローカのインフラストラクチャを活用して、サードパーティのプラグインアプリケーションをサポートするための、例示のネットワークアーキテクチャを説明するブロック図である。
【図２】リモートアクセスシステムセッションブローカのインフラストラクチャを活用して、サードパーティのプラグインアプリケーションをサポートするための、例示のアーキテクチャを説明するブロック図である。
【図３】リモートアクセスシステムセッションブローカのインフラストラクチャを活用して、サードパーティのプラグインアプリケーションをサポートするための、例示のサーバシステムを説明するブロック図である。
【図４】リモートアクセスシステムセッションブローカのインフラストラクチャを活用して、サードパーティのプラグインアプリケーションをサポートするための、例示の方法を説明するフローチャートである。
【図５】リモートアクセスシステムセッションブローカのインフラストラクチャを活用して、サードパーティのプラグインアプリケーションをサポートするための、別の例示の方法説明するフローチャートである。
【図６】例示のコンピュータ環境を説明するブロック図である。
【発明を実施するための形態】
【０００８】
本開示は、サードパーティのプラグインアプリケーションをサポートし得るリモートアクセスシステムセッションブローカのインフラストラクチャの技術に向けられる。リモートアクセスシステムの一例としては、本件出願人により提供されるターミナルサービス（商標）システムがある。ターミナルサービス（商標）システムは、以下の例において検討されるが、検討される技術が、他のリモートアクセスシステムに適用可能であることを理解されたい。
【０００９】
セッションブローカは、リモートアクセスシステム環境においてユーザの通信へのセッションの割り当てを制御する。セッションブローカは、セッションブローカに記憶されるセッション状態情報に基づき、ユーザにセッションを割り当てる。セッション状態情報は、例えば、セッションＩＤ、ユーザ名、セッションが存在しているサーバの名称、各サーバコンピュータ内のアクティブなセッションの数を含み得る。
【００１０】
リモートアクセスシステム環境において、サーバはユーザの接続要求を受け取り得る。サーバは、最初に接続要求を受け入れ、次にセッションブローカにクエリを行い、どこにユーザをリダイレクできるかを判定し得る。セッションブローカは、その特定の環境のセッション状態情報を分析し、ユーザがリダイレクされ得るサーバを識別する。適切なサーバが、前回ユーザによりアクセスされたが後に切断されたセッションを保有し得、そこにユーザが再度接続され得る。一実装において、ユーザが他の既存のセッションを全く保有していなくても、適切なサーバが、ユーザが接続できる新しいセッションを提供し得る。セッションブローカは、要求を受けたサーバに情報を送り、そのサーバが適切なサーバとの接続を確立することを可能にする。例えば、情報には、マシンＩＤ、セッションＩＤ、および適切なサーバの場所を含み得る。要求を受けたサーバは、受け取った情報を分析し、ユーザを適切なサーバにリダイレクトする。
【００１１】
ユーザが適切なサーバとの接続を確立すると、ユーザは、適切なサーバに存在するアプリケーションにアクセスできる。これらのアプリケーションは、ターミナルサービス環境から適切なサーバを識別する際に使用されたセッションブローカロジックに準拠し得る。
【００１２】
リモートアクセスシステム環境が直面する課題は、サードパーティのアプリケーション、および、特にプラグインアプリケーションへのアクセスをユーザに提供することである。本明細書に開示される技術は、リモートアクセスシステムセッションブローカのインフラストラクチャを活用してサードパーティのプラグインアプリケーションをサポートするアプリケーションプログラムインターフェース（ＡＰＩ）を提供することにより、本課題に対処する。一般的なシナリオにおいて、ユーザがサードパーティのプラグインアプリケーションにアクセスするための接続を要求するとき、ＡＰＩは、セッションブローカロジックに優先し、セッションブローカ処理とインタラクトしてユーザが接続できるセッションまたは適切なサーバを識別し得る。ユーザは、識別されたセッションまたは適切なサーバを介して、サードパーティのプラグインアプリケーションにアクセスし得る。
【００１３】
一実装において、サードパーティのプラグインアプリケーションは、リモートアクセスシステム環境においてなされる変更、例えば、新しいセッションの作成、セッションの削除、サーバ内の構成変更、セッションの接続および切断情報等から更新され得る。セッションブローカ処理は、リモートアクセスシステム環境における変更を管理し、その変更を、ＡＰＩからの命令の受け取り時にサードパーティのプラグインアプリケーションに通知できる。
【００１４】
本明細書に説明される技術は、多数の異なる作動環境およびシステムにおいて使用され得る。多数の様々な実装が以下に説明される。種々の実装を実践するのに適切な例示の環境が、以下の章において検討される。
【００１５】
リモートアクセスシステムセッションブローカのインフラストラクチャを活用して、サードパーティのプラグインアプリケーションをサポートするための、例示のシステムおよび方法論が、パーソナルコンピュータ等のコンピュータデバイスにより実行されるコンピュータ実行可能命令（プログラムモジュール）の一般的なコンテキストに即して説明される。プログラムモジュールは、一般に、特定のタスクを実行し、または、特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含む。システムおよび方法が前述の文脈において説明され、一方、以下に説明される動作および作動は、ハードウェアまたは他の形式のコンピューティングプラットフォームにおいて実装される。
【００１６】
例示のネットワークアーキテクチャ
図１は、リモートアクセスシステムセッションブローカのインフラストラクチャを活用して、サードパーティのプラグインアプリケーションをサポートするための、例示のネットワークアーキテクチャ１００を示す。この目的を達成するために、ネットワークアーキテクチャ１００が説明される。ネットワークアーキテクチャ１００は、多数のクライアント装置１０２−１、１０２−２、．．．、１０２−Ｎ（まとめてクライアント装置１０２と呼ぶ）を含み、これらクライアント装置が、サーバ集合１０４、外部サーバまたはサーバ１０６、およびセッションブローカサーバ１０８と、ネットワーク１１０を介して接続され得る。一実装において、サーバ集合１０４、サーバ１０６およびセッションブローカサーバ１０８は、ネットワークアーキテクチャ１００において世界中に広がる多くのパーソナルコンピュータ（ＰＣ）、ウェブサーバ、および他のコンピュータデバイスとインタラクトし得る。あるいは、別の可能な実装において、ネットワークアーキテクチャ１００は、ローカルエリアネットワーク（ＬＡＮ）またはワイドエリアネットワーク（ＷＡＮ）等を介して単一のサーバと通信する限定される数のＰＣを含むことが可能である。
【００１７】
ネットワーク１１０は、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク、無線ネットワーク、光ネットワーク、メトロポリタンエリアネットワーク（ＭＡＮ）等であり得る。クライアント装置１０２は、汎用コンピュータデバイス、ラップトップ、モバイルコンピュータデバイス等であり得る。
サーバ集合１０４は、多数のサーバ１１２−１、１１２−２、．．．、１１２−Ｎ（まとめてサーバ１１２と呼ぶ）を含み得る。サーバ１１２は、クライアント装置１０２が利用可能なプラグイン１１４を有し得る。プラグイン１１４は、例えば、サードパーティのプラグインアプリケーション、および任意の他のソフトウェアアプリケーションを含み得る。上記で検討したように、サーバ１１２とクライアント装置１０２との間に作成されるセッションは、クライアント装置１０２により、サーバ１１２内でホストされるプラグイン１１４にアクセス可能になる。サーバ１１２は、セッションブローカサーバ１０８から受け取られた命令に基づき、これらのセッションを作成する。
【００１８】
一実装において、クライアント装置１０２−１は、サーバ集合１０４に、そこでホストされるプラグイン１１４にアクセスする要求を送ることができる。サーバ集合１０４のうちのサーバ１１２−１が要求を受け入れ、クライアント装置１０２−１との接続を確立する。サーバ１１２−１は、セッションブローカサーバ１０８にクエリを送り、クライアント装置１０２−１をどこにリダイレクをするかを判定し得る。なお、サーバ集合１０４のうちの任意のサーバ１１２が、クライアント装置１０２−１からの接続要求を受け入れ可能である。別の実装において、サーバ１１２−１は、専用のリダイレクタとして動作し、クライアント装置１０２−１からの接続要求を受け入れ得る。そのような実装において、接続を要求しているクライアント装置１０２−１が、最初にサーバ１１２−１に接続し得る。
【００１９】
セッションブローカサーバ１０８は、セッションブローカモジュール１１６および拡張可能ＡＰＩ  １１８を実装でき、サーバ１１２−１により送られるクエリを処理し、クライアント装置１０２−１に提供され得るセッションを識別する。拡張可能ＡＰＩ  １１８は、サーバネットワークコンピュータデバイスを介して分散されるいくつかのソフトウェアコンポーネントが、お互いに通信することを可能にする、分散型コンポーネントオブジェクトモデル（ＤＣＯＭ）ベースのインターフェースであり得る。一実装において、拡張可能ＡＰＩ  １１８は、ネットワーク環境における種々のソフトウェアコンポーネント間の通信を可能にするコンポーネントオブジェクトモデル（ＣＯＭ）ベースのインターフェースであり得る。
【００２０】
一実装において、セッションブローカモジュール１１６は、クエリを受取り、拡張可能ＡＰＩ  １１８にクエリの受け取りを通知できる。拡張可能ＡＰＩ  １１８は、セッションブローカモジュール１１６をトリガしてセッションを識別し得るファンクションコールを生成する。識別されたセッションは、以前にクライアント装置１０２−１と関連づけられた既存のセッションであり得る。
【００２１】
セッションブローカモジュール１１６は、次に、サーバ１１２−１に命令して、クライアント装置１０２−１を既存のセッションを有する任意の１つのサーバ１１２、例えば、サーバ１１２−２にリダイレクトさせ得る。この例において、サーバ１１２−１は、クライアント装置１０２−１をリダイレクトして、サーバ１１２−２との接続を確立する。別の実装において、セッションブローカモジュール１１６は、また、クライアント装置１０２−１を、既存のセッションを有する、サーバ集合１０４の外部にあるサーバ１０８にリダイレクトし得る。
【００２２】
さらに別の実装において、セッションブローカモジュール１１６は、リモートアクセスシステム環境において既存のセッションを全く有し得ないクライアント装置１０２−１に提供され得る、新しいセッションを有する任意の適切なサーバ１１２を識別する。セッションブローカモジュール１１６は、次に、サーバ１１２−１に命令して、クライアント装置１０２−１をサーバ１１２のうちの適切なサーバにリダイレクトし得る。さらに別の実装において、セッションブローカモジュール１１６は、サーバ１０８を、新しいセッションをクライアント装置１０２−１に提供する能力があるものとして識別できる。
【００２３】
例示のシステムアーキテクチャ
図２は、リモートアクセスシステムセッションブローカのインフラストラクチャを活用して、サードパーティのプラグインアプリケーションをサポートするための、例示のシステムアーキテクチャ２００を示す。システムアーキテクチャ２００は、サーバ集合１０４のうちの１つのサーバ、例えば、サーバ１１２−１と、セッションブローカサーバ１０８との間のインタラクションを例示する。サーバ１１２−１は、リモートセッションマネージャ２０４およびローカルセッションマネージャ２０６とインタラクトするセッションブローカクライアント２０２を含み得る。なお、サーバ集合１０４内のサーバ１１２は、それらのそれぞれのセッションブローカクライアント、リモートセッションマネージャ、およびローカルセッションマネージャを含み得る。セッションブローカサーバ１０８は、さらにレジストリ２０８および拡張可能ＡＰＩ  １１８とインタラクトするセッションブローカモジュール１１６を含み得る。
【００２４】
サーバ１１２−１は、最初にクライアント装置１０２−１に接続し、クライアント装置１０２−１からのセッションへの接続要求を受け取る。セッションブローカクライアント２０２は、その要求をクライアント情報と共に収集する。クライアント情報には、例えば、マシンＩＤおよびリモートアクセスシステム環境における、クライアント装置１０２の場所が含まれ得る。セッションブローカクライアント２０２は、その要求とクライアント情報の両方をセッションブローカモジュール１１６に送る。このセッションブローカモジュール１１６は、セッションブローカ処理２１０の一部として示される種々の機能を実行して、サーバ１１２のうち、クライアント装置１０２−１がリダイレクトされ得るサーバを識別できる。
【００２５】
作動中、セッションブローカモジュール１１６は、拡張可能ＡＰＩ  １１８に要求の受け取りについて通知できる。一実装において、セッションブローカモジュール１１６は、一機能、すなわち初期化２１２を実行して、プラグイン１１４を初期化し得る。初期化２１２の処理中、セッションブローカモジュール１１６は、レジストリ２０８からプラグイン１１４のクラスＩＤを判定する。レジストリ２０８には、例えば、種々のプラグインアプリケーションのクラスＩＤ、ハードウェアの設定に関する情報、作動中のシステム、非作動中のシステム、クライアント装置、サーバが含まれ得る。プラグイン１１４のクラスＩＤの識別に従って、セッションブローカモジュール１１６は、プラグイン１１４のインスタンスを作成でき、今度はプラグイン１１４を初期化する。
【００２６】
インスタンスが作成されると、拡張可能ＡＰＩ  １１８は、セッションブローカモジュール１１６をトリガして、切断されたセッション２１４として表わされるファンクションコール「ＴＳＳＤＲｐｃＧｅｔＵｓｅｒＤｉｓｃｏｎｎｅｃｔｅｄＳｅｓｓｉｏｎｓ」を初期化し、クライアント装置１０２−１がリダイレクトされ得るセッションを識別できる。一実装において、切断されたセッション２１４は、クライアント装置１０２−１が以前に接続されたが、後に切断された既存のセッションを判定し得る。そのようなシナリオにおいて、セッションブローカモジュール１１６は、ファンクションコール、すなわち「ＴＳＳＤＲｐｃＰｉｎｇＳＤ」および「ＴＳＳＤＲｐｃＱｕｅｒｙＳＤＶｅｒｓｉｏｎ」を行い、セッションディレクトリから既存のセッションを識別し、同時に、セッションディレクトリのバージョンを判定し得る。上記のファンクションコールは、それぞれｐｉｎｇセッションディレクトリ２１６およびセッションディレクトリバージョン２１８として示され得る。既存のセッションは、サーバ集合１０４内のサーバ１１２の任意の１つと関連付けられるセッションであり得る。別の実装において、既存のセッションは、サーバ集合１０４の外部に置かれるサーバ１０６と関連付けられ得る。
【００２７】
既存のセッションの識別時、セッションブローカモジュール１１６は、セッションの詳細、例えば、セッションＩＤ、マシンＩＤ、および、既存のセッションを提供し得るサーバ（例えば、サーバ１１２−１）に関連する場所を収集し得る。例えば、セッションブローカモジュール１１６は、次に、セッションの詳細を、接続を確立するための命令とともにリモートセッションマネージャ２０４へ送り得る。リモートセッションマネージャ２０４は、セッションの詳細に基づきサーバ１１２のうちのサーバ１１２−２を識別し、クライアント装置１０２−１をサーバ１１２−２にリダイレクトして、接続を確立する。クライアント装置１０２−１をリダイレクトする処理の間、リモートセッションマネージャ２０４は、サーバ１１２−２へ接続要求を送り得る。
【００２８】
セッションブローカモジュール１１６は、継続して接続のステータスを監視し、リモートアクセスシステム環境において起こる拡張可能ＡＰＩ  １１８の任意の変更を更新する。監視処理の間、セッションブローカモジュール１１６は、サーバ再接続保留２２０として示されるファンクションコール（すなわち、「ＴＳＳＤＲｐｃＳｅｔＳｅｒｖｅｒＲｅｃｏｎｎｅｃｔＰｅｎｄｉｎｇ」）を行い、拡張可能ＡＰＩ  １１８に、サーバ１１２−２との接続要求が保留中であることを通知できる。
【００２９】
接続が確立されると、セッションブローカモジュール１１６は、接続のステータスを拡張可能ＡＰＩ  １１８に報告可能となる。例えば、セッションブローカモジュール１１６は、セッション再接続済２２２として示されるファンクションコール「ＴＳＳＤＲｐｃＳｅｔＳｅｓｓｉｏｎＲｅｃｏｎｎｅｃｔｅｄ」を行い、拡張可能ＡＰＩ  １１８にクライアント装置１０２−１が接続されることを確認できる。
【００３０】
拡張可能ＡＰＩ  １１８は、セッションブローカモジュール１１６を起動して、別のファンクションコール（すなわち、切断されたセッション２１４）を生成し、クライアント装置１０２−１に提供できる新しいセッションを識別し得る。そのような場合、セッションブローカモジュール１１６は、サーバ集合１０４のうちの、例えば、サーバ１１２−２で、または外部サーバ１０６であり得るサーバに関連するサーバの詳細を収集し、そのサーバの詳細をリモートセッションマネージャ２０４に送る。リモートセッションマネージャ２０４は、クライアント装置１０２−１に指示して、サーバ１１２−２またはサーバ１０６との新しいセッションを作成させる。一実装において、セッションブローカモジュール１１６は、新しいセッションが作成されたかどうかを確認し、それに従ってファンクションコール、すなわち、セッション作成２２４として表わされる「ＴＳＳＤＲｐｃＣｒｅａｔｅＳｅｓｓｉｏｎ」を起動して、プラグイン１１４に新しいセッションの作成について通知する。
【００３１】
上記の実装において、拡張可能ＡＰＩ  １１８は、無作為にしかし継続的に、セッションブローカモジュール１１６を起動して、セッション切断済２２６として表わされるファンクションコール（すなわち、「ＴＳＳＤＲｐｃＳｅｔＳｅｓｓｉｏｎＤｉｓｃｏｎｎｅｃｔｅｄ」）を行い、プラグイン１１４にクライアント装置１０２−１とサーバ１１２−２を接続しているセッションまたはサーバ１０６との接続が切断されていることを通知できる。そのような状況において、セッションブローカモジュール１１６は、ローカルセッションマネージャに命令して切断されたセッションを監視させ得る。
【００３２】
上記に加えて、拡張可能ＡＰＩ  １１８は、セッションブローカモジュール１１６をトリガして、リモートアクセスシステム環境においてなされる構成変更に関する情報を提供し得る。そのようなシナリオにおいて、セッションブローカモジュール１１６は、構成変更に関する情報を収集し、変更があればその変更をプラグイン１１４報告する、構成設定２２８として示されるファンクションコール（すなわち、「ＴＳＳＤＲｐｃＵｐｄａｔｅＣｏｎｆｉｇｕｒａｔｉｏｎＳｅｔｔｉｎｇ」）を起動し得る。
【００３３】
拡張可能ＡＰＩ  １１８は、セッションブローカモジュール１１６に命令して、クライアント装置１０２−１に接続されるサーバ１１２−２またはサーバ１０８のステータスを識別させる。セッションブローカモジュール１１６は、命令を受け取った後、ファンクションコール、すなわち、それぞれサーバオンライン２３０およびサーバオフライン２３２として示される「ＴＳＳＤＲｐｃＳｅｖｅｒＯｎｌｉｎｅＥｘ」および「ＴＳＳＤＲｐｃＳｅｖｅｒＯｆｆｌｉｎｅ」を行い、サーバ１１２−２またはサーバ１０８がオフラインであるかどうかをプラグイン１１４に通知し得る。
【００３４】
拡張可能ＡＰＩ  １１８は、セッションブローカモジュール１１８とインタラクトして、リモートアクセスシステム環境において、特定の時間に稼働する種々のセッションのステータスを判定し得る。そのような実装において、セッションブローカモジュール１１８は、ファンクションコール、例えば、セッション削除２３４として示される「ＴＳＳＤＲｐｃＤｅｌｅｔｅＳｅｓｓｉｏｎ」を起動し、プラグイン１１４にセッションが削除されることを通知し得る。セッションブローカモジュール１１８は、ファンクションコール、すなわち、全セッション再投入２３６として示される「ＴＳＳＤＲｐｃＲｅｐｏｐｕｌａｔｅＡｌｌＳｅｓｓｉｏｎ」を起動し、セッションブローカモジュール１１８により管理される全てのセッションのステータスをチェック可能である。
【００３５】
例示のセッションブローカサーバ
図３は、リモートアクセスシステムセッションブローカのインフラストラクチャを活用してサードパーティのプラグインアプリケーションをサポートすることに関連する、セッションブローカサーバ１０８のある機能的態様について詳細に説明する。サーバ１０８には、プロセッサ３００およびシステムメモリ３０２が含まれる。サーバ１０８には、さらにネットワークインターフェース３０４が含まれ、図１に記載されるネットワーク１０２等の多種のネットワークへの接続性、ならびに、有線のネットワーク（例えば、ＬＡＮ、ケーブル）および無線のネットワーク（例えば、ＷＬＡＮ、セルラ方式、衛星）等のプロトコルタイプを提供する。入出力インターフェース３０６は、サーバ１０８にデータの入力および出力の能力を提供する。入出力インターフェース３０６には、例えば、マウスポート、キーボードポートが含まれ得る。
【００３６】
システムメモリ３０２は、プログラムモジュール３０８およびプログラムデータ３１０を記憶する。プログラムモジュール３０８には、セッションブローカモジュール１１６、拡張可能ＡＰＩ  １１８、および他のアプリケーションプログラムモジュール３１２（例えば、ランタイム環境、多数のユーザ間のネットワーク化された通信を提供するオペレーティングシステム（ＯＳ））が含まれ得る。
【００３７】
セッションブローカモジュール１１６は、リモートアクセスシステム環境に対して中央装置として動作すること、接続を要求するクライアント装置１０２にセッションを割り当てること、および、リモートアクセスシステム環境においてセッションを監視することを含むいくつかの責務を負う。セッションブローカモジュール１１６には、初期化モジュール３１４、ファンクション呼び出しモジュール３１６、監視モジュール３２０および再結合モジュール３１８が含まれ得る。
【００３８】
上記で検討したように、セッションブローカモジュール１１６を採用して、クライアント装置１０２−１によりサーバ１１２−１を介して送られるセッションの要求を受け取り得る。受け取った要求に基づき、初期化モジュール３１４が、拡張可能ＡＰＩ  １１８を初期化する。初期化モジュール３１４は、レジストリ２０８からプラグイン１１４のクラスＩＤを判定し得る。プラグイン１１４のクラスＩＤがレジストリに記憶されるクラスＩＤと一致すると、初期化モジュール３１４は、インスタンスを作成して、拡張可能ＡＰＩ  １１８を初期化し得る。
【００３９】
拡張可能ＡＰＩ  １１８は、セッションブローカモジュール１１６に命令して、以前に検討したような適切なファンクションコールを生成し、クライアント装置１０２−１がリダイレクトされ得るセッションを識別する。従って、ファンクションコール、例えば、外部セッション集合３２２として示される「ＷＴＳＳＢＸ＿ＧｅｔＵｓｅｒＥｘｔｅｒｎａｌＳｅｓｓｉｏｎ」を呼び出して、リモートアクセスシステム環境に存在する外部セッションを識別する。外部セッションは、サーバ集合１０４の外部に置かれるサーバ１０６により提供されるセッションであり得る。そのような場合、外部セッション集合３２２は、ファンクション呼び出しモジュール３１６をトリガして、切断されたセッション２１４等のファンクションコールを生成し、サーバ１０６が外部セッションをクライアント装置１０２−１に対して提供可能であるかどうかを判定し、また、外部接続されている場合にセッションの詳細を収集できる。その後、セッションブローカモジュール１１６は、セッションの詳細を収集し、クライアント装置１０２−１を、サーバ１１２−１を介してサーバ１０６にダイレクトさせる。
【００４０】
ファンクション呼び出しモジュール３１６によりなされるファンクションコールは、監視モジュール３１８により監視されて、ファンクションコールが所定の時間を超えて保留中であるかどうかを判定し得る。所定の時間は、管理者等のユーザによりプリセットされ得る。ファンクションコールが所定の時間を超えて保留のままである場合、監視モジュール３１８は、セッションブローカモジュール１１６に命令して、プラグイン１１４が失敗した場合にエラーメッセージのログをとらせ得る。その後、セッションブローカモジュール１１６は、拡張可能ＡＰＩ  １１８を再度起動できる。
【００４１】
一実装において、外部セッション集合３２２は、ファンクション呼び出しモジュール３１６をトリガして、ファンクションコールを生成し、クライアント装置１０４に関連する既存のセッションをリモートアクセスシステム環境から判定し得る。ファンクション呼び出しモジュール３１６は、今度は、ｐｉｎｇセッションディレクトリ２１６およびセッションディレクトリバージョン２１８等のファンクションコールを生成して、クライアント装置１０２−１の既存のセッションをセッションディレクトリから識別する。ファンクション呼び出しモジュール３１６は、サーバ集合１０４内の任意の１つのサーバ１１２、例えば、既存のセッションを提供する能力があるサーバ１１２−２を識別し得る。そのようなシナリオにおいて、ファンクション呼び出しモジュール３１６は、サーバ１１２−２のサーバの詳細を収集し、それらのサーバの詳細をセッションブローカモジュール１１６に提供する。サーバの詳細に基づき、セッションブローカモジュール１１６は、クライアント装置１０２−１をサーバ１１２にダイレクトし得る。別の実装において、既存のセッションは、サーバ集合１０４の外部に置かれるサーバ１０６により提供され得る。
【００４２】
拡張可能ＡＰＩ  １１８は、ファンクション呼び出しモジュール３１６を起動して、ファンクションコール、すなわち適切なサーバ集合３２４を行い、新しいセッションをクライアント装置１０２−１に提供可能である適切なサーバを、サーバ集合１０４または外部サーバ１０６から識別し得る。例えば、ファンクション呼び出しモジュール３１６は、ファンクションコール、すなわち「ＷＴＳＳＢＸ＿ＧｅｔＭｏｓｔＳｕｉｔａｂｌｅＳｅｒｖｅｒ」を行い、新しいセッションをクライアント装置１０２−１に提供可能である適切なサーバを識別し得る。従って、ファンクション呼び出しモジュール３１６は、接続に適切であると思われる適切なサーバに関連するサーバの詳細を収集し、セッションブローカモジュール１１６がサーバ１１２−１に命令してクライアント装置１０４と適切なサーバとの間の接続を確立させることを可能にする。
【００４３】
ファンクションコールは、上記で検討したように、監視モジュール３１８により監視されて、ファンクションコールが所定の時間を超えて保留中であるかどうかを判定し得る。ファンクションコールが所定の時間を超えて保留の状態である場合、監視モジュール３１８は、セッションブローカモジュール１１６に命令して、プラグイン１１４が失敗した場合にエラーメッセージのログをとらせ得る。その後、監視モジュール３１８は、拡張可能ＡＰＩ  １１８をリダイレクトして、セッションブローカモジュール１１６の負荷分散アルゴリズムとインタラクトする。負荷分散アルゴリズムは、セッションブローカモジュール１１６が適切なサーバのリストを識別するのを可能にする。セッションブローカモジュール１１６は、最小数のセッションを有する適切なサーバを識別し、サーバ１１２−１に命令してクライアント装置１０２−１を適切なサーバにリダイレクトさせる。
【００４４】
上記の実装において、拡張可能ＡＰＩ  １１８は、セッションブローカモジュール１１６をトリガして、セッションにおいて起こる変更についてプラグイン１１４を更新する、セッション変更通知３２６の呼び出しを行うよう構成され得る。例えば、拡張可能ＡＰＩ  １１８は、ファンクションコール、すなわち「ＷＴＳＳＢＸ＿ＳｅｓｓｉｏｎＣｈａｎｇｅＮｏｔｉｆｉｃａｔｉｏｎ」を行い、セッションブローカモジュール１１６が、セッションにおいて起こる任意の変更、例えば、新しいセッションの作成、既存のセッションの切断、セッションの再接続、およびセッションの削除、についての情報を収集するのを可能にする。
【００４５】
一実装において、ファンクションコール、すなわち、ＷＴＳＳＢＸ＿ＳｅｓｓｉｏｎＣｈａｎｇｅＮｏｔｉｆｉｃａｔｉｏｎ」が、所定の時間より長く保留のままであり、プラグイン１１４が失敗したとき、エラーイベントのログがとられる。
【００４６】
加えて、拡張可能ＡＰＩ  １１８は、マシン変更通知３２８として示される「ＷＴＳＳＢＸ＿ＭａｃｈｉｎｅＣｈａｎｇｅＮｏｔｉｆｉｃａｔｉｏｎ」の呼び出しを行い、セッションブローカモジュール１１６を起動して情報を集め、次にリモートアクセスシステム環境においてサーバ１１２および外部サーバ１０６内で起こる変更について、プラグイン１１４に報告し得る。起こる変更には、サーバにおける構成変更、およびサーバのステータスにおける変更（すなわち、サーバのオンラインまたはオフラインステータス）が含まれ得る。一実装において、ファンクションコール「ＷＴＳＳＢＸ＿ＭａｃｈｉｎｅＣｈａｎｇｅＮｏｔｉｆｉｃａｔｉｏｎ」が、所定の時間より長い間保留のままでありプラグイン１１４が失敗したとき、エラーイベントのログがとられる。
【００４７】
例示の方法
リモートアクセスシステムセッションブローカのインフラストラクチャを活用してサードパーティのプラグインアプリケーションをサポートするための例示の処理が、図１から図３を参照して説明される。これらの処理は、コンピュータ実行可能命令の一般的なコンテキストに即して説明され得る。一般に、コンピュータ実行可能命令は、特定のファンクションを実行し、または、特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造、プロシージャ、モジュール、ファンクション、等を含むことが可能である。処理は、また、ファンクションが通信ネットワークを介してリンクされるリモート処理装置により実行される、分散型コンピュータ環境において実践され得る。分散型コンピュータ環境において、コンピュータ実行可能命令は、メモリ記憶装置を含む、ローカルおよびリモート両方のコンピュータ記憶媒体に配置され得る。
【００４８】
図４は、リモートアクセスシステムセッションブローカのインフラストラクチャを活用して、サードパーティのプラグインアプリケーションをサポートするための、例示の方法４００を説明する。処理４００は、論理フロー図のブロックの集合として説明され、ハードウェア、ソフトウェア、またはその組み合わせにおいて実装可能である一連の作動を表わす。ソフトウェアのコンテキストに即して、ブロックは、１つまたは複数のプロセッサにより実行されるとき記載の作動を実行する、コンピュータ命令を表わす。
【００４９】
方法が記載される順番は、限定として解釈されることを意図しておらず、任意の数の記載される方法のブロックが任意の順番で組み合わせられて、方法または代替の方法を実装することが可能である。加えて、個々のブロックは、本明細書に記載される主題事項の精神および範囲から逸脱することなく、本方法から削除されても良い。さらに、本方法は、任意の適切なハードウェア、ソフトウェア、ファームウェア、またはその組み合わせにおいて、本発明の精神から逸脱することなく実装され得る。
【００５０】
ブロック４０２において、ユーザはセッションへの接続を要求する。一実装において、クライアント装置１０２−１のユーザは、サーバ上でホストされるプラグイン１１４または任意の他のアプリケーションにアクセスするために、サーバ１１２−１に対してセッションの要求を行う。セッションブローカモジュール１１６は、最初はクライアント装置１０２−１に接続されるサーバ１１２−１からセッションの要求を受け取る。その後、セッションブローカモジュール１１６は、プラグイン１１４に関連する拡張可能ＡＰＩ  １１８を初期化する。
【００５１】
ブロック４０４において、ファンクションコール、すなわち「ＧｅｔＵｓｅｒＤｉｓｃｏｎｎｅｃｔｅｄＳｅｓｓｉｏｎ」を呼び出して、セッションを取得する。一実装において、クライアント装置１０２−１のリダイレクタとして動作するサーバ１１２−１が、セッションブローカサーバ１０８に対してファンクションコールを行う。セッションブローカサーバ１０８のセッションブローカモジュール１１６は、ファンクションコールを受け取り、拡張可能ＡＰＩにファンクションコールを通知する。
【００５２】
ブロック４０６において、ファンクションコール、すなわち「ＧｅｔＵｓｅｒＥｘｔｅｒｎａｌＳｅｓｓｉｏｎ」が、「ＧｅｔＵｓｅｒＤｉｓｃｏｎｎｅｃｔｅｄＳｅｓｓｉｏｎ」の呼び出しに応答して行われる。セッションブローカモジュール１１６は、サーバ１１２−１によりなされるサーバファンクションコールを拡張可能ＡＰＩ  １１８に送り得る。この拡張可能ＡＰＩ  １１８は、このサーバファンクションコールの受け取り時に、ファンクションコール「ＧｅｔＵｓｅｒＥｘｔｅｒｎａｌＳｅｓｓｉｏｎ」を行い、クライアント装置１０２−１のためのセッションを識別できる。
【００５３】
ブロック４０８において、クライアント装置のユーザのための外部セッションが検索される。拡張可能ＡＰＩ  １１８により起動されるファンクションコール「ＧｅｔＵｓｅｒＥｘｔｅｒｎａｌＳｅｓｓｉｏｎ」は、セッションブローカモジュール１１６をトリガして、リモートアクセスシステム環境において存在するユーザ外部セッションを識別できる。
【００５４】
ブロック４１０において、外部セッションが存在するかどうか、判定がなされる。外部セッションが存在する場合（すなわち、ブロック４１０からの「はい」の経路）、クライアント装置１０２−１がサーバ１０６にリダイレクトされて、外部セッションを確立する。外部セッションがリモートアクセスシステム環境において存在しない場合（すなわち、ブロック４１０からの「いいえ」の経路）、クライアント装置１０２−１に関連する既存のセッションが、ブロック４１４において識別される。
【００５５】
ブロック４１６において、既存のセッションが識別された後、その既存のセッションの、セッションの詳細が、収集される。そのようなセッションの詳細は、セッションブローカサーバ１０８に記憶されるセッションディレクトリに記憶できる。
【００５６】
ブロック４１８において、既存のセッションを有するサーバとの接続が確立される。セッションブローカモジュール１１６は、命令を、既存のセッションを有する適切なサーバのセッションの詳細とともに、クライアント装置１０２−１をリダイレクトするよう構成されるサーバ１１２−１に送る。サーバ１１２−１は、セッションの詳細に基づき適切なサーバを識別し、クライアント装置１０２−１を適切なサーバにリダイレクトして、接続を確立する。
【００５７】
図５は、リモートアクセスシステムセッションブローカのインフラストラクチャを活用して、サードパーティのプラグインアプリケーションをサポートするための、別の例示の方法５００を説明する。ブロック５０２において、セッションへの接続要求がなされる。セッションブローカモジュール１１６は、サーバ、例えば、最初にクライアント装置１０２−１に接続されるサーバ１１２−１を介して、セッションの要求を受け取り得る。その後、セッションブローカモジュール１１６は、プラグイン１１４に関連する拡張可能ＡＰＩ  １１８を初期化する。
【００５８】
ブロック５０４において、ファンクションコール「ＧｅｔＵｓｅｒＤｉｓｃｏｎｎｅｃｔｅｄＳｅｓｓｉｏｎ」を呼び出し、セッションを取得する。一実装において、クライアント装置１０２−１のリダイレクタとして動作するサーバ１１２−１は、セッションブローカサーバ１０８に対してファンクションコールを行い得る。セッションブローカサーバ１０８のセッションブローカモジュール１１６は、ファンクションコールを受け取り、拡張可能ＡＰＩ  １１８にファンクションコールを通知する。
【００５９】
ブロック５０６において、「ＧｅｔＭｏｓｔＳｕｉｔａｂｌｅＳｅｒｖｅｒ」の呼び出しに応答して、ファンクションコール「ＧｅｔＵｓｅｒＥｘｔｅｒｎａｌＳｅｓｓｉｏｎ」が行われる。セッションブローカモジュール１１６は、サーバ１１２−１を拡張可能ＡＰＩ  １１８にリダイレクトすることによりなされる、サーバファンクションコールを送り得る。拡張可能ＡＰＩ  １１８は、このサーバファンクションコールの受け取り時に、セッションブローカモジュール１１６を起動して、適切なサーバ、例えば、サーバ１１２または外部サーバ１０６のうちの、クライアント装置１０２−１がリダイレクトされ得る任意のサーバを識別する、ファンクションコール「ＧｅｔＭｏｓｔＳｕｉｔａｂｌｅＳｅｒｖｅｒ」を呼び出し得る。
【００６０】
ブロック５０８において、適切なサーバに関連するサーバＩＤが収集される。セッションブローカモジュール１１６は、リモートアクセスシステム環境における適切なサーバのサーバＩＤを集める。
【００６１】
ブロック５１０において、適切なサーバのサーバＩＤが有効にされる。一実装において、セッションブローカモジュール１１６は、レジストリ２０８をチェックして、サーバＩＤがレジストリ２０８に存在するかどうかを識別し、または、サーバＩＤが適切なサーバに関連するかどうかをチェックする。
【００６２】
別の実装において、セッションブローカモジュール１１６は、サーバＩＤを有する適切なサーバがドレインモードであるかどうかを判定し得る。適切なサーバがドレイン（ｄｒａｉｎ）モードの場合、適切なサーバは、他のユーザからの任意の新しいリモートログオンを拒否できる。さらに、そのような条件において、既存のセッションをサーバとともに有するリモートアクセスシステム環境におけるユーザが、再接続され得る。さらに別の実装において、セッションブローカモジュール１１６は、所望のサーバＩＤを有する適切なサーバが、適切なサーバに割り当てられる最大数のセッションを越えたかどうかをチェックできる。
【００６３】
ブロック５１２において、サーバＩＤが有効かどうかについて、判定がなされる。サーバＩＤが有効の場合（すなわち、ブロック５１２からの「はい」の経路）、クライアント装置１０２−１はリダイレクトされて、ブロック５１４において、適切なサーバとの接続を確立する。サーバＩＤが有効でない場合（すなわち、ブロック５１２からの「いいえ」の経路）、プラグインのエラーイベントのログがとられる。例えば、拡張可能ＡＰＩ  １１８により呼び出されるファンクションコール「ＷＴＳＳＢＸ＿ＧｅｔＭｏｓｔＳｕｉｔａｂｌｅＳｅｖｅｒ」が無効なサーバＩＤを戻すとき、警告のログがとられる。
【００６４】
別のシナリオにおいて、ファンクションコール「ＷＴＳＳＢＸ＿ＧｅｔＭｏｓｔＳｕｉｔａｂｌｅＳｅｒｖｅｒ」が、クライアント装置１０２−１をドレインモードの適切なサーバにリダイレクトする場合、プラグインエラーイベントは警告としてログがとられる。同様に、さらに別のシナリオにおいて、ファンクションコール「ＷＴＳＳＢＸ＿ＧｅｔＭｏｓｔＳｕｉｔａｂｌｅＳｅｖｅｒ」が、所定のセッション制限に違反した適切なサーバを提供するとき、プラグインエラーイベントはログがとられる。
【００６５】
ブロック５１８において、適切なサーバが、対応する重みを有するサーバのリストから識別される。セッションブローカモジュール１１６は、負荷分散アルゴリズムを採用して、各サーバにより扱われるセッションの数に基づき、リモートアクセスシステム環境における各サーバに重みを割り当て得る。セッションブローカモジュール１１６は、サーバのリストを生成し、リストから適切なサーバを識別する。識別されたサーバは、より少ない数のセッションを保有し得、従って、セッションをクライアント装置１０２−１に提供する能力を示す。
【００６６】
ブロック５２０において、クライアント装置１０２−１がリダイレクトされて、識別されたサーバとの接続を確立する。
【００６７】
例示のコンピュータ環境
図６は、例示の一般的コンピュータ環境６００を説明し、コンピュータ環境６００を使用して、本明細書に記載される技術を実装可能であり、また、コンピュータ環境６００は、本明細書に記載される構成要素の全体または一部として、代表的なものであり得る。コンピュータ環境６００は、コンピュータ環境の単なる一例であり、コンピュータおよびネットワークアーキテクチャの使用または機能性の範囲について任意の制限を示唆することを意図していない。コンピュータ環境６００は、例示のコンピュータ環境６００に説明されるコンポーネントのうちの任意の１つまたは組み合わせに関して、何の依存性も要求も有しないと解釈されるべきである。
【００６８】
コンピュータ環境６００には、汎用コンピュータベースのデバイスがコンピュータ６０２の形式で含まれる。コンピュータ６０２は、例えば、デスクトップコンピュータ、ハンドヘルド、ノートブックまたはラップトップ型のコンピュータ、サーバコンピュータ、ゲーム機等であり得る。コンピュータ６０２のコンポーネントは、１つまたは複数のプロセッサまたはプロセシングユニット６０４、システムメモリ６０６、および、プロセッサ６０４を含む種々のシステムコンポーネントをシステムメモリ６０６に連結させるシステムバス６０８を含み得るが、これらに限定されない。
【００６９】
システムバス６０８は、メモリバスまたはメモリコントローラ、周辺機器用バス、アクセラレイティッド・グラフィックス・ポート、およびさまざまなバスアーキテクチャのいずれかを使用するローカルバスを含む、いくつかの種類のバス構造のいずれかとすることができる。そのようなアーキテクチャには、ＩＳＡ（Industry Standard Architecture）バス、ＭＣＡ（Micro Channel Architecture）バス、ＥＩＳＡ（Enhanced ISA）バス、ＶＥＳＡ（Video Electronics Standards Association）ローカルバス、およびメザニンバスとしても知られるＰＣＩ（Peripheral Component Interconnect）バスが含まれ得る。
【００７０】
コンピュータ６０２には、一般的には、様々なコンピュータ可読媒体が含まれる。そのような媒体は、コンピュータ６０２によりアクセス可能な任意の利用可能な媒体であり得、揮発性媒体および不揮発性媒体、ならびに、取り外し可能媒体および取り外し不可能媒体が含まれる。
【００７１】
システムメモリ６０６には、コンピュータ可読媒体が、ＲＡＭ（Random Access Memory）６１０等の揮発性メモリの形式、および／または、ＲＯＭ（Read Only Memory）６１２等の不揮発性メモリの形式で含まれる。ＢＩＯＳ（Basic Input/Output System）６１４は、コンピュータ６０２内の要素間で起動中等における情報の転送を支援する基本ルーチンを含有し、例示されるように、ＲＯＭ  ６１２に記憶される。ＲＡＭ  ６１０は、一般的には、プロセシングユニット６０４により、直接アクセス可能な、および／または現在作動されているデータおよび／または、プログラムモジュールを含有する。
【００７２】
コンピュータ６０２には、また、他の取り外し可能／取り外し不可能、揮発性／不揮発性コンピュータ記憶媒体が含まれ得る。例として、図６は、取り外し不可能、不揮発性磁気媒体（図示せず）を読み書きするためのハードディスクドライブ６１６を説明する。さらに、図６は、取り外し可能、不揮発性磁気ディスク６２０（例えば、「フロッピーディスク」）を読み書きするための磁気ディスクドライブ６１８を説明する。また、図６は、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、または他の光媒体等の取り外し可能、不揮発性光ディスク６２４を読み出しおよび／または書き込みするための光ディスクドライブ６２２を説明する。ハードディスクドライブ６１６、磁気ディスクドライブ６１８、および光ディスクドライブ６２２は、全て、１つまたは複数のデータ媒体インターフェース６２６により、システムバス６０８に接続される。あるいは、ハードディスクドライブ６１６、磁気ディスクドライブ６１８、および光ディスクドライブ６２２は、１つまたは複数のインターフェース（図示せず）によりシステムバス６０８に接続され得る。
【００７３】
ディスクドライブおよびそれに関連するコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびコンピュータ６０２の他のデータのための不揮発性記憶装置を提供する。例では、ハードディスク６１６、取り外し可能磁気ディスク６２０、および取り外し可能光ディスク６２４が説明されるが、コンピュータによりアクセス可能なデータを記憶可能な他のタイプのコンピュータ可読媒体、例えば、磁気カセットまたは他の磁気記憶装置、フラッシュメモリカード、ＣＤ−ＲＯＭ、ＤＶＤ（Digital Versatile Disk）または他の光記憶装置、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）等を利用して、例示のコンピュータシステムおよび環境を実装可能であることを理解されたい。
【００７４】
任意の数のプログラムモジュールを、ハードディスク６１６、磁気ディスク６２０、光ディスク６２４、ＲＯＭ  ６１２および／またはＲＡＭ  ６１０上に記憶可能であり、それには、例として、オペレーティングシステム６２６、１つまたは複数のアプリケーション６２８、他のプログラムモジュール６３０、およびプログラムデータ６３２が含まれる。そのようなオペレーティングシステム６２６、１つまたは複数のアプリケーション６２８、他のプログラムモジュール６３０、およびプログラムデータ６３２（またはそれらのいくつかの組み合わせ）のそれぞれは、分散ファイルシステムをサポートする、存在するコンポーネントのすべてまたは一部を実装し得る。
【００７５】
ユーザは、キーボード６３４およびポインティングデバイス６３６（例えば、「マウス」）等の入力装置を介して、コマンドおよび情報をコンピュータ６０２内に入力可能である。他の入力デバイス６３８（具体的には図示せず）には、マイク、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、シリアルポート、スキャナおよび／または同等のものが含まれ得る。これらおよび他の入力デバイスは、システムバス６０８に連結される入出力インターフェース６４０を介してプロセシングユニット６０４に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）等の他のインターフェースおよびバス構造によっても接続され得る。
【００７６】
モニタ６４２または他のタイプの表示装置を、ビデオアダプタ６４４等のインターフェースを介してシステムバス６０８に接続することも可能である。モニタ６４２の他に、他の出力周辺機器には、スピーカ（図示せず）およびプリンタ６４６等のコンポーネントが含まれ得、それらのコンポーネントは入出力インターフェース６４０を介してコンピュータ６０２に接続可能である。
【００７７】
コンピュータ６０２は、ネットワーク化された環境において、リモートコンピュータベースデバイス６４８等の１つまたは複数のリモートコンピュータに接続する論理接続を使用して、作動可能である。例として、リモートコンピュータベースデバイス６４８は、パーソナルコンピュータ、携帯型コンピュータ、サーバ、ルータ、ネットワークコンピュータ、ピアデバイスまたは他の共通ネットワークノードであり得る。リモートコンピュータベースデバイス６４８は、コンピュータ６０２に関して本明細書において記載される、多数または全ての要素および特徴を含むことが可能な携帯型コンピュータとして説明される。
【００７８】
コンピュータ６０２とリモートコンピュータ６４８との間の論理接続は、ローカルエリアネットワーク（ＬＡＮ）６５０として、また、一般的なワイドエリアネットワーク（ＷＡＮ）６５２を介するものとして示される。そのようなネットワーク環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいては一般的なものである。
【００７９】
コンピュータ６０２は、ＬＡＮネットワーク環境において実装されるとき、ネットワークインターフェースまたはアダプタ６５４を介してローカルネットワーク６５０に接続される。コンピュータ６０２はＷＡＮネットワーク環境において実装されるとき、一般的にはモデム６５６またはワイドネットワーク６５２上で通信を確立するための同様の手段を含む。モデム６５６は、コンピュータ６０２に外付けまたは内蔵のものが可能であり、入出力インターフェース６４０または他の適切な機構を介してシステムバス６０８に接続可能である。説明されるネットワーク接続は例示のものであり、コンピュータ６０２と６４８の間の通信リンクを確立するための他の手段も使用可能であることを理解されたい。
【００８０】
コンピュータ環境６００と共に説明されるような、ネットワーク化された環境において、コンピュータ６０２に関して示されるプログラムモジュールまたはその一部は、リモートメモリ記憶装置に記憶され得る。例として、リモートアプリケーション６５８は、リモートコンピュータ６４８のメモリ装置上に存在する。説明目的のため、オペレーティングシステム等のアプリケーションおよび他の実行可能プログラムコンポーネントが、本明細書において個別のブロックとして説明されるが、そのようなプログラムおよびコンポーネントが、種々の時間において、コンピュータベースデバイス６０２の異なる記憶コンポーネントに存在し、コンピュータ６０２のデータプロセッサにより実行されることが分かる。
【００８１】
種々のモジュールおよび技術が、１つまたは複数のコンピュータまたは他のデバイスにより実行される、プログラムモジュール等のコンピュータ実行可能命令の一般的なコンテキストに即して、本明細書において記載され得る。一般に、プログラムモジュールには、特定のタスクを実行し、または特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造等が含まれる。一般的には、プログラムモジュールの機能性は、種々の実施形態において所望されるように組み合わせまたは分散され得る。
【００８２】
これらのモジュールおよび技術の実装は、何らかの形式のコンピュータ可読媒体に記憶または転送され得る。コンピュータ可読媒体は、コンピュータによりアクセス可能な任意の利用可能な媒体で可能である。限定ではなく例として、コンピュータ可読媒体には、「コンピュータ記憶媒体」および「通信媒体」を含まれ得る。
【００８３】
「コンピュータ記憶媒体」には、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータ等の情報の記憶のための任意の方法または技術で実装される、揮発性および不揮発性、取り外し可能および取り外し不可能媒体が含まれる。コンピュータ記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（Digital Versatile Disk）もしくは他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または、所望の情報を記憶するために使用できる、かつ、コンピュータによりアクセス可能な任意の他の媒体が含まれるが、これに限定されない。
【００８４】
あるいは、フレームワークの一部分を、ハードウェア、または、ハードウェア、ソフトウェア、および／またはファームウェアの組み合わせにおいて実装してもよい。例えば、１つまたは複数の特定用途向け集積回路（Application Specific Integrated Circuit：ＡＳＩＣ）またはプログラマブルロジックデバイス（Programmable Logic Device：ＰＬＤ）を、設計またはプログラムして、フレームワークの１つまたは複数の部分を実装することが可能である。
【００８５】
結論
ターミナルサービスセッションブローカのインフラストラクチャを活用して、サードパーティのプラグインアプリケーションをサポートするための実施形態を構造的特徴および／または方法論的動作に固有の言語で説明したが、添付の特許請求の範囲で定義される本発明の主題事項は、説明した特定の特徴または動作に必ずしも限定されないことを理解されたい。むしろ、特定の特徴はおよび方法は、ターミナルサービスセッションブローカのインフラストラクチャを活用して、サードパーティのプラグインアプリケーションをサポートするための、例示の実装として開示される。
【図１】
2010538392.tif 000003
【図２】
2010538392.tif 000004
【図３】
2010538392.tif 000005
【図４】
2010538392.tif 000006
【図５】
2010538392.tif 000007
【図６】
2010538392.tif 000008
【国際調査報告】
2010538392.tif 000009
2010538392.tif 000010