(57)【特許請求の範囲】
【請求項１】
複数のセッションを含む仮想環境を提供するように構成された第１のコンピューティングデバイスであって、各セッションが、異なるユーザに固有であり、前記第１のコンピューティングデバイスによって実行されるアプリケーションの少なくとも１つの仮想インスタンスを含む、第１のコンピューティングデバイスと、
広域エリアネットワークを介して前記第１のコンピューティングデバイスと通信可能に結合される第２のコンピューティングデバイスであって、前記複数のセッションのうちの１つのセッションと関連しており、前記セッションに固有の前記アプリケーションの仮想インスタンスと対話するように構成された、第２のコンピューティングデバイスと、を備えるシステムであって、
前記第２のコンピューティングデバイスは、デバイス管理サービスによって管理されるように構成されたサービス管理対象デバイスに通信可能に結合され、
前記セッションは、前記セッションで使用するための前記デバイス管理サービスの仮想インスタンス、及び前記セッションで使用するためのリダイレクションレイヤを含み、
前記リダイレクションレイヤは、前記セッションに固有の前記アプリケーションの前記仮想インスタンスと、前記セッションで使用するための前記デバイス管理サービスの前記仮想インスタンスとの間の通信をインターセプトするように構成されている、システム。
【請求項２】
前記リダイレクションレイヤは、
前記通信がグローバルレジストリデータベースのロケーションへの書き込み命令を含むと判定したことに応答して、前記セッションに固有で前記グローバルレジストリデータベースの前記ロケーションに対応する、データベースのロケーションが存在するかを判定するように構成されている、請求項１に記載のシステム。
【請求項３】
前記リダイレクションレイヤは、
前記セッションに固有で前記グローバルレジストリデータベースの前記ロケーションに対応する、前記データベースの前記ロケーションが存在しないと判定したことに応答して、前記セッションに固有で前記グローバルレジストリデータベースの前記ロケーションに対応する、前記データベースの前記ロケーションを作成し、前記セッションに固有で前記グローバルレジストリデータベースの前記ロケーションに対応する、前記データベースの前記ロケーションに、前記書き込み命令をルーティングするように構成されている、請求項２に記載のシステム。
【請求項４】
前記リダイレクションレイヤは、
前記セッションに固有で前記グローバルレジストリデータベースの前記ロケーションに対応する、前記データベースの前記ロケーションが存在すると判定したことに応答して、前記セッションに固有で前記グローバルレジストリデータベースの前記ロケーションに対応する、前記データベースの前記ロケーションに、前記書き込み命令をルーティングするように構成されている、請求項２に記載のシステム。
【請求項５】
前記通信がグローバルレジストリデータベースのロケーションへの読み出し命令を含むと判定したことに応答して、前記リダイレクションレイヤが、前記グローバルレジストリデータベースの前記ロケーションへの書き込み命令を以前にインターセプトしたかを判定すること、をさらに含む、請求項１に記載のシステム。
【請求項６】
前記リダイレクションレイヤが、前記グローバルレジストリデータベースの前記ロケーションへの前記書き込み命令を以前にインターセプトしたと判定したことに応答して、前記書き込み命令が以前にルーティングされた前記セッションに固有のデータベースのロケーションに、前記読み出し命令をルーティングすること、をさらに含む、請求項５に記載のシステム。
【請求項７】
前記リダイレクションレイヤが前記グローバルレジストリデータベースの前記ロケーションへの前記書き込み命令を以前にインターセプトしていないと判定したことに応答して、前記グローバルレジストリデータベースの前記ロケーションに、前記読み出し命令をルーティングすること、をさらに含む、請求項５に記載のシステム。
【請求項８】
前記通信がグローバルオブジェクト名を含むかを判定することと、
前記通信が前記グローバルオブジェクト名を含むと判定したことに応答して、前記セッションを示す前記セッションに固有の名前で前記グローバルオブジェクト名を名前変更することと、をさらに含む、請求項１に記載のシステム。
【請求項９】
前記システムがハイパーバイザーを含まず、かつオペレーティングシステムの仮想インスタンスを含まず、
前記サービス管理対象デバイスがユニバーサルシリアルバス対応デバイスであり、前記デバイス管理サービスが前記サービス管理対象デバイスのデバイスドライバである、請求項１に記載のシステム。
【請求項１０】
前記リダイレクションレイヤは、
前記通信がグローバルリソースへの書き込み命令を含むと判定したことに応答して、前記セッションに固有である、前記グローバルリソースの仮想インスタンスが存在するかを判定し、
前記セッションに固有である、前記グローバルリソースの前記仮想インスタンスが存在しないと判定したことに応答して、前記セッションに固有である、前記グローバルリソースの前記仮想インスタンスを生成し、かつ
前記セッションに固有である、前記グローバルリソースの前記仮想インスタンスが存在すると判定したことに応答して、前記セッションに固有である、前記グローバルリソースの前記仮想インスタンスにアクセスする、ように構成されている、請求項１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータハードウェア及びソフトウェアに関する。特に、本開示の１つ以上の態様は、一般に、単一のセッション環境用に設計され、デバイスを管理するために専用されるサービス（例えば、デバイスドライバ）を仮想化及び管理して、単一のオペレーティングシステム、マルチセッション環境でそのサービスを使用することができるようにするコンピュータハードウェア及びソフトウェアに関する。
【背景技術】
【０００２】
マルチセッション環境の仮想化の到来により、仮想サービスプロバイダは、単一のワークステーションの考え方で設計されたデバイス管理サービス（例えば、デバイスドライバ）と連携して動作するコンピューティングデバイスに対する互換性の問題に直面する。デバイス管理サービスは、コンピューティングデバイスの様々なアプリケーションへのアクセスを制御する。単一のオペレーティングシステムが仮想環境内で複数のセッションを有することにより、複数のセッションがコンピューティングデバイスまたはそのデバイス管理サービスと対話しようとすると、単一のオペレーティングシステムが単一のセッションにサービスすると想定して設計されたコンピューティングデバイスは動作しない可能性がある。単一のオペレーティングシステム、マルチセッション環境では、サーバに常駐するデバイス管理サービスは、特定のセッションでコンピューティングデバイスを制御または管理するためにコンピューティングデバイスにアクセスできないことがある。さらに、デバイス管理サービスがこれらのコンピューティングデバイスにアクセスすることができる場合、デバイス管理サービスを使用することにより、各セッションが他のセッションに対して関係なく同じシステムリソースに対して書き込み及び読み出しを行っているので、異なるセッション間で競合を引き起こし、コンピューティングデバイスの動作を停止させ、及び／またはユーザに誤った出力を引き起こさせる可能性がある。多くの場合、コンピューティングデバイスは、ユーザのコンピュータの周辺機器として接続されるＵＳＢベースのデバイス（例えば、スマートカード及びスマートカードリーダ）であり得るが、他の場合には、コンピューティングデバイスは、それ自体のデバイス管理サービスを有する描画可能なタブレットのようなスタンドアローンデバイスであってもよい。
【０００３】
現在の「解決策」には、仮想アーキテクチャに対する高価な変更が伴う。特に、仮想マシンは各セッション／ユーザについて作成され、各仮想マシンがオペレーティングシステム全体、関連するデータベース（例えば、レジストリ）について別個のイメージ、及びサーバリソース（例えば、メモリ）について別個の割り当てを有する。しかしながら、オペレーティングシステム全体について別個のイメージを含む別個の仮想マシンを作成すると、膨大なディスクスペースが必要となり、保守管理コストが大幅に増加する。
【発明の概要】
【０００４】
次に、本明細書で説明する様々な態様の簡略化された概要を提示する。この概要は、広範な概観ではなく、かつ基本的な要素または重要な要素を特定し、または請求の範囲を説明することを意図しない。次の概要は、以下に提供される、より詳細な説明の導入序文として単純化された形でいくつかの概念を提示するだけである。
【０００５】
本開示の態様は、特定のデバイスの管理専用であって、特定のデバイス及びデバイス管理サービスが単一のセッション／ユーザ環境内で利用されるとして、または利用されるとの想定の下に設計された、デバイス管理サービス（例えば、デバイスドライバ）の仮想化を提供し、デバイス管理サービスの仮想インスタンスをマルチセッション環境で使用できるようにするための方法、コンピュータ可読媒体、ソフトウェアシステム、及び装置を開示することにより、１つ以上の前述のような問題に対処する。さらに、マルチセッション環境内の各セッションについてリダイレクション及び／または仮想化レイヤを作成して、セッション境界が維持され、グローバル／共有リソースがセッションによって不適切に変更されないようにするために、グローバルデータベースリダイレクション、オブジェクト名変換、及びファイルシステム変換を実施することができる。一例として、リダイレクション／仮想化レイヤにより、セッションに関連しグローバルリソースに対する通信を、セッションに固有のリソースの仮想インスタンスをアクセスするようにリダイレクトすることができる。別の例として、リダイレクション／仮想化レイヤにより、セッションに関連しグローバルデータベースのロケーションに対する通信を、グローバルデータベースのロケーションに対応するセッションに固有のデータベースのロケーションにリダイレクトすることができる。さらに別の例として、リダイレクション／仮想化レイヤにより、（例えば、グローバルオブジェクトの、セッションに固有である仮想インスタンスにアクセスするために）セッションに関連する通信におけるグローバルオブジェクト名をセッションに固有のオブジェクト名に置き換えることができる。
【０００６】
いくつかの実施形態では、システムは、第１のコンピューティングデバイス、及び広域ネットワークを介して第１のコンピューティングデバイスに通信可能に結合された第２のコンピューティングデバイスを含むことができる。第１のコンピューティングデバイスは、複数のセッションを含んでいる仮想環境を提供するように構成することができる。各セッションは、異なるユーザに固有であり、第１のコンピューティングデバイスによって実行されるアプリケーションの少なくとも１つの仮想インスタンスを含むことができる。第２のコンピューティングデバイスは、セッションに関連付けられてもよく、セッションに固有のアプリケーションの仮想インスタンスと対話するように構成されてもよい。第２のコンピューティングデバイスは、デバイス管理サービスによって管理されるように構成されたサービス管理対象デバイスに通信可能に結合されてもよい。セッションは、セッションで使用するためのデバイス管理サービスの仮想インスタンスと、セッションで使用するためのリダイレクションレイヤとを含むことができる。リダイレクションレイヤは、セッションに固有のアプリケーションの仮想インスタンスと、セッションで使用するためのデバイス管理サービスの仮想インスタンスとの間の通信をインターセプトするように構成されてもよい。
【０００７】
いくつかの実施形態では、装置は、プロセッサと、プロセッサによって実行されるときにいくつかのステップを実施するように装置を構成する命令を格納するコンピュータ可読媒体とを含むことができる。例えば、装置は、各セッションが、異なるユーザに固有でありアプリケーションの少なくとも１つの仮想インスタンスを含む、複数のセッションを生成することができる。装置は、その装置とは異なるユーザデバイスから受信した１つ以上のユーザ入力に基づいて、セッション用のアプリケーションの仮想インスタンスの１つ以上の機能を実施することができる。装置は、ユーザデバイスがデバイスドライバによって管理されるように構成された周辺デバイスに接続されているかを判定することができる。装置は、ユーザデバイスがデバイスドライバによって管理されるように構成された周辺デバイスに接続されていると判定したことに応答して、セッション用のデバイスドライバの仮想インスタンスと、セッション用のデバイスドライバの仮想インスタンスのためのリダイレクションレイヤとを生成することができる。
【０００８】
いくつかの実施形態では、方法は、各セッションが異なるユーザに固有であり、アプリケーションの少なくとも１つの仮想インスタンスを含む複数のセッションをコンピューティングデバイスによって生成することを含むことができる。さらに、コンピューティングデバイスは、そのコンピューティングデバイスとは異なるユーザデバイスから受信した１つ以上のユーザ入力に基づいて、セッションのためのアプリケーションの仮想インスタンスの１つ以上の機能を実施することができる。コンピューティングデバイスは、ユーザデバイスがデバイスドライバによって管理されるように構成された周辺デバイスに接続されていると判定したことに応答して、セッション用のデバイスドライバの仮想インスタンスと、セッション用のデバイスドライバの仮想インスタンスのためのリダイレクションレイヤとを生成することができる。コンピューティングデバイスは、セッションに関連する、グローバルリソース向けのメッセージを、セッションに固有であるグローバルリソースの仮想インスタンスにルート変更することができる。
【０００９】
これらの機能は、多くの他の機能とともに、以下にさらに詳細に説明される。
【００１０】
本開示は、例として示され、添付の図面に限定されるものではなく、同様の参照番号は類似の要素を示す。
【図面の簡単な説明】
【００１１】
【図１】本明細書で説明する１つ以上の例示的な態様に従って使用することができるコンピュータシステムアーキテクチャの例を示す。
【図２】本明細書で説明する１つ以上の例示的な態様に従って使用することができるリモートアクセスシステムアーキテクチャの例を示す。
【図３】本明細書で説明する１つ以上の例示的な態様に従って使用することができる仮想化された（ハイパーバイザー）システムアーキテクチャの例を示す。
【図４】本明細書で説明する１つ以上の例示的な態様によるマルチセッション環境を実現するためのシステムの例を示す。
【図５】本明細書で説明する１つ以上の例示的な態様によるマルチセッション環境のセッションビューの例を示す。
【図６】本明細書の１つ以上の例示的な態様による、特定のサービス管理対象デバイスに対するセッション１の一部の分解ブロック図を示す。
【図７】本明細書で説明する１つ以上の例示的な態様による、仮想化されたデバイス管理サービスのセッション開始及びロードのフローの例を示す。
【図８】本明細書で説明する１つ以上の例示的な態様による、アプリケーションを起動し、アプリケーションをサービス管理対象デバイスで使用するフローの例を示す。
【発明を実施するための形態】
【００１２】
以下に、より詳細に説明される主題の一般的な序論として、ここで説明される態様は、デバイス及びその管理サービスが単一のユーザ環境内で利用されるとして、または利用されるとの想定の下に設計されたデバイスの管理専用のサービスの仮想化及び管理に向けられている。これらのサービスを仮想化し、そのようなサービスの複数のインスタンスを作成することにより、そのようなデバイスは、マルチユーザ環境における仮想化されたサービスによって使用及び管理することができる。
【００１３】
様々な実施形態の次の説明では、上記で識別され本明細書の一部をなす添付の図面を参照する。添付図面には、本明細書で説明する態様を実践することができる様々な実施形態が例示として示される。本明細書で説明する範囲から逸脱することなく、他の実施形態を利用することができ、かつ構造的及び機能的改変を行うことができることを理解されたい。様々な態様は、他の実施形態が可能であり、かつ様々な異なる方法で実践し、または実行することが可能である。
【００１４】
本明細書で使用される表現及び用語は、説明目的のためのものであり、限定的であるとみなされるべきではないことを理解されたい。むしろ、本明細書で使用される句及び用語は、最も広い解釈及び意味を与えられるべきである。「含む」及び「備える」及びその変形の使用は、それ以降に列挙された項目及びその等価物、ならびにそれらの追加項目及び等価物を包含することを意味する。「取り付けられた」、「接続された」、「結合された」、「位置付けられた」、「係合された」及び類似の用語の使用は、直接的及び間接的両方の取り付け、接続、結合、位置決め及び係合を含む。
【００１５】
〈コンピュータアーキテクチャ〉
コンピュータソフトウェア、ハードウェア、及びネットワークは、とりわけ、スタンドアローン、ネットワーク、リモートアクセス（別名リモートデスクトップ）、仮想化された、及び／またはクラウドベースの環境を含む様々な異なるシステム環境で、利用することができる。図１は、スタンドアローン及び／またはネットワーク環境において、本明細書で説明する１つ以上の例示的な態様を実現するために使用され得るシステムアーキテクチャ及びデータ処理デバイスの一例を示す。様々なネットワークノード１０３、１０５、１０７、及び１０９は、インターネットなどの広域ネットワーク（ＷＡＮ）１０１を介して相互接続されてもよい。プライベートイントラネット、企業ネットワーク、ＬＡＮ、メトロポリタンエリアネットワーク（ＭＡＮ）無線ネットワーク、パーソナルネットワーク（ＰＡＮ）などを含む他のネットワークを使用してもよく、または代替的に使用してもよい。ネットワーク１０１は、例示目的のためのものであり、より少ないまたは追加のコンピュータネットワークと置き換えることができる。ローカルエリアネットワーク（ＬＡＮ）は、１つ以上の任意の既知のＬＡＮトポロジーを有することができ、イーサネット（登録商標）などの様々な異なるプロトコルのうちの１つ以上を使用することができる。デバイス１０３、１０５、１０７、１０９、及び他のデバイス（不図示）は、ツイストペア線、同軸ケーブル、光ファイバ、電波または他の通信媒体を介して１つ以上のネットワークに接続されてもよい。
【００１６】
本明細書で使用され、図面に示されている用語「ネットワーク」は、リモート記憶デバイスが１つ以上の通信経路を介して共に結合されるシステムだけでなく、ストレージ機能を有するようなシステムに時折、結合され得るスタンドアローンデバイスにも適用することができる。したがって、「ネットワーク」という用語には、「物理ネットワーク」だけでなく、全ての物理ネットワークに存在する単一のエンティティに起因するデータで構成される「コンテンツネットワーク」も含まれる。
【００１７】
コンポーネントは、データサーバ１０３、ウェブサーバ１０５、及びクライアントコンピュータ１０７、１０９を含むことができる。データサーバ１０３は、本明細書で説明する１つ以上の例示的な態様を実施するためのデータベース及び制御ソフトウェアの全体的な、アクセス、制御及び管理を提供する。データサーバ１０３はウェブサーバ１０５に接続され、ユーザは、ウェブサーバ１０５を介してデータと対話し、要求されたとおりにデータを取得する。代替的に、データサーバ１０３は、ウェブサーバ自体として動作し、かつインターネットに直接接続されてもよい。データサーバ１０３は直接的または間接的な接続を介して、または他の何らかのネットワークを介して、ネットワーク１０１（例えば、インターネット）を通ってウェブサーバ１０５に接続することができる。ユーザは、ウェブサーバ１０５によってホストされる１つ以上の外部に露出されたウェブサイトを介してデータサーバ１０３に接続するために、リモートコンピュータ１０７、１０９を使用して、例えばウェブブラウザを使用して、データサーバ１０３と対話することができる。クライアントコンピュータ１０７、１０９は、そこに格納されたデータにアクセスするためにデータサーバ１０３と協働して使用されてもよく、または他の目的のために使用されてもよい。例えば、ユーザは、クライアントデバイス１０７から、当技術分野で知られているように、インターネットブラウザを使用して、または、ウェブサーバ１０５及び／またはデータサーバ１０３とコンピュータネットワーク（例えば、インターネット）を越えて、通信するソフトウェアアプリケーションを実行することによって、ウェブサーバ１０５にアクセスすることができる。
【００１８】
サーバとアプリケーションは、同じ物理マシン上で結合され、別個の仮想アドレスまたは論理アドレスを保持することも、別個の物理マシン上に存在することもできる。図１は、使用可能なネットワークアーキテクチャの単なる一例を示しており、当業者であれば、使用される特定のネットワークアーキテクチャ及びデータ処理デバイスは、本明細書でさらに説明するように、変更可能であり、かつそれらが提供する機能性に二次的であるということを理解するであろう。例えば、ウェブサーバ１０５とデータサーバ１０３によって提供されるサービスは、単一のサーバ上で組みみ合わせることができる。
【００１９】
各コンポーネント１０３、１０５、１０７、１０９は、任意のタイプの既知のコンピュータ、サーバ、またはデータ処理デバイスとすることができる。データサーバ１０３は、例えば、データサーバ１０３の全体的な動作を制御するプロセッサ１１１を含むことができる。データサーバ１０３は、ランダムアクセスメモリ（ＲＡＭ）１１３、リードオンリメモリ（ＲＯＭ）１１５、ネットワークインターフェース１１７、入力／出力インターフェース１１９（例えば、キーボード、マウス、ディスプレイ、プリンタなど）、及びメモリ１２１をさらに含むことができる。入力／出力（Ｉ／Ｏ）１１９は、データまたはファイルの読み出し、書き込み、表示、及び／または印刷のための様々なインターフェースユニット及びドライブを含むことができる。メモリ１２１は、データ処理デバイス１０３の全体的な動作を制御するためのオペレーティングシステムソフトウェア１２３、データサーバ１０３に本明細書で説明する態様を実施するよう指示する制御論理１２５、及び／または本明細書で説明する態様と併せて使用されても使用されなくてもよい、二次的なサポート及び／または他の機能を提供する他のアプリケーションソフトウェア１２７をさらに格納することができる。制御論理は、本明細書ではデータサーバソフトウェア１２５とも呼ぶことがある。データサーバソフトウェアの機能は、制御論理にコード化されたルールに基づいて自動的に行われ、システムに入力を供給するユーザによって手動で行われ、及び／またはユーザ入力に基づく自動処理の組み合わせ（例えば、クエリ、データ更新など）によって行われる、操作または決定を指すことができる。
【００２０】
メモリ１２１は、本明細書で説明する１つ以上の態様の実施に使用されるデータを格納することもでき、第１のデータベース１３１及び第２のデータベース１２９を含む。いくつかの実施形態では、第１のデータベースは、（例えば、別個のテーブル、レポートなどとして）第２のデータベースを含むことができる。つまり、システム設計に応じて、情報を単一のデータベースに格納し、または異なる論理、仮想、または物理データベースに分離することができる。デバイス１０５、１０７、１０９は、デバイス１０３に関して説明したのと同様のアーキテクチャまたは異なるアーキテクチャを有することができる。当業者であれば、本明細書で説明するデータ処理デバイス１０３（またはデバイス１０５、１０７、１０９）の機能を複数のデータ処理デバイスに分散させる、例えば、地理的ロケーション、ユーザーアクセスレベル、サービス品質（ＱｏＳ）などに基づいて、処理負荷を複数のコンピュータに分散し、トランザクションを分離することなどができることを理解するであろう。
【００２１】
１つ以上の態様は、本明細書で説明されるような１つ以上のコンピュータまたは他のデバイスによって実行される、１つ以上のプログラムモジュールなどの、コンピュータ使用可能または読み出し可能なデータ及び／またはコンピュータ実行可能命令で具体化されてもよい。一般に、プログラムモジュールは、コンピュータまたは他のデバイス内のプロセッサによって行われるとき、特定のタスクを実施し、または特定の抽象データ型を実現する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。モジュールは、実行のために後でコンパイルされるソースコードプログラミング言語で書かれてもよく、（これらに限定されないが）ＨＴＭＬ（ＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）またはＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）などのスクリプト言語で記述されてもよい。コンピュータ実行可能命令は、不揮発性記憶デバイスなどのコンピュータ可読媒体に格納されてもよい。ハードディスク、ＣＤ−ＲＯＭ、光学記憶デバイス、磁気記憶デバイス、及び／またはそれらの任意の組み合わせを含む、任意の適切なコンピュータ可読記憶媒体を利用することができる。さらに、本明細書で説明するデータまたはイベントを表す様々な送信（非記憶）媒体は、金属ワイヤ、光ファイバ、及び／または無線送信媒体（例えば、空気及び／またはは空間）などの信号伝達媒体を通って進む電磁波の形態で送信元と送信先との間で転送されてもよい。本明細書で説明される様々な態様は、方法、データ処理システム、またはコンピュータプログラム製品として具体化されてもよい。したがって、ソフトウェア、ファームウェア、及び／またはハードウェアまたは集積回路、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）などのハードウェア同等物において、様々な機能が全体的または部分的に具体化されてもよい。本明細書で説明される１つ以上の態様をより効果的に実現するために、特定のデータ構造を使用することができ、このようなデータ構造は、本明細書で説明するコンピュータ実行可能命令及びコンピュータ使用可能データの範囲内で考えられる。
【００２２】
図２をさらに参照すると、本明細書で説明される１つ以上の態様は、リモートアクセス環境において実現され得る。図２は、本明細書で説明される１つ以上の例示的な態様に従って使用され得る例示的なコンピューティング環境２００内の汎用コンピューティングデバイス２０１を含む例示的なシステムアーキテクチャを示す。汎用コンピューティングデバイス２０１は、クライアントアクセスデバイスに仮想マシンを提供するように構成された単一のサーバまたは複数サーバデスクトップ仮想化システム（例えば、リモートアクセスまたはクラウドシステム）内のサーバ２０６ａとして使用することができる。汎用コンピューティングデバイス２０１は、サーバ、及びＲＡＭ２０５、ＲＯＭ２０７、Ｉ／Ｏモジュール２０９及びメモリ２１５を含む、その関連コンポーネントの全体的な動作を制御するためのプロセッサ２０３を有することができる。
【００２３】
Ｉ／Ｏモジュール２０９は、汎用コンピューティングデバイス２０１のユーザが入力を提供することができるマウス、キーパッド、タッチスクリーン、スキャナ、光学式リーダ、及び／またはスタイラス（または他の入力デバイス（複数））を含むことができ、また、オーディオ出力を提供するための１つ以上のスピーカと、テキスト、オーディオビジュアル、及び／またはグラフィカル出力を提供するためのビデオ表示デバイスとを含むこともできる。ソフトウェアは、メモリ２１５及び／または他の記憶装置に格納されて、本明細書で説明されるような様々な機能を実施するために、汎用コンピューティングデバイス２０１を専用コンピューティングデバイスに構成するための命令をプロセッサ２０３に提供する。例えば、メモリ２１５は、オペレーティングシステム２１７、アプリケーションプログラム２１９、及び関連するデータベース２２１など、コンピューティングデバイス２０１によって使用されるソフトウェアを格納することができる。
【００２４】
コンピューティングデバイス２０１は、（クライアントデバイスとも呼ばれる）端末２４０などの１つ以上のリモートコンピュータへの接続をサポートするネットワーク環境で動作することができる。端末２４０は、汎用コンピューティングデバイス１０３または２０１に関して上述した要素の多くまたは全てを含む、パーソナルコンピュータ、モバイルデバイス、ラップトップコンピュータ、タブレット、またはサーバであってもよい。図２に示すネットワーク接続は、ローカルエリアネットワーク（ＬＡＮ）２２５及び広域ネットワーク（ＷＡＮ）２２９を含むが、他のネットワークを含むこともできる。ＬＡＮネットワーキング環境で使用される場合、コンピューティングデバイス２０１は、ネットワークインターフェースまたはアダプタ２２３を介してＬＡＮ２２５に接続されてもよい。ＷＡＮネットワーキング環境で使用される場合、コンピューティングデバイス２０１は、コンピュータネットワーク２３０（例えば、インターネット）などのＷＡＮ２２９を越えて通信を確立するためのモデム２２７または他の広域ネットワークインターフェースを含むことができる。示されたネットワーク接続は例示であり、コンピュータ間の通信リンクを確立する他の手段を使用することができることが理解されよう。コンピューティングデバイス２０１及び／または端末２４０は、バッテリ、スピーカ、及びアンテナ（図示せず）などの様々な他のコンポーネントを含むモバイル端末（例えば、携帯電話、スマートフォン、携帯情報端末（ＰＤＡ）、ノートブックなど）であってもよい。
【００２５】
本明細書で説明される態様は、多数の他の汎用または専用コンピューティングシステム環境または構成と共に動作することもできる。本明細書で説明する態様での使用に適している他のコンピューティングシステム、環境、及び／または構成の例には、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル民生用電子機器、ネットワークパーソナルコンピュータ（ＰＣ）、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれるが、これらに限定されない。
【００２６】
図２に示すように、１つ以上のクライアントデバイス２４０は、１つ以上のサーバ（一般に、本明細書では「サーバ（複数）２０６」と呼ばれる）２０６ａ〜２０６ｎと通信することができる。一実施形態では、コンピューティング環境２００は、サーバ２０６とクライアントマシン（複数）２４０との間にインストールされたネットワーク機器を含むことができる。ネットワーク機器は、クライアント／サーバ接続を管理することができ、場合によっては、複数のバックエンドサーバ２０６の間でクライアント接続の負荷を分散することができる。
【００２７】
クライアントマシン（複数）２４０は、いくつかの実施形態では、単一のクライアントマシン２４０または単一のグループのクライアントマシン２４０と呼ぶことがあり、一方、サーバ（複数）２０６は、単一のサーバ２０６または単一のグループのサーバ２０６と呼ぶことがある。一実施形態では、単一のクライアントマシン２４０は複数のサーバ２０６と通信し、別の実施形態では単一のサーバ２０６は複数のクライアントマシン２４０と通信する。さらに別の実施形態では、単一のクライアントマシン２４０が単一のサーバ２０６と通信する。
【００２８】
いくつかの実施形態では、クライアントマシン２４０は、以下の非網羅的な用語、すなわち、クライアントマシン（複数）、クライアント（複数）、クライアントコンピュータ（複数）、クライアントデバイス（複数）、クライアントコンピューティングデバイス（複数）、ローカルマシン、リモートマシン、クライアントノード（複数）、エンドポイント（複数）、またはエンドポイントノード（複数）のうちのいずれか１つによって参照されることができる。いくつかの実施形態では、サーバ２０６は、以下の非網羅的な用語、すなわち、サーバ（複数）、ローカルマシン、リモートマシン、サーバファーム（複数）、またはホストコンピューティングデバイス（複数）のうちのいずれか１つによって参照されることができる。
【００２９】
一実施形態では、クライアントマシン２４０は仮想マシンであってもよい。仮想マシンは任意の仮想マシンとすることができ、いくつかの実施形態では、仮想マシンは、タイプ１またはタイプ２のハイパーバイザー、例えば、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ、ＩＢＭ、ＶＭｗａｒｅによって開発されたハイパーバイザーまたは他のハイパーバイザーによって管理される任意の仮想マシンとすることができる。いくつかの態様では、仮想マシンはハイパーバイザーによって管理され、態様のうちでは、仮想マシンが、サーバ２０６上で実行するハイパーバイザーまたはクライアント２４０上で実行するハイパーバイザーによって管理されてもよい。
【００３０】
いくつかの実施形態は、サーバ２０６または他の遠隔配置されたマシン上で遠隔から実行するアプリケーションによって生成されたアプリケーション出力を表示するクライアントデバイス２４０を含む。これらの実施形態では、クライアントデバイス２４０は、仮想マシン受信機プログラムまたはアプリケーションを実行して、アプリケーションウィンドウ、ブラウザ、または他の出力ウィンドウに出力を表示することができる。一例では、アプリケーションはデスクトップであり、他の例ではアプリケーションはデスクトップを生成または提示するアプリケーションである。デスクトップは、ローカル及び／またはリモートアプリケーションを統合することができるオペレーティングシステムのインスタンスのためのユーザインターフェースを提供するグラフィカルシェルを含むことができる。本明細書で使用されるアプリケーションとは、オペレーティングシステムのインスタンス（及びオプションでデスクトップも）がロードされた後に実行するプログラムである。
【００３１】
いくつかの実施形態では、サーバ２０６は、リモートプレゼンテーションプロトコルまたは他のプログラムを使用して、クライアント上で実行するシンクライアントまたはリモートディスプレイアプリケーションにデータを送信し、サーバ２０６上で実行するアプリケーションによって生成されるディスプレイ出力を提示する。シンクライアントまたはリモートディスプレイプロトコルは、次の非包括的なプロトコルリスト、すなわち、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，Ｉｎｃ．ｏｆ  Ｆｔ．Ｌａｕｄｅｒｄａｌｅ，Ｆｌｏｒｉｄａによって開発された、Ｉｎｄｅｐｅｎｄｅｎｔ  Ｃｏｍｐｕｔｉｎｇ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＣＡ）プロトコル、またはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ  ｏｆ  Ｒｅｄｍｏｎｄ，Ｗａｓｈｉｎｇｔｏｎによって製造されたＲｅｍｏｔｅ  Ｄｅｓｋｔｏｐ  Ｐｒｏｔｏｃｏｌ（ＲＤＰ）のうちのいずれか１つであり得る。
【００３２】
リモートコンピューティング環境は、サーバ２０６ａ〜２０６ｎが、例えばクラウドコンピューティング環境のサーバファーム２０６に論理的にグループ化されるように、複数のサーバ２０６ａ〜２０６ｎを含むことができる。サーバファーム２０６は、地理的に分散されているが論理的にグループ化されたサーバ２０６、または論理的にグループ化されつつ、互いに近接して配置されたサーバ２０６を含むことができる。サーバファーム２０６内の地理的に分散されたサーバ２０６ａ〜２０６ｎは、いくつかの実施形態では、ＷＡＮ（ワイド）、ＭＡＮ（メトロポリタン）、またはＬＡＮ（ローカル）を使用して、通信することができる。ここで、異なる地理的領域は、異なる大陸、大陸の異なる領域、異なる国、異なる州、異なる都市、異なる構内、異なる場所、または前述の地理的ロケーションの任意の組み合わせとして特徴付けることができる。いくつかの実施形態では、サーバファーム２０６は単一のエンティティとして管理され、他の実施形態ではサーバファーム２０６は複数のサーバファームを含むことができる。
【００３３】
いくつかの実施形態では、サーバファームは、（例えば、ＷＩＮＤＯＷＳ（登録商標）、ＵＮＩＸ（登録商標）、ＬＩＮＵＸ、ｉＯＳ、ＡＮＤＲＯＩＤ（登録商標）、ＳＹＭＢＩＡＮなど）実質的に同様のタイプのオペレーティングシステムプラットフォームを実行するサーバ２０６を含むことができる。他の実施形態では、サーバファーム２０６は、第１のタイプのオペレーティングシステムプラットフォームを実行する１つ以上のサーバの第１のグループと、第２のタイプのオペレーティングシステムプラットフォームを実行する１つ以上のサーバの第２のグループとを含むことができる。
【００３４】
サーバ２０６は、必要に応じて、任意のタイプのサーバ、例えば、ファイルサーバ、アプリケーションサーバ、ウェブサーバ、プロキシサーバ、機器、ネットワーク機器、ゲートウェイ、アプリケーションゲートウェイ、ゲートウェイサーバ、仮想化サーバ、デプロイメントサーバ、Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔｓ  Ｌａｙｅｒ（ＳＳＬ）ＶＰＮサーバ、ファイアウォール、ウェブサーバ、アプリケーションサーバまたはマスタアプリケーションサーバ、アクティブディレクトリを実行するサーバ、またはファイアウォール機能、アプリケーション機能、またはロードバランシング機能を提供するアプリケーション加速プログラムを実行するサーバとして構成されてもよい。他のサーバータイプも使用できる。
【００３５】
いくつかの実施形態は、クライアントマシン２４０から要求を受信し、第２のサーバ２０６ｂにその要求を転送し、第２のサーバ２０６ｂからの応答で、クライアントマシン２４０によって生成された要求に応答する第１のサーバ２０６ａを含む。第１のサーバ２０６ａは、クライアントマシン２４０に利用可能なアプリケーションの列挙、及びアプリケーションの列挙内で識別されたアプリケーションをホストするアプリケーションサーバ２０６に関連するアドレス情報を取得することができる。次いで、第１のサーバ２０６ａは、ウェブインターフェースを使用してクライアントの要求に対する応答を提示し、クライアント２４０に直接通信して、識別されたアプリケーションへのアクセスをクライアント２４０に提供することができる。１つ以上のクライアント２４０及び／または１つ以上のサーバ２０６は、ネットワーク２３０、例えばネットワーク１０１を越えてデータを送信することができる。
【００３６】
図２は、例示的なデスクトップ仮想化システムの高水準アーキテクチャを示す。図示のように、デスクトップ仮想化システムは、仮想デスクトップ及び／または仮想アプリケーションを１つ以上のクライアントアクセスデバイス２４０に提供するように構成された少なくとも１つの仮想化サーバ２０６を含む、単一のサーバまたは複数のサーバシステム、またはクラウドシステムであってもよい。本明細書で使用するデスクトップは、１つ以上のアプリケーションをホスト及び／または実行することができるグラフィック環境または空間を指す。デスクトップは、ローカル及び／またはリモートアプリケーションを統合することができる、オペレーティングシステムのインスタンスのためのユーザインターフェースを提供するグラフィカルシェルを含むことができる。アプリケーションには、オペレーティングシステムのインスタンス（及びオプションでデスクトップも）がロードされた後で実行するプログラムが含まれてもよい。オペレーティングシステムの各インスタンスは、物理的（例えば、デバイスごとに１つのオペレーティングシステム）、または仮想（例えば、単一のデバイス上で作動している多くのＯＳのインスタンス）であってもよい。各アプリケーションは、ローカルデバイス上で実行されてもよく、または遠隔配置されたデバイス（例えば、遠隔のデバイス）上で実行されてもよい。
【００３７】
さらに図３を参照すると、コンピューティングデバイス３０１は、仮想化環境、例えば単一のサーバ、複数のサーバ、またはクラウドコンピューティング環境内の仮想化サーバとして構成することができる。図３に示す仮想化サーバ３０１は、図２に示すサーバ２０６の１つ以上の実施形態によって、または他の既知のコンピューティングデバイスによって、展開及び／または実現することができる。仮想化サーバ３０１には、１つ以上の物理ディスク３０４、１つ以上の物理デバイス３０６、１つ以上の物理プロセッサ３０８、及び１つ以上の物理メモリ３１６を含むことができるハードウェアレイヤ３１０が含まれる。いくつかの実施形態では、ファームウェア３１２が、物理メモリ３１６のメモリ要素内に格納され、１つ以上の物理プロセッサ３０８によって実行され得る。仮想化サーバ３０１は、物理メモリ３１６のメモリ要素に格納され１つ以上の物理プロセッサ３０８によって実行されるオペレーティングシステム３１４をさらに含むことができる。なお、さらに、ハイパーバイザー３０２が、物理メモリ３１６のメモリ要素に格納されてもよく、１つ以上の物理プロセッサ３０８によって実行することができる。
【００３８】
１つ以上の物理プロセッサ３０８上で実行するのは、１つ以上の仮想マシン３３２Ａ〜Ｃ（一般に３３２）であってもよい。各仮想マシン３３２は、仮想ディスク３２６Ａ〜Ｃ及び仮想プロセッサ３２８Ａ〜Ｃを有することができる。いくつかの実施形態では、第１の仮想マシン３３２Ａは、仮想プロセッサ３２８Ａを使用して、ツールスタック３２４を含む制御プログラム３２０を実行することができる。制御プログラム３２０は、制御仮想マシン、Ｄｏｍ０、Ｄｏｍａｉｎ０、セッション０、またはシステムの運営及び／または制御に使用される他の仮想マシンを指すことができる。いくつかの実施形態では、１つ以上の仮想マシン３３２Ｂ〜Ｃは、仮想プロセッサ３２８Ｂ〜Ｃを使用して、ゲストオペレーティングシステム３３０Ａ〜Ｂを実行することができる。
【００３９】
仮想化サーバ３０１は、仮想化サーバ３０１と通信する１つ以上のハードウェアを有するハードウェアレイヤ３１０を含むことができる。いくつかの実施形態では、ハードウェアレイヤ３１０は、１つ以上の物理ディスク３０４、１つ以上の物理デバイス３０６、１つ以上の物理プロセッサ３０８、及び１つ以上のメモリ２１６を含むことができる。物理コンポーネント３０４、３０６、３０８、及び３１６は、例えば、上述したコンポーネントのいずれかを含むことができる。物理デバイス３０６は、例えば、ネットワークインターフェースカード、ビデオカード、キーボード、マウス、入力デバイス、モニタ、ディスプレイデバイス、スピーカ、光学ドライブ、記憶デバイス、ユニバーサルシリアルバス接続、プリンタ、スキャナ、ネットワーク要素（例えば、ルータ、ファイアウォール、ネットワークアドレス変換器、ロードバランサ、仮想プライベートネットワーク（ＶＰＮ）ゲートウェイ、Ｄｙｎａｍｉｃ  Ｈｏｓｔ  Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ（ＤＨＣＰ）ルータなど）、または仮想化サーバ３０１に接続され、また仮想化サーバ３０１と通信する任意のデバイスを含むことができる。ハードウェアレイヤ３１０内の物理メモリ３１６は、任意のタイプのメモリを含むことができる。物理メモリ３１６は、データを格納することができ、いくつかの実施形態では、１つ以上のプログラムまたは実行可能命令のセットを格納することができる。図３は、ファームウェア３１２が仮想化サーバ３０１の物理メモリ３１６内に格納される実施形態を示す。物理メモリ３１６に格納されたプログラムまたは実行可能命令は、仮想化サーバ３０１の１つ以上のプロセッサ３０８によって実行され得る。
【００４０】
仮想化サーバ３０１は、ハイパーバイザー３０２も含むことができる。いくつかの実施形態では、ハイパーバイザー３０２は、仮想化サーバ３０１上のプロセッサ３０８によって実行されるプログラムであってもよく、任意の数の仮想マシン３３２を作成及び管理する。ハイパーバイザー３０２は、仮想マシンモニタまたはプラットフォーム仮想化ソフトウェアと呼ぶことができる。いくつかの実施形態では、ハイパーバイザー３０２は、コンピューティングマシン上で実行する、仮想マシンを監視する実行可能命令及びハードウェアの任意の組み合わせとすることができる。ハイパーバイザー３０２は、仮想化サーバ３０１上で実行するオペレーティングシステム３１４内で実行するハイパーバイザーであるタイプ２ハイパーバイザーとすることができる。そのとき、仮想マシンはハイパーバイザーの上のレベルで実行する。いくつかの実施形態では、タイプ２ハイパーバイザーは、タイプ２ハイパーバイザーがユーザのオペレーティングシステムと対話するように、ユーザのオペレーティングシステムのコンテキスト内で実行する。他の実施形態では、仮想化環境内の１つ以上の仮想化サーバ２０１は、タイプ１ハイパーバイザー（図示せず）を代わりに含むことができる。タイプ１ハイパーバイザーは、ハードウェアレイヤ３１０内のハードウェア及びリソースに直接アクセスすることによって、仮想化サーバ３０１上で実行することができる。すなわち、タイプ２ハイパーバイザー３０２は、図示されるように、ホストオペレーティングシステム３１４を通ってシステムリソースにアクセスするが、タイプ１ハイパーバイザーは、ホストオペレーティングシステム３１４なしで全てのシステムリソースに直接アクセスすることができる。タイプ１ハイパーバイザーは、仮想化サーバ３０１の１つ以上の物理プロセッサ３０８上で直接実行することができ、物理メモリ３１６に格納されたプログラムデータを含むことができる。
【００４１】
ハイパーバイザー３０２は、いくつかの実施形態では、オペレーティングシステム３３０、またはシステムリソースに直接アクセスする制御プログラム３２０をシミュレートする任意の方法で、仮想マシン３３２上で実行するオペレーティングシステム３３０または制御プログラム３２０に仮想リソースを提供することができる。システムリソースは、物理デバイス３０６、物理ディスク３０４、物理プロセッサ３０８、物理メモリ３１６、及び仮想化サーバ３０１のハードウェアレイヤ３１０に含まれる他のコンポーネントを含むことができるが、これらに限定されない。ハイパーバイザー３０２は、仮想ハードウェアをエミュレートし、物理ハードウェアをパーティションし、物理ハードウェアを仮想化し、及び／またはコンピューティング環境へのアクセスを提供する仮想マシンを実行するために使用することができる。さらに他の実施形態では、ハイパーバイザー３０２は、仮想化サーバ３０１上で実行する仮想マシン３３２のプロセッサスケジューリング及びメモリパーティショニングを制御する。ハイパーバイザー３０２は、ＶＭＷａｒｅ，Ｉｎｃ．ｏｆ  Ｐａｌｏ  Ａｌｔｏ，Ｃａｌｉｆｏｒｎｉａ，ｔｈｅ  ＸＥＮ  ｈｙｐｅｒｖｉｓｏｒによって製造されたもの、ｔｈｅ  ｏｐｅｎ  ｓｏｕｒｃｅ  Ｘｅｎ．ｏｒｇ  ｃｏｍｍｕｎｉｔｙによって開発が監督されているオープンソース製品、すなわち、Ｍｉｃｒｏｓｏｆｔによって提供されるＨｙｐｅｒＶ、ＶｉｒｔｕａｌＳｅｒｖｅｒ、またはｖｉｒｔｕａｌ  ＰＣ  ｈｙｐｅｒｖｉｓｏｒｓ、などを含むことができる。いくつかの実施形態では、仮想化サーバ３０１は、ゲストオペレーティングシステムが実行可能な仮想マシンプラットフォームを作成するハイパーバイザー３０２を実行する。これらの実施形態では、仮想化サーバ３０１は、ホストサーバと呼ばれることもある。そのような仮想化サーバの一例は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，Ｉｎｃ．ｏｆ  Ｆｏｒｔ  Ｌａｕｄｅｒｄａｌｅ，ＦＬ．によって提供されるＸＥＮ  ＳＥＲＶＥＲである。
【００４２】
ハイパーバイザー３０２は、ゲストオペレーティングシステム３３０が実行する１つ以上の仮想マシン３３２Ｂ〜Ｃ（一般に３３２）を作成することができる。いくつかの実施形態では、ハイパーバイザー３０２は仮想マシンイメージをロードして、仮想マシン３３２を作成することができる。他の実施形態では、ハイパーバイザー３０２は、仮想マシン３３２内のゲストオペレーティングシステム３３０を実行することができる。さらに他の実施形態では、仮想マシン３３２は、ゲストオペレーティングシステム３３０を実行することができる。
【００４３】
ハイパーバイザー３０２は、仮想マシン３３２を作成することに加えて、少なくとも１つの仮想マシン３３２の実行を制御することができる。他の実施形態では、ハイパーバイザー３０２は、仮想化サーバ３０１によって提供される少なくとも１つのハードウェアリソース（例えば、ハードウェアレイヤ３１０内で利用可能な任意のハードウェアリソース）の抽象化を少なくとも１つの仮想マシン３３２に提示することができる。他の実施形態では、ハイパーバイザー３０２は、仮想化サーバ３０１内で利用可能な物理プロセッサ３０８に仮想マシン３３２がアクセスする方法を制御することができる。物理プロセッサ３０８へのアクセスを制御することは、仮想マシン３３２がプロセッサ３０８へのアクセス権を有するべきか、及び物理プロセッサ機能が仮想マシン３３２にどのように提示されるかを決定することを含むことができる。
【００４４】
図３に示すように、仮想化サーバ３０１は、１つ以上の仮想マシン３３２をホストまたは実行することができる。仮想マシン３３２は、プロセッサ３０８によって実行されるときに、仮想マシン３３２が物理コンピューティングデバイスのようにプログラム及びプロセスを実行できるように、物理コンピュータの動作をそっくり模倣する実行可能命令のセットである。図３は、仮想化サーバ３０１が３つの仮想マシン３３２をホストする実施形態を示しているが、他の実施形態では、仮想化サーバ３０１は任意の数の仮想マシン３３２をホストすることができる。ハイパーバイザー３０２は、いくつかの実施形態では、各仮想マシン３３２に利用可能な物理ハードウェア、メモリ、プロセッサ及び他のシステムリソースの一意の仮想ビューをその仮想マシン３３２に提供する。いくつかの実施形態では、一意の仮想ビューは、１つ以上の仮想マシン許可、１つ以上の仮想マシン識別子へのポリシーエンジンの適用、仮想マシンにアクセスするユーザ、仮想マシン上で実行するアプリケーション、仮想マシンによってアクセスされるネットワーク、または任意の他の所望の基準に基づくことができる。例えば、ハイパーバイザー３０２は、１つ以上の安全でない仮想マシン３３２、及び１つ以上の安全な仮想マシン３３２を作成することができる。安全でない仮想マシン３３２は、仮想マシン３３２を保護することが許可され得るリソース、ハードウェア、メモリロケーション、及びプログラムにアクセスすることを妨げられ得る。他の実施形態では、ハイパーバイザー３０２は、各仮想マシン３３２に利用可能な物理ハードウェア、メモリ、プロセッサ及び他のシステムリソースの実質的に類似した仮想ビューを仮想マシン３３２に提供することができる。
【００４５】
各仮想マシン３３２は、仮想ディスク３２６Ａ〜Ｃ（一般に３２６）及び仮想プロセッサ３２８Ａ〜Ｃ（一般に３２８）を含むことができる。仮想ディスク３２６は、いくつかの実施形態では、仮想化サーバ３０１の１つ以上の物理ディスク３０４、または仮想化サーバ３０１の１つ以上の物理ディスク３０４の一部分の仮想化されたビューである。物理ディスク３０４の仮想化されたビューは、ハイパーバイザー３０２によって生成され、提供され、管理され得る。いくつかの実施形態では、ハイパーバイザー３０２は、各仮想マシン３３２に物理ディスク３０４の一意のビューを提供する。したがって、これらの実施形態では、各仮想マシン３３２に含まれる特定の仮想ディスク３２６は、他の仮想ディスク３２６と比較した場合に一意であり得る。
【００４６】
仮想プロセッサ３２８は、仮想化サーバ３０１の１つ以上の物理プロセッサ３０８の仮想化されたビューであり得る。いくつかの実施形態では、物理プロセッサ３０８の仮想化されたビューは、ハイパーバイザー３０２によって生成され、提供され、管理され得る。いくつかの実施形態では、仮想プロセッサ３２８は、少なくとも１つの物理プロセッサ３０８と同じ特性の実質的に全てを有する。他の実施形態では、仮想プロセッサ３２８は、仮想プロセッサ３２８の特性の少なくとも一部が対応する物理プロセッサ３０８の特性と異なるように、物理プロセッサ３０８の修正されたビューを提供する。
【００４７】
〈デバイス管理サービス仮想化システム〉
図４は、本明細書で説明する１つ以上の例示的な態様による例示的なコンピューティングシステム４００を示す。図４に示すように、コンピューティングシステム４００は、広域ネットワーク４０８（例えば、インターネット、イントラネット、及び／またはそれらの組み合わせ）を介して複数のクライアントデバイス４０４Ａ〜Ｃ（一般に４０４）に接続されたリモートサーバ４０２を含むことができる。クライアントデバイス４０４は、例えばパーソナルコンピュータ、サーバ、シンクライアント、タブレット、スマートフォンなどの任意のタイプのコンピューティングデバイスであってよく、ネットワークノード１０３またはコンピューティングデバイス２０１の１つ以上のコンポーネントを含む。サービス管理対象デバイス４０６Ａ〜Ｃ（一般に４０６）は、（例えば、ＵＳＢ−Ｃポートなどのユニバーサルシリアルバスポートを通る）有線または（例えば、ブルートゥース（登録商標）、Ｗｉ−Ｆｉなどの）無線接続を介してクライアントデバイス４０４と動作可能に接続されてもよい。サービス管理対象デバイス４０６は、例えば、スマートカード４０６Ａ、ＵＳＢベースのデバイス４０６Ｂ、（例えば、ゲームコントローラ、遠隔制御などの）コントローラ４０６Ｃなどを含むことができる。クライアントデバイス４０４がデバイス管理サービスによって管理され、制御される場合、クライアントデバイス４０４Ｄは、サービス管理対象デバイスとみなすことができる。一例として、タブレットまたはプリンタは、デバイスの動作を管理する、対応するサービスを有することができる。
【００４８】
リモートサーバ４０２は、仮想アプリケーション配信解決策をクライアントデバイス４０４に提供することができる。仮想アプリケーション配信解決策は、アプリケーション仮想化を提供し、その結果、クライアントデバイス４０４のユーザは、クライアントデバイス４０４から受信した入力を使用してリモートサーバ４０２上で完全に実行される１つ以上のアプリケーションに遠隔からアクセスし、対話することができる。そのような仮想アプリケーション配信解決策では、リモートサーバ４０２は、複数のセッション及び各セッション内の複数のアプリケーションで使用するための単一のオペレーティングシステムのみを実行することができる。すなわち、リモートサーバ４０２は、各セッションのための仮想化されたオペレーティングシステムを作成することは費用がかかり、膨大なディスクスペースを必要とするため、サーバのオペレーティングシステムの１つ以上のインスタンスを仮想化しないことがある。いくつかの実施形態では、アプリケーションが、実際に、リモートサーバ４０２のオペレーティングシステムに対するプロキシとして動作する、アプリケーション仮想化レイヤ（図示せず）とインターフェース接続しているときに、アプリケーションは、リモートサーバ４０２にインストールされたオペレーティングシステムと直接インターフェース接続していると考えられる。いくつかの実施形態では、コンピューティングシステム４００は、ハイパーバイザーを含まなくてもよい。
【００４９】
リモートサーバ４０２はまた、各セッションによってアクセス可能なグローバルレジストリデータベース４１０を含み、及び／またはグローバルレジストリデータベース４１０と通信可能に結合されてもよい。デバイス管理サービスは、サービス管理対象デバイス４０６が単一のセッション環境で動作していると想定して、グローバルレジストリデータベース４１０に情報を書き込み、また、グローバルレジストリデータベース４１０から情報を読み出すように設計されている。
【００５０】
１つ以上の構成では、リモートサーバ４０２は、いくつかのタスクを実施するセッションマネージャを含むことができる。セッションマネージャは、サードパーティのベンダまたはパートナーが、登録ソフトウェア開発キット（ＳＤＫ）を使用して、セッションマネージャ及び／またはアプリケーション仮想化サービス（例えば、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，Ｉｎｃ．によって開発されたＸｅｎＡｐｐ）に、それらのデバイス管理サービスを登録することを許可するセッションインターフェースを提供することができる。サードパーティのベンダまたはパートナーは、セッションマネージャによる使用のために仮想セッションホスト（ＶＳＨ）サービスデータベースにデバイス管理サービスを登録することができる。登録の間に、マルチセッション環境でのデバイス管理サービスの使用に関するポリシーが作成されることがある。１つのポリシーは、インスタンスの起動時にセッションマネージャがそのセッションで使用するためのデバイス管理サービスの仮想化されたインスタンスを生成して、各セッションがデバイス管理サービスの独自の仮想化されたインスタンスを有するようにすることを含むことができる。さらに、別のポリシーは、リソースをいつ仮想化するかを含むことができる。さらに別のポリシーは、指定されたコマンド（例えば、グローバルレジストリデータベース４１０への書き込みコマンド）をいつ、及び／またはどこにルート変更するかを含むことができる。さらに別のポリシーは、それらのサービス管理対象デバイス４０６及び／またはそれらのデバイス管理サービスによる使用のために割り当てられる、リモートサーバ４０２の１つ以上のメモリロケーション（例えばファイル）、またはリモートサーバ４０２に通信可能に結合されるデータベースを割り当てることを含むことができる。セッションの起動の間に、セッションマネージャは、レジストリデータベース４１０の固有の１つ以上のメモリロケーションに基づいて、作成される固有のセッションで使用するメモリロケーションを割り当て、サービス管理対象デバイス４０６及び／またはそれらのデバイス管理サービスからのコマンドがそこにルーティングされ得る。さらに、セッションマネージャは、レジストリデータベース４１０内の仮想リソース及び／またはメモリロケーションの、セッションに固有のメモリロケーション（例えば、図６で後述するセッション固有のデータベース６０６）へのマッピングを作成することができる。登録ＳＤＫは、デバイス管理サービスのアクセス許可及びレベルを含む様々なオプションを提供することができる。デバイス管理サービスは、様々なイベント（例えば、起動、シャットダウン、セッションイベントなど）が通知されるように、標準インターフェースを公開してもよい。ＳＤＫは、アドミニストレータがデバイス管理サービスの各セッション固有のインスタンスの動作を監視及び制御できるようにすることもできる。
【００５１】
サービス管理対象デバイス４０６は、オペレーティングシステムと対話するためのインターフェース及び／または命令を提供するデバイス管理サービスによって管理することができる。デバイス管理サービスは、オペレーティングシステムと共に実行されているアプリケーションが、サービス管理対象デバイス４０６のハードウェア機能にアクセスすることを可能にする。例えば、デバイス管理サービスは、特定のサービス管理対象デバイス４０６と共に使用するためのデバイスドライバの形態であってもよい。オペレーティングシステムまたはアプリケーションが、コマンドを発行することによって特定の機能を実施するように特定のサービス管理対象デバイス４０６に指示すると、サービス管理対象デバイス４０６の対応するデバイス管理サービスは、コマンドをインターセプトし、そのコマンドを特定のサービス管理対象デバイス４０６によって理解可能な形式（例えばフォーマット）に変換して、変換されたコマンドを実行のために特定のサービス管理対象デバイス４０６に送信する。同様に、アプリケーションまたはオペレーティングシステムによる受信向けの特定のサービス管理対象デバイス４０６の出力は、アプリケーションまたはオペレーティングシステムによって受信される前に、インターセプトされ、アプリケーションによって理解可能な形式に変換されてもよい。したがって、デバイス管理サービスは、アプリケーションが、サービス管理対象デバイス４０６の固有のハードウェアまたはソフトウェアコマンドポリシーの正確な知識を有することなく、特定のサービス管理対象デバイス４０６と通信することを可能にする。
【００５２】
ユーザは、リモートサーバ４０２によって提供される仮想化されたアプリケーションと共に使用するために、サービス管理対象デバイス４０６をクライアントデバイス４０４と接続することができる。一例として、ユーザは、スマートカードリーダを介してスマートカード４０６Ａをクライアントデバイス４０４Ａに接続して、リモートサーバ４０２によって提供される仮想されたアプリケーションと共に使用することができる。サービス（例えば、特定のタイプのスマートカードまたはスマートカードリーダのためのドライバ）は、スマートカード４０６Ａまたはそのスマートカードリーダが単一セッションまたは単一ユーザ環境で利用されることを前提として設計されており、このことは多くの問題を引き起こす可能性がある。
【００５３】
１つの問題は、１つのセッション内のアプリケーションの１つの仮想インスタンスが、異なるセッション内のアプリケーションの別の仮想インスタンスによって格納されたデータを上書きするときに発生することがある。一例として、スマートカード４０６Ａのデバイス管理サービス（例えば、デバイスドライバ）は、グローバルレジストリデータベース４１０、クライアントデバイス４０４、及び／またはスマートカード４０６Ａの特定のメモリロケーション（例えば、特定のファイル）に情報を書き込む（または、から情報を読み出す）ようにアプリケーションのインスタンスに指示することができる。しかしながら、デバイス管理サービスは、アプリケーションの各インスタンスが同じグローバルレジストリデータベース４１０に対してそのようなコマンド（例えば、書き込みコマンド、読み出しコマンドなど）を初期化することができる、異なるセッションに対応する同じアプリケーションの複数のインスタンスを考慮しないかもしれない。その結果、デバイス管理サービスは、第１のセッションにおけるアプリケーションの１つのインスタンスに、グローバルレジストリデータベース４１０の特定のメモリロケーションに情報を書き込むよう指示し、かつ第２の（例えば、異なる）セッションにおけるアプリケーションの別のインスタンスに、グローバルレジストリデータベース４１０の同じメモリロケーションに情報を書き込むように指示することもでき、その結果、後続の書き込み命令によって上書きされ、情報が失われる。
【００５４】
さらに、１つのセッションにおけるアプリケーションの１つのインスタンスによるデータの不適切な上書きは、異なるセッションにおけるアプリケーションの別のインスタンスによる不正確なデータ読み出し結果となり得る。上記の例に続いて、第２のセッションにおけるアプリケーションのインスタンスがグローバルレジストリデータベース４１０の特定のメモリロケーションに情報を書き込み、それによって、第１のセッションにおけるアプリケーションのインスタンスによってグローバルレジストリデータベース４１０の特定のメモリロケーションに以前に書き込まれた情報を不適切に上書きした後で、第１のセッションにおけるアプリケーションのインスタンスが、グローバルレジストリデータベース４１０の特定のメモリロケーションに格納された情報を読み出すことがあるが、それは、不適切な上書きの結果として第１のセッションにおけるアプリケーションのインスタンスに関して不正確である。この問題は、第１のセッションにおけるアプリケーションのインスタンスが、グローバルレジストリデータベース４１０のメモリロケーションから読み出された情報は、第１のセッションにおけるアプリケーションのインスタンスに関して不正確であることを認識しない可能性があることにより悪化する。
【００５５】
しかし、ここで簡単に説明し、以下にさらに詳細に説明するように、リモートサーバ４０２は、デバイス管理サービスの複数の仮想化されたインスタンス（例えば、スマートカード４０６Ａ用のデバイスドライバ）を作成し、リダイレクションレイヤを利用して、書き込み命令、読み出し命令、または他の命令を適切な宛先にルーティングして、マルチセッション環境における各セッション間の境界を維持する。したがって、上記の例に従えば、情報は、異なるセッションで実行されているアプリケーションによって上書きされない可能性があり、上記の問題を救済する。
【００５６】
上記の問題をもたらすマルチセッション環境の典型的なセットアップにおいて、サービス管理対象デバイスのためのデバイス管理サービスは、システムサービス（例えば、セッション０）と同じセッションで実行された。さらに、マルチセッション環境がセッション境界を首尾よく施行した場合、デバイス管理サービスは異なるセッションにおいてサービス管理対象デバイスにアクセスできないことがある。しかしながら、図５に示すマルチセッション環境５００の設定によって、これらの問題を救済する。
【００５７】
図５は、本明細書で説明する１つ以上の例示的な態様によるマルチセッション環境５００の例示的なセッションビューを示す。マルチセッション環境５００は、複数の異なるセッション（例えば、セッション０、セッション１〜セッションＮ）を含むことができる。図５に示すように、各セッションは、仮想化されたデバイス管理サービスと、そのようなサービスによって管理される対応するデバイスとの間の関係を表すことができる。１つのセッション（例えば、セッション０）は、リモートサーバ４０２の単一のオペレーティングシステムを含み、アドミニストレータとして機能するシステムサービスに固有のものであってもよい。オペレーティングシステムのような仮想化されたシステムサービスのインスタンスは生成されず、ハイパーバイザーが存在しない可能性がある。セッション０はシステムサービスを含むことができるが、サービス管理対象デバイス４０６を管理するためのデバイス管理サービス（またはその仮想化されたインスタンス）を含まない可能性がある。
【００５８】
特定のセッションで使用される各サービス管理対象デバイス４０６について、その管理サービス（例えば、そのデバイスドライバ）の仮想化されたセッションインスタンス５０４及び対応するリダイレクト／仮想化レイヤ５０６は、セッション内のサービス管理対象デバイス４０６のデバイスタイプを含む。結果として、セッション（例えば、セッション１〜セッションＮ）は、特定のデバイスタイプを管理するためにそのセッションと共に使用するためのデバイス管理サービスのセッションインスタンス（例えば、デバイスドライバの仮想化されたインスタンス）５０４をそれぞれ含むことができる。さらに、セッションマネージャは、インスタンスごとにリダイレクト／仮想化レイヤ５０６を生成して、デバイスタイプを管理する際にデバイス管理サービスのインスタンス５０６を支援することができる。例えば、セッション１は、デバイス管理サービスＡのセッションインスタンス５０４Ａと、デバイスタイプＡ（例えば、スマートカード４０６Ａのスマートカードタイプ）を管理するリダイレクション仮想レイヤ５０６Ａとを含むことができる。セッション１は、デバイス管理サービスＢのセッションインスタンス５０４Ｂと、デバイスタイプＢ（例えば、ＵＳＢベースのデバイス４０６ＢのためのＵＳＢデバイスタイプ）を管理するリダイレクション仮想レイヤ５０６Ｂとを含むこともできる。同様に、セッションＮは、デバイス管理サービスＡの別のセッションインスタンス５０４Ａと、デバイスタイプＡ（例えば、スマートカード４０６Ａのスマートカードタイプ）を管理するリダイレクション仮想レイヤ５０６Ａとを含むことができる。セッションＮは、デバイス管理サービスＢのセッションインスタンス５０４Ｂと、デバイスタイプＢ（例えば、ＵＳＢベースのデバイス４０６ＢのためのＵＳＢデバイスタイプ）を管理するためのリダイレクション仮想レイヤ５０６Ｂとを含むこともできる。
【００５９】
デバイス管理サービスの２つのインスタンス５０４及びリダイレクト／仮想化レイヤ５０６が、図５の２つのデバイスタイプＡ及びＢに対して示されているが、２つより多くの、または２つ未満のデバイス管理サービス５０４及びリダイレクト／仮想化レイヤ５０６が利用されてもよく、これはそのセッションで利用される異なるデバイスタイプの数に対応してもよい。
【００６０】
図６は、本明細書の１つ以上の例示的な態様による、特定のサービス管理対象デバイスのセッション１の一部の分解ブロック図を示す。新しいセッションの作成の間に、セッションマネージャは、起動プロセスを使用して、様々なデバイス管理サービスをホストする仮想サービスホストプロセスコンテナを作成することができる。起動プロセスの間に、セッションマネージャは、ウィンドウ及びグラフィックスサブシステム及び認証サブシステム（例えば、Ｗｉｎｌｏｇｏｎ、ＬｏｇｏｎＵＩ）のためにクライアント／サーバランタイムサブシステム（ＣＲＳＳ）とインターフェース接続する、初期化及び通知インターフェース６０２を作成することができる。さらに、初期化及び通知インターフェース６０２は、デバイス管理サービスＡのセッションインスタンス５０４Ａのための初期化及びシャットダウンインターフェースを提供することができる。その結果、デバイス管理サービスＡのセッションインスタンス５０４Ａは、起動プロセスが呼び出されると、デバイス固有の監視を開始することができる。デバイス管理サービスＡのセッションインスタンス５０４Ａは、それに応じてシャットダウン及び再開通知を処理することもできる。さらに、初期化及び通知インタ−フェース６０２は、デバイス管理サービスＡのセッションインスタンス５０４Ａがホストセッション固有の通知（例えば、ロック、アンロック、ログオン、事前ログオフなど）を受信することを可能にすることができる。さらに、起動プロセスの間に、セッションマネージャは、予め登録されたサードパーティサービスに関連する任意の他の起動プロセスを作成し、仮想サービスホストプロセスでプロセスをロードすることもできる。例えば、セッションマネージャは、リモートサーバ４０２によって作成された各セッションにおいて予め構成されたデバイス管理サービスをホストする新しいプロセスを作成することができる。
【００６１】
１つ以上の仮想化されたユーザアプリケーション６０４がサービス管理対象デバイス４０６の機能にアクセスしたい場合。リダイレクション仮想レイヤ６０８は、アプリケーションからであってサービス管理対象デバイス４０６向けの通信（例えば、コマンドまたは命令）を、デバイス管理サービスＡのセッションインスタンス５０４Ａにルート変更することができ、次に、デバイス管理サービスＡは、その通信をサービス管理対象デバイス４０６によって理解可能な形式に再フォーマット及び／または変換することができる。次いで、デバイス管理サービスＡのセッションインスタンス５０４Ａは、変換された通信をサービス管理対象デバイス４０６に送信することができる。それに応答して、サービス管理対象デバイス４０６は、変換された通信によって指示された機能を実施することができる。一例として、サービス管理対象デバイス４０６がスマートカード４０６Ａである場合、スマートカード４０６Ａは、ユーザの認証証明書を取り出すか、または他の何らかの機能を実施することができる。適切な場合、サービス管理対象デバイス４０６は、アプリケーションに応答性のある通信を送信することができる。しかしながら、リダイレクション仮想レイヤ６０８は、デバイス管理サービスＡのセッションインスタンス５０４Ａに通信をルート変更してもよく、次に、デバイス管理サービスＡは、応答通信をアプリケーションによって理解可能なフォーマットに再フォーマット及び／または変換することができる。
【００６２】
リダイレクション仮想レイヤ５０６Ａは、デバイス管理サービスＡのセッションインスタンス５０４Ａに送受信される各通信をインターセプトして検査することができる。通信が所定の基準を満たす場合、リダイレクション仮想レイヤはアクションを実施することができる（例えば、通信はルート変更されてもよく、及び／または特定のリソースが仮想化されてもよい）。所定の基準は、サードパーティまたは別のエンティティによるデバイス管理サービスの登録の間に設定されてもよい。
【００６３】
場合によっては、所定の基準は、通信がグローバルオブジェクト／リソース（例えば、セッションに固有ではないオブジェクトまたはリソース）への参照を含むかであり得る。このような場合、リダイレクション仮想レイヤ５０６Ａは、グローバルリソースがセッションに固有であるグローバルリソースの仮想インスタンスにアクセスするように、セッションに関連する通信をリダイレクトすることができる。例えば、リダイレクション仮想レイヤ５０６Ａは、セッションで使用するグローバルリソースの仮想インスタンスがリダイレクションデータベース６１０及び／またはセッション固有のデータベース６０６に存在するかを判定することができる。存在しない場合、リダイレクション仮想レイヤ５０６Ａは、セッションで使用するためにグローバルリソースの仮想インスタンスを生成し、グローバルリソースのグローバルインスタンスの仮想インスタンスをリダイレクションデータベース６１０及び／またはセッション固有のデータベース６０６の１つ以上に格納し、かつグローバルリソースとグローバルリソースの仮想インスタンスとの対応を含むように、リダイレクションデータベース６１０に格納されたマッピングを更新する。リダイレクション仮想レイヤ５０６Ａは、グローバルリソース自体にアクセスするのではなく、セッションに固有であるグローバルリソースの仮想インスタンスにアクセスするように通信を指示してもよい。そうでなければ、リダイレクション仮想レイヤ５０６Ａが、リダイレクションデータベース６１０に格納されたマッピングを調べることによって、セッションと共に使用するグローバルリソースの仮想インスタンスが存在すると判定した場合、リダイレクション仮想レイヤ５０６Ａは、マッピングを使用して、グローバルリソース自体にアクセスするのではなく、セッションに固有であるグローバルリソースの仮想インスタンスにアクセスするように通信を指示することができる。
【００６４】
本明細書で説明する多くの例では、所定の基準は、特定のファイルまたはメモリロケーションに対する書き込みまたは読み出しコマンドであってもよい。一例として、通信が、サービス管理対象デバイス４０６に割り当てられたグローバルレジストリデータベース４１０内のリソース（例えば、メモリロケーション）、及び／またはグローバルレジストリデータベース４１０内のグローバルデバイス固有情報に対する、書き込みコマンドまたは読み出しコマンドである場合、リダイレクション仮想レイヤ５０６Ａはこれらのコマンドをセッション固有のデータベース６０６にリダイレクトすることができ、そのようなコマンドは、グローバルレジストリデータベース４１０に送信されない可能性がある。各セッション（例えば、セッション１〜セッションＮ）は、それ自体のセッション固有のデータベース６０６に関連付けられてもよく、レジストリデータベースリダイレクションで使用するためのリモートサーバ４０２の論理メモリパーティションであってもよい。
【００６５】
リダイレクション仮想レイヤ５０６Ａは、ルーティングポリシー（例えば、レジストリデータベース４１０内のメモリロケーションの、セッション固有のデータベース６０６内のメモリロケーションへのマッピング）を格納するリダイレクションデータベース６１０を調べることができる。マッピングを使用して、リダイレクション仮想レイヤ５０６Ａ及び／またはセッションマネージャは、書き込みコマンドまたは読み出しコマンドからグローバルレジストリデータベース４１０向けのメモリロケーションを取り出し、グローバルレジストリデータベース４１０のそのメモリロケーションに対応する、セッション固有のデータベース６０６のメモリロケーションを決定することができる。次に、リダイレクション仮想レイヤ５０６Ａは、書き込みコマンドまたは読み出しコマンドが、グローバルレジストリデータベース４１０の当初指定されたメモリロケーションからではなく、セッション固有のデータベース６０６の対応するメモリロケーションに情報を書き込みまたは読み出すように、書き込みコマンドまたは読み出しコマンドをルート変更することができる。一例として、書き込みコマンドの場合、グローバルレジストリデータベース４１０のファイルＡに情報を書き込む代わりに、その情報は、サービス管理対象デバイス４０６と共に使用するために割り当てられたセッション固有のデータベース６０６のファイルＡに書き込まれてもよい。別の例として、読み出しコマンドの場合、グローバルレジストリデータベース４１０内のファイルＡから情報を読み出す代わりに、セッション固有のデータベース６０６内のファイルＡから情報を読み出すことができる。
【００６６】
（各セッションによってアクセス可能な）グローバルレジストリデータベース４１０から（対応するセッションのみによってアクセス可能な）セッション固有のデータベース６０６への書き込みコマンド及び読み出しコマンドのリダイレクションの結果として、特定のセッションで作動しているサービスの１つのインスタンスは、両方のセッションが同じタイプのサービス管理対象デバイス４０６を使用している場合、別のセッションで作動中のサービスの別のインスタンスのリソースを変更できない場合がある。リダイレクションを利用することにより、グローバルレジストリデータベース４１０からの情報の不適切な読み出しをもたらすサービスの１つのインスタンスによるグローバルレジストリデータベース４１０への不適切な上書きに関する上述の例は、回避することができる。
【００６７】
さらに、１つ以上の構成では、リダイレクション仮想レイヤ５０６Ａは、グローバルレジストリデータベース４１０内の意図されたメモリロケーションが、セッション固有のデータベース６０６内のマッピングに基づく対応するメモリロケーションを有しないことを判定することができる。固有のデータベース６０６に対応するメモリロケーションがなく、通信がグローバル／共有システムリソース（例えば、グローバルレジストリデータベース４１０のメモリロケーション）に対するものである場合、リダイレクション仮想レイヤ５０６Ａは、リソースを仮想化し、かつ／またはセッション固有のデータベース６０６内のメモリをグローバルレジストリデータベース４１０内の意図されたメモリロケーションに対応するように割り当てるための１つ以上のポリシーを介して構成することができ、セッション固有のデータベース６０６内の新しく割り当てられたメモリロケーションに通信をリダイレクトし、かつ新しい対応を反映するようにマッピングを更新する。
【００６８】
通信が読み出しコマンドであり、かつセッション固有のデータベース６０６が、その読み出しコマンドがリダイレクション仮想レイヤ５０６Ａによってリダイレクトされたメモリロケーションに格納された情報を有していない場合、リダイレクションレイヤ５０６Ａは、読み出しコマンドをグローバルレジストリデータベース４１０（例えば、読み出しコマンドで意図されたグローバルレジストリデータベース４１０の元のメモリロケーション）に再びリダイレクトすることができる。そのような場合、セッションマネージャは、デバイス管理サービス及びアプリケーションによる後の参照のために、読み出しコマンドのグローバルレジストリデータベース４１０のメモリロケーションをセッション固有のデータベース６０６に格納することができる。追加的、または代替的に、いくつかの実施形態では、グローバルレジストリデータベース４１０のメモリロケーションから読み出すために読み出しコマンドをルーティングするのではなく、セッションマネージャは、起動プロセスの間に、セッション固有のデータベース６０６の１つ以上の対応するメモリロケーションにデフォルト値を設定することができる。１つ以上の構成では、セッション固有のデータベース６０６の１つ以上のメモリロケーションのデフォルト値は、ユーザ、管理者、及び／またはデバイス管理サービスＡのセッションインスタンス５０４Ａによって事前設定されてもよい。１つ以上の追加のまたは代替の構成では、デフォルト値は、グローバルレジストリデータベース４１０の対応するメモリロケーションに現在格納されている値であってもよい。その結果、セッション固有のデータベース６０６の対応するメモリロケーションに格納された値は、サービス管理対象デバイス４０６またはそのデバイス管理サービスＡと共に使用するために割り当てられたグローバルレジストリデータベース４１０のメモリロケーションに格納された値と一致する。
【００６９】
いくつかの実施形態では、デバイス管理サービスの登録の間に、サードパーティ及び／または別のエンティティは、リダイレクションデータベース６１０に格納されたマッピング内のどのグローバルリソースまたはメモリロケーションに、セッション固有の仮想化されたリソース及び／またはセッション固有のメモリロケーションを割り当てるべきかの指示を生成することができる。このような実施形態では、起動プロセスの間（例えば、セッション作成の間）に、セッションマネージャはリダイレクションデータベース６１０を調べて、どのリソース及び／またはグローバルメモリロケーション（例えば、レジストリデータベース４１０のメモリロケーション）が、特定のセッションで使用するためのサービス管理デバイス４０６またはそのデバイス管理サービスＡに割り当てられた、対応する仮想化されたリソース及び対応するメモリロケーションを有するべきかを判定する。
【００７０】
リダイレクション仮想レイヤ５０６Ａは、オブジェクト名変換レイヤとしての役割を果たすこともできる。１つ以上の代替構成では、オブジェクト名変換レイヤは、リダイレクト仮想レイタ５０６Ａとは別個のレイヤであってもよい。オブジェクト名変換レイヤは、セッション固有のオブジェクト名解決を提供するために、名前変換ポリシーを格納することができるオブジェクト名変換データベース６１２（本明細書では変換データベース６１２とも呼ばれる）を使用することができる。
【００７１】
デバイス管理サービスＡのようなデバイス管理サービスは単一のセッション環境用に設計されているので、そのようなサービスはグローバルオブジェクト名（例えば、セッション１のような特定のセッションに固有でないオブジェクト名）を使用することができる。その結果、マルチセッション環境にデバイス管理サービスを適合させるために、グローバルオブジェクト名をセッション固有のオブジェクト名に変更することができる。グローバルオブジェクト名のセッション固有のオブジェクト名へのマッピングは、起動プロセスの間に（例えば、セッション作成の間に）割り当てられ、かつ設定されるオブジェクト名変換データベース６１２に格納されてもよい。場合によっては、デバイス管理サービスの登録の間に、デバイス管理のためのセッション固有のオブジェクト名のタクソノミーを指定することができる。
【００７２】
図６に示すセッション１を参照すると、リダイレクション仮想レイヤ５０６Ａは、デバイス管理サービスＡのセッションインスタンス５０４Ａとの通信を検査して、通信がグローバルオブジェクト名（例えば、特定のセッションに固有でないオブジェクト名）を含むかを判定することができる。リダイレクト仮想レイヤ５０６Ａは、オブジェクト名変換データベース６１２に格納されたグローバルオブジェクト名のリストを調べることによって、通信がグローバルオブジェクト名を含むかを判定することができる。そうである場合、リダイレクション仮想レイヤ５０６Ａは、オブジェクト名変換データベース６１２内の各グローバルオブジェクト名に対するセッション固有オブジェクト名を検索し、通信において、グローバルオブジェクト名をセッション固有オブジェクト名で置き換えることができる。
【００７３】
同様に、リダイレクト仮想レイヤ６０８は、ユーザアプリケーション６０４への、及びユーザアプリケーション６０４からの通信を検査して、通信がグローバルオブジェクト名（例えば、セッション１のようなセッションに固有でないオブジェクト名）を含むかを判定し、かつ通信において、グローバルオブジェクト名をオブジェクトのセッションを示すセッション固有のオブジェクト名で置き換えることができる。一例として、グローバルオブジェクト名「Ｆｏｏ」は、セッション固有のオブジェクト名「Ｆｏｏ．Ｓｅｓｓｉｏｎ１」に置き換えて、このオブジェクトがセッション１に固有であることを示すことができる。システムのグローバルオブジェクト名をセッション固有のオブジェクト名に名前変更することにより、デバイス管理サービスＡのセッションインスタンス５０４Ａは、セッション固有のオブジェクト名を使用して通信し、セッション境界が維持され、及び／または他のセッションと交差することはない。サードパーティベンダまたはパートナーは、デバイス管理用のサービスが、ワークステーション及びマルチセッションプラットフォームの両方で、何ら変更されることなく可能であるように、セッションで使用するセッション固有の命名規則を指定することができる。結果として、サードパーティのベンダ及びパートナーは、統一されたサービスモデルに注力することができ、ワークステーション及びマルチセッションプラットフォームのデバイス管理サービスの変更に多くの労力と時間を費やすことがない。
【００７４】
いくつかの実施形態では、リダイレクションデータベース６１０及び／またはリダイレクションレイヤ６０８は、グローバルオブジェクト名をセッション固有のオブジェクト名に名前変更することによって、ファイルの通信をリダイレクトすることができる。
【００７５】
いくつかの実施形態では、そして図６に示すように、セッション（例えば、セッション１）は、デバイス管理サービスＡのセッションインスタンス５０４ａに関連付けられ、サービス管理対象デバイス４０６と通信するデバイスドライバ６１４を含むことができる。デバイスドライバ６１４は、リモートサーバ４０２及び／またはクライアントデバイス４０４のカーネルスペースに常駐することができる。場合によっては、デバイスドライバ６１４は、リモートサーバ４０２上で実行されるオペレーティングシステムの一部であってもよい。他の例では、デバイスドライバ６１４は、リモートサーバ４０２上で実行されるオペレーティングシステムから（例えば、一部ではなく）独立していてもよく、かつサードパーティベンダによって供給されてもよい。このような場合、デバイス管理サービスＡのセッションインスタンス５０４ａはユーザモードで実行され、デバイス機能を実施する実際のドライバ（例えば、デバイスドライバ６１４）はリモートサーバ４０２のカーネル空間内で実行される。
【００７６】
図６に関連する上記の説明は、１つのサービス管理対象デバイス及びそれに対応するデバイス管理サービスに関するが、セッションは、第２のサービス管理対象デバイス及びそれに対応するデバイス管理サービスを含むことができる。セッションは、第２のサービス管理対象デバイス及びそれに対応するデバイス管理サービスに関して同様の方法で動作することができる。さらに、異なるユーザに対応する異なるセッションは、１つ以上のサービス管理対象デバイス及びそれらの対応するデバイス管理サービスを含むことができ、図６に関して上述したのと同様の方法で動作することができる
図７は、本明細書で説明する１つ以上の例示的な態様による、仮想化されたデバイス管理サービスのセッション開始及びロードの例示的フローを示す。１つ以上の実施形態では、図７の各ステップ及び／またはその１つ以上のステップは、１つ以上のコンピューティングデバイスによって実施されてもよい。他の実施形態では、図７に示す方法及び／またはその１つ以上のステップは、非一時的なコンピュータ可読メモリのようなコンピュータ可読媒体に格納されるコンピュータ実行可能命令に具体化することができる。いくつかの例では、図７の１つ以上のステップは、異なる順序で実施されてもよい。いくつかの例では、図７の１つ以上のステップは、省略されてもよく、及び／または実施されなくてもよい。
【００７７】
この方法は、リモートサーバ４０２が、仮想化されたマルチセッション環境において、スタートアッププロセスを介してセッションを初期化及び／または作成することができる、ステップ７０２から開始する。一例として、クライアントデバイス４０４Ａのユーザは、リモートサーバ４０２上で実行されるアプリケーションに遠隔からアクセスすることを望む場合がある。そのユーザは、ポータルにログインして、リモートサーバ４０２によって提供される仮想化されたアプリケーションサービスにアクセスすることができる。リモートサーバ４０２は、ユーザの認証証明書の受信に応答してユーザを認証し、ユーザが認証された場合、リモートサーバ４０２によって管理されるマルチセッション環境においてそのユーザのセッションを初期化する。ユーザの認証証明書が認証されない場合、リモートサーバ４０２は、ユーザがクライアントデバイス４０４Ａに認証されていないことを示すメッセージをユーザに表示するためにクライアントデバイス４０４Ａに送信することができる。
【００７８】
ユーザが認証されている場合、ステップ７０４で、リモートサーバ４０２は、ユーザのクライアントデバイスに接続されたサービス管理対象デバイスを識別し、各対応するデバイス管理サービスが事前に構成（例えば、このセッションを作成する前に、登録及び／またはセットアップ）されているかを判定する。サードパーティエンティティは、マルチセッション環境で使用するためにデバイス管理サービスを登録及び／または設定することができる。例えば、デバイス管理サービスの構成の間に、後でリダイレクション仮想レイヤによって使用するために、１つ以上のルーティングポリシー（例えば、メモリロケーション、ファイル、データベースなどのマッピング）、及びファイルまたはオブジェクト名変換ポリシーを決定する（例えば、サードパーティによって選択する）ことができる。デバイス管理サービスが事前に設定されていない場合、リモートサーバ４０２は、セッション固有のデータベースに通信（例えば、書き込みコマンド、読み出しコマンドなど）を適切にリダイレクトすることができず、かつ／またはグローバルオブジェクト名をセッション固有のオブジェクト名に変換し、結果として、上記で説明した上書き、及び不正確な読み読み出しの問題をもたらすことはない。デバイス管理サービスの仮想化されたインスタンス、ルーティングポリシー、及び／または名前変更ポリシーのうちの１つ以上の作成を許可するように事前に構成されていないユーザのクライアントデバイスに接続されたサービス管理対象デバイスに関連する各デバイス管理サービスについては、リモートサーバ４０２は、ステップ７１０に進み、他のセッションプロセス（例えば、ユーザのセッションをセットアップするための他のプロセス）を開始する。さらに、ユーザへの表示のために、リモートサーバ４０２からユーザのクライアントデバイス４０６４に警告メッセージを送信することができる。警告メッセージは、ユーザのクライアントデバイス４０４に接続されたサービス管理対象デバイス４０６が正しく機能しない可能性があり、かつ不正確な情報を表示する可能性があることを示すことができる。さらに、リモートサーバ４０２は、登録されていない、及び／または未構成のデバイス管理サービスからのグローバルレジストリデータベース４１０への書き込みコマンドを防止して、グローバルレジストリデータベース４１０に格納された情報がマルチセッション環境の他のセッションに関して正確なままであることを確実にする。
【００７９】
デバイス管理サービスの仮想化されたインスタンス、ルーティングポリシー、及び／または名前変更ポリシーの１つ以上の作成を可能にするように事前に構成された、ユーザのクライアントデバイスに接続されたサービス管理対象デバイスに関連する各デバイス管理サービスについては、リモートサーバ４０２は、ステップ７０６で、デバイス管理サービスホストを初期化し、１つ以上の事前に構成されたデバイス管理サービスの仮想化されたセッションインスタンスをロードする。例えば、リモートサーバ４０２は、セッション１において、デバイス管理サービスＡのセッションインスタンス５０４Ａ及びデバイス管理サービスＢのセッションインスタンス５０４Ｂを作成することができる。デバイス管理サービスの仮想化されたセッションインスタンスは、デバイス管理サービスのすべての機能を含むことができる。
【００８０】
ステップ７０８で、リモートサーバ４０２は、ステップ７０６で作成されたデバイス管理サービスの各セッションインスタンスのリダイレクション仮想レイヤ（例えば、リダイレクション仮想レイヤ５０６、６０８）を構築することができる。１つ以上の構成では、デバイス管理サービスの登録及び／または構成の間に、リモートサーバ４０２は、ルーティングポリシー及び名前変換ポリシーを決定し、及び／またはデバイス管理サービスまたはその関連するサードパーティエンティティから受け取ることができる。次に、リモートサーバ４０２は、そのようなポリシーを使用して、リダイレクション仮想レイヤを構成することができる。さらに、リモートサーバ４０２は、まだ生成されていない場合には、セッション固有のデータベース６０６、リダイレクションデータベース６１０及び／またはオブジェクト名変換データベース６１２を生成してもよい。
【００８１】
ステップ７１０において、リモートサーバ４０２は、マルチセッション環境においてユーザのセッションを作成するための他のセッションプロセスを初期化することができる。例えば、リモートサーバ４０２は、ユーザのクライアントデバイスによる使用のためにユーザのアプリケーションの仮想化されたインスタンスを作成することができる。
【００８２】
図８は、本明細書で説明する１つ以上の例示的な態様による、アプリケーションを起動し、アプリケーションをサービス管理対象デバイスで使用する例示的なフローを示す。１つ以上の実施形態では、図８の各ステップ及び／またはその１つ以上のステップは、１つ以上のコンピューティングデバイスによって実施されてもよい。他の実施形態では、図８に示す方法及び／またはその１つ以上のステップは、非一時的なコンピュータ可読メモリのようなコンピュータ可読媒体に格納されたコンピュータ実行可能命令で具体化することができる。いくつかの例では、図８の１つ以上のステップは、異なる順序で実施されてもよい。いくつかの例では、図８の１つ以上のステップは、省略されてもよく、及び／または実施されなくてもよい。
【００８３】
本フローは、ステップ８０２で開始し、リモートサーバ４０２は、マルチセッション環境のセッションにおいてアプリケーションの仮想化されたインスタンスを起動することができる。例えば、リモートサーバ４０２は、１つのセッションで使用するためのアプリケーションの仮想化されたセッション固有のインスタンスを作成することができる。このインスタンスは、アプリケーションの全ての機能を含むことができ、ユーザのクライアントデバイス４０４によって提供される入力を使用してリモートサーバ４０２によって実行され得る。出力は、ユーザへの表示のためにクライアントデバイス４０４に送信されてもよい。
【００８４】
ステップ８０４において、リモートサーバ４０２は、アプリケーションの仮想化されたアプリケーションインスタンスのうちの１つ以上（例えば、各々）と、デバイス管理サービスの仮想化されたセッションインスタンスの１つ以上（例えば、各々）との間にオープンな通信チャネルがあるかを判定することができる。例えば、通信が、デバイス管理サービスの仮想化されたセッションインスタンスのうちの少なくとも１つと、同じセッション内の仮想化されたアプリケーションインスタンスのうちの少なくとも１つの間で送信される場合、オープンな通信チャネルが存在し得る。オープンな通信チャネルが存在しない場合、プロセスは、以下に詳細に説明するステップ８０８に進むことができる。そうではなく、オープン通信チャネルが存在する（例えば、デバイス管理サービスの仮想化されたセッションインスタンスと仮想化アプリケーションインスタンスとの間で通信が送信されている）場合、リダイレクション仮想レイヤは、通信をインターセプトして検査して、非セッション固有メモリロケーション、ファイル、レジストリデータベース４１０などのグローバルリソースへの参照を識別し、かつグローバルオブジェクト名（例えば、システムオブジェクト名、オペレーティングシステムオブジェクト名など）を識別することもできる。
【００８５】
ステップ８０６において、リダイレクション仮想レイヤは、非セッション固有メモリロケーション、ファイル、レジストリデータベース４１０などのグローバルリソース、また、ステップ８０４で識別されたグローバルオブジェクト名（例えば、システムオブジェクト名、オペレーティングシステムオブジェクト名など）への参照のそれぞれについて、通信リダイレクト及び／またはシステムオブジェクト名変換を実施することができる。
【００８６】
一例として、アプリケーション（または、代替的にデバイス管理サービスのセッションインスタンス）からの通信は、任意のセッションに固有でない、グローバルレジストリデータベース４１０、ファイル、または他のメモリロケーションに対する書き込みコマンドであってもよい。リダイレクション仮想サーバ５０６は、リダイレクションデータベース６１０を調べることによって、通信に関連するセッションに固有の対応するメモリロケーションまたはファイルが存在するかを判定することができる。セッション固有のデータベース（例えば、セッション固有のデータベース６０６）が存在しない場合、リダイレクション仮想レイヤ５０６は、リモートサーバ４０２のメモリパーティションであってもよいセッション固有のデータベース６０６を作成することができる。一度作成された場合、またはセッションデータベース６０６が既に存在するが、書き込みコマンドで指定されたグローバルレジストリデータベース４１０のメモリロケーションまたはファイルにマップされたメモリロケーションまたはファイルを有しない場合、リダイレクション仮想レイヤ５０６は、セッション固有のデータベース６０６のメモリロケーションまたはファイルを割り当て、グローバルレジストリデータベース４１０のメモリロケーションまたはファイルをセッション固有のデータベース６０６のそのメモリロケーションまたはファイルにマッピングし、リダイレクションデータベース６１０に格納されたセッションのマッピングを更新する。さらに、書き込みコマンドは、その情報をセッション固有のデータベース６０６のメモリロケーションまたはファイルに書き込むようにリダイレクトされ、その情報をグローバルレジストリデータベース４１０の意図されたメモリロケーションまたはファイルに書き込まなくてもよい。
【００８７】
別の例として、アプリケーション（または、代替的には、デバイス管理サービスのセッションインスタンス）からの通信は、任意のセッションに固有でない、グローバルレジストリデータベース４１０、ファイル、または他のメモリロケーションからの読み出しコマンドであってもよい。リダイレクション仮想レイヤ５０６は、リダイレクションデータベース６１０を調べることによって、通信に関連するセッションに固有の対応するメモリロケーションまたはファイルが存在するかを判定することができる。セッション固有のデータベース（例えば、セッション固有のデータベース６０６）が存在しない場合、またはセッション固有のデータベース６０６が、グローバルレジストリデータベースの意図されたメモリロケーションまたはファイルにマップされたメモリロケーションまたはファイルを有しない場合、リダイレクション仮想レイヤは、読み出しコマンドが、任意のセッションに固有でないグローバルレジストリデータベース４１０、ファイル、または他のメモリロケーションから読み出すことを可能にすることができる。そうではなく、グローバルレジストリデータベース４１０の意図されたメモリロケーションまたはファイルにマップされたメモリロケーションまたはファイルがセッション固有のデータベース６０６に存在する場合、リダイレクション仮想レイヤ５０６は、グローバルレジストリデータベース４１０の意図されたメモリロケーションまたはファイルからでなく、セッション固有のデータベース６０６のメモリロケーションまたはファイルに格納された情報を読み出すように読み出しコマンドをリダイレクトすることができる。
【００８８】
さらに別の例として、リダイレクション仮想レイヤ５０６、６０８は、任意のセッションに固有ではないグローバルシステムオブジェクト名への参照について、オブジェクト名変換データベース６１２に見つかる、対応するセッション固有オブジェクト名でその通信における参照の名前を変更することができる。例えば、グローバルオブジェクト名「Ｆｏｏ」は、セッション１の場合は「Ｆｏｏ．Ｓｅｓｓｉｏｎ１」に、セッション２の場合は「Ｆｏｏ．Ｓｅｓｓｉｏｎ２」に名前を変更できる。
【００８９】
ステップ８０８において、リモートサーバ４０２は、通常のアプリケーションの起動に進むことができる。例えば、ユーザは、ユーザのクライアントデバイスを介してアプリケーションの仮想化されたインスタンスと対話することができる。アプリケーションの仮想化されたインスタンスの機能は、リモートサーバ４０２によって実行されてもよい。
【００９０】
ステップ８１０で、リダイレクション仮想レイヤ５０６、６０８は、仮想アプリケーションインスタンスが、リダイレクトされたレジストリ及び／またはリダイレクトされたファイルシステムを含むことができるセッション固有のデータベース６０６にアクセスしようとしているか、及び／またはアクセスしたかを判定することができる。そうである場合、リダイレクション仮想レイヤ５０６、６０８は、グローバルシステムオブジェクトの仮想化されたセッション固有のインスタンスが既に作成され、かつセッション固有のデータベース６０６に格納されてしていないかぎり、ステップ８１２において、グローバルシステムオブジェクトの仮想化されたセッション固有のインスタンスを作成し、それをセッション固有のデータベース６０６に格納する。さらに、リダイレクション仮想レイヤ５０６、６０８は、グローバルシステムオブジェクトの仮想化されたセッション固有のインスタンスのロケーション、及びグローバルシステムオブジェクトへの対応を含むように、リダイレクションデータベース６１０に格納されたセッションのマッピングを更新することができる。その結果、アプリケーションインスタンスは、サービス管理対象デバイスからデータを取得しながら、グローバルシステムオブジェクトの仮想化されたセッション固有のインスタンスにアクセスし、それを使用することができる。さらに、リダイレクション仮想レイヤ５０６、６０８がグローバルシステムオブジェクトについて後続の通信をインターセプトするとき、グローバルシステムオブジェクトは、リダイレクションデータベース６１０を使用して、グローバルシステムオブジェクトがグローバルシステムオブジェクトの対応する仮想化されたセッション固有のインスタンスを有するかを判定し、そうである場合、グローバルシステムオブジェクトの仮想化されたセッション固有のインスタンスを使用するように指示され得る。他のセッションは、グローバルシステムオブジェクトの仮想化されたセッション固有のインスタンスにアクセスしない可能性がある。そうではなく、アプリケーションインスタンスがセッション固有のデータベース６０６にアクセスしようとしていない、及び／またはアクセスしていない場合、グローバルシステムオブジェクトは、ステップ８１４で仮想化されない可能性がある。
【００９１】
場合によっては、ステップ８０４及び／または８０６において、リダイレクション仮想レイヤは、アプリケーションのセッションインスタンスとデバイス管理サービスとの間の通信チャネルを仮想化することができる。さらに、ステップ８１０及び／または８１２において、リダイレクション仮想レイヤは、アプリケーション及びデバイス管理サービスのセッションインスタンスによる使用のために、様々なタイプのリソースを仮想化することができる。
【００９２】
いくつかの実施形態では、リダイレクション仮想レイヤはファイルシステム変換を実施することができる。例えば、リダイレクション仮想レイヤがセッションに関連するメッセージをルーティングするロケーションは、要求に関連し、かつそのロケーションに対する書き込み要求が既に受信されているかに依存する。第１または最初の書き込み要求を含む、グローバルレジストリデータベース４１０のロケーションに対するセッションに関連する各書き込み要求は、グローバルレジストリデータベース４１０のロケーションに対応するセッション固有のデータベース６０６のロケーションにリダイレクトされ、その対応を反映するために、リダイレクションデータベース６１０に格納されたマッピングを更新することができる。ファイルからの読み出し要求は、（例えば、書き込み要求を介して）ファイルのアクセス及び／または内容の変更を試みるまで、元のファイルからの読み出し要求が続く。書き込みアクセスの後にオープンな読み出し要求の場合、ファイルは自動的にセッション固有のサイロ（例えば、セッション固有のディレクトリ６０６）にリダイレクトされる。一例として、リダイレクション仮想レイヤは、グローバルレジストリデータベース４１０のロケーションに対する読み出し要求を受信したことに応答して、リダイレクションデータベース６１０に格納されたマッピングを使用することによって、グローバルレジストリデータベース４１０のロケーションに対するセッションに関連付けられた、以前にインターセプトされた書み込みアクセスがあったかを判定することができる。そうである場合、リダイレクション仮想レイヤは、情報を読み出すために、セッション固有のディレクトリ６０６のグローバルレジストリデータベース４１０のロケーションに対応するロケーションに読み出し要求をルート変更ことができる。そうではなく、グローバルレジストリデータベース４１０のロケーションに対するセッションに関連付けられた以前の書き込みアクセスがなかった場合、リダイレクション仮想レイヤは、グローバルレジストリデータベース４１０のロケーションに読み出し要求をルーティングして情報を読み出すことができる。
【００９３】
本明細書で使用されるように、セッション内のコンポーネント（例えば、リダイレクション仮想レイヤ）が機能を実施していると言われるとき、リモートサーバ４０２が機能を実施している可能性がある。
【００９４】
主題は、構造的特徴及び／または方法論的行為に固有の言語で説明されているが、添付の請求項に定義された主題は、必ずしも上述の固有の特徴または行為に限定されないことを理解されたい。むしろ、上記の固有の特徴及び動作は、請求項を実現する例示的な形態として開示されている。
【００９５】
関連出願の相互参照
この出願は、２０１５年８月３日に出願された「Ｖｉｒｔｕａｌｉｚｉｎｇ  Ｄｅｖｉｃｅ  Ｍａｎａｇｅｍｅｎｔ  Ｓｅｒｖｉｃｅｓ  ｏｎ  ａ  ｍｕｌｔｉ−ｓｅｓｓｉｏｎ  Ｐｌａｔｆｏｒｍ」と題する米国非仮特許出願第１４／８１６，８００号に対する優先権を主張する。上記の出願は、その全体が全ての目的のために参照により本明細書に組み込まれる。
本発明の精神および範囲は、添付する特許請求の範囲の中に存在するが、本願の出願時に特許請求の範囲として存在し、その一部は補正により削除された、以下の［予備的な特許請求の範囲］の中にも潜在する。この［予備的な特許請求の範囲］の記載事項は、本願明細書の開示に含まれるものとする。
［予備的な特許請求の範囲］
［予備請求項１１］
プロセッサと、
命令を格納しているコンピュータ可読媒体と、を備える装置であって、
前記命令は、前記プロセッサによって実行されると、
各セッションが、異なるユーザに固有であり、アプリケーションの少なくとも１つの仮想インスタンスを含む複数のセッションを生成し、
前記装置とは異なるユーザデバイスから受信した１つ以上のユーザ入力に基づいて、前記複数のセッションのうちの１つのセッションについて前記アプリケーションの仮想インスタンスの１つ以上の機能を実施し、
前記ユーザデバイスが、デバイスドライバによって管理されるように構成された周辺デバイスに接続されているかを判定し、かつ
前記ユーザデバイスが、前記デバイスドライバによって管理されるように構成された前記周辺デバイスに接続されていると判定されたことに応答して、前記セッション用の前記デバイスドライバの仮想インスタンス、及び前記セッション用の前記デバイスドライバの前記仮想インスタンスのためのリダイレクションレイヤを生成するように前記装置を構成する、装置。
［予備請求項１２］
前記コンピュータ可読媒体は命令を格納し、前記命令は、前記プロセッサによって実行されると、
異なるユーザデバイスから受信した１つ以上のユーザ入力に基づいて、前記複数のセッションのうちの異なるセッションについて前記アプリケーションの異なる仮想インスタンスの１つ以上の機能を実施し、
前記異なるユーザデバイスが、前記デバイスドライバによって管理されるように構成された異なる周辺デバイスに接続されているかを判定し、かつ
前記異なるユーザデバイスが、前記デバイスドライバによって管理されるように構成された前記異なる周辺デバイスに接続されていると判定されたことに応答して、前記異なるセッション用の前記デバイスドライバの異なる仮想インスタンス、及び前記異なるセッション用の前記デバイスドライバの前記異なる仮想インスタンス用の異なるリダイレクションレイヤを生成するように前記装置をさらに構成する、予備請求項１１に記載の装置。
［予備請求項１３］
前記コンピュータ可読媒体は命令を格納し、前記命令は、前記プロセッサによって実行されると、
前記デバイスドライバの前記仮想インスタンスと、前記アプリケーションの前記仮想インスタンスとの間の通信をインターセプトし、かつ
前記通信が、グローバルレジストリデータベースのロケーションへの書き込み命令を含むと判定したことに応答して、前記セッションに固有で前記グローバルレジストリデータベースの前記ロケーションに対応する、データベースのロケーションに書き込み命令をルーティングするように前記装置をさらに構成する、予備請求項１１に記載の装置。
［予備請求項１４］
前記コンピュータ可読媒体は命令を格納し、前記命令は、前記プロセッサによって実行されると、
前記デバイスドライバの前記仮想インスタンスと、前記アプリケーションの前記仮想インスタンスとの間の通信をインターセプトし、かつ
前記通信が、グローバルレジストリデータベースのロケーションへの読み出し命令を含むと判定したことに応答して、前記セッションに固有で前記グローバルレジストリデータベースの前記ロケーションに対応する、データベースのロケーションに読み出し命令をルーティングするように前記装置をさらに構成する、予備請求項１１に記載の装置。
［予備請求項１５］
前記コンピュータ可読媒体は命令を格納し、前記命令は、前記プロセッサによって実行されると、
前記デバイスドライバの前記仮想インスタンスと、前記アプリケーションの前記仮想インスタンスとの間の通信をインターセプトし、かつ
前記通信がグローバルオブジェクトへの参照を含むと判定したことに応答して、
前記セッションに固有である前記グローバルオブジェクトの仮想インスタンスを生成し、
前記グローバルオブジェクトへの前記参照を前記セッションに固有である前記グローバルオブジェクトの前記仮想インスタンスへの参照に変更するように前記装置をさらに構成する、予備請求項１１に記載の装置。
［予備請求項１６］
各セッションが、異なるユーザに固有であり、アプリケーションの少なくとも１つの仮想インスタンスを含む、複数のセッションをコンピューティングデバイスによって生成することと、
前記コンピューティングデバイスとは異なるユーザデバイスから受信した１つ以上のユーザ入力に基づいて、前記複数のセッションのうちの１つのセッションについて前記アプリケーションの仮想インスタンスの１つ以上の機能を前記コンピューティングデバイスによって実施することと、
前記ユーザデバイスが、デバイスドライバによって管理されるように構成された周辺デバイスに接続されていると判定したことに応答して、前記セッション用の前記デバイスドライバの仮想インスタンス、及び前記セッション用の前記デバイスドライバの前記仮想インスタンスのためのリダイレクションレイヤを生成することと、
セッションに関連し、グローバルリソース向けのメッセージを、前記セッションに固有である前記グローバルリソースの仮想インスタンスにルート変更することと、を含む、方法。
［予備請求項１７］
前記複数のセッションの各々が、同じオペレーティングシステムと通信し、ハイパーバイザーと通信しない、予備請求項１６に記載の方法。
［予備請求項１８］
前記メッセージ内のグローバルオブジェクト名を前記セッション固有のオブジェクト名に名前変更することをさらに含む、予備請求項１６に記載の方法。
［予備請求項１９］
前記セッションに関連し、グローバルリソース向けの前記メッセージの少なくとも１つが、グローバルレジストリデータベースのロケーションへの書き込み命令または読み出し命令を含む、予備請求項１６に記載の方法。
［予備請求項２０］
前記セッションに関連する読み出し命令をインターセプトすることと、
前記セッションに関連する前記読み出し命令が、グローバルレジストリデータベースのロケーションに関するものであると判定することと、
前記セッションに関連し、前記グローバルレジストリデータベースのロケーションに関する書き込み命令が、前記セッションに固有であり、前記グローバルレジストリデータベースのロケーションに対応するデータベースのロケーションに、以前にルート変更されたことがあると判定したことに応答して、前記セッションに固有であり、前記グローバルレジストリデータベースのロケーションに対応するデータベースの前記ロケーションに、前記読み出し命令をルート変更することと、をさらに含む、予備請求項１６に記載の方法。
【図１】
0006574895.tif 000002
【図２】
0006574895.tif 000003
【図３】
0006574895.tif 000004
【図４】
0006574895.tif 000005
【図５】
0006574895.tif 000006
【図６】
0006574895.tif 000007
【図７】
0006574895.tif 000008
【図８】
0006574895.tif 000009