(58)【調査した分野】(Int.Cl.,DB名)
複数のセッションを含む仮想環境を提供するように構成された第1のコンピューティングデバイスであって、各セッションが、異なるユーザに固有であり、前記第1のコンピューティングデバイスによって実行されるアプリケーションの少なくとも1つの仮想インスタンスを含む、第1のコンピューティングデバイスと、
広域エリアネットワークを介して前記第1のコンピューティングデバイスと通信可能に結合される第2のコンピューティングデバイスであって、前記複数のセッションのうちの1つのセッションと関連しており、前記セッションに固有の前記アプリケーションの仮想インスタンスと対話するように構成された、第2のコンピューティングデバイスと、を備えるシステムであって、
前記第2のコンピューティングデバイスは、デバイス管理サービスによって管理されるように構成されたサービス管理対象デバイスに通信可能に結合され、
前記セッションは、前記セッションで使用するための前記デバイス管理サービスの仮想インスタンス、及び前記セッションで使用するためのリダイレクションレイヤを含み、
前記リダイレクションレイヤは、前記セッションに固有の前記アプリケーションの前記仮想インスタンスと、前記セッションで使用するための前記デバイス管理サービスの前記仮想インスタンスとの間の通信をインターセプトするように構成されている、システム。
前記通信がグローバルレジストリデータベースのロケーションへの読み出し命令を含むと判定したことに応答して、前記リダイレクションレイヤが、前記グローバルレジストリデータベースの前記ロケーションへの書き込み命令を以前にインターセプトしたかを判定すること、をさらに含む、請求項1に記載のシステム。
前記リダイレクションレイヤが、前記グローバルレジストリデータベースの前記ロケーションへの前記書き込み命令を以前にインターセプトしたと判定したことに応答して、前記書き込み命令が以前にルーティングされた前記セッションに固有のデータベースのロケーションに、前記読み出し命令をルーティングすること、をさらに含む、請求項5に記載のシステム。
前記リダイレクションレイヤが前記グローバルレジストリデータベースの前記ロケーションへの前記書き込み命令を以前にインターセプトしていないと判定したことに応答して、前記グローバルレジストリデータベースの前記ロケーションに、前記読み出し命令をルーティングすること、をさらに含む、請求項5に記載のシステム。
【発明を実施するための形態】
【0012】
以下に、より詳細に説明される主題の一般的な序論として、ここで説明される態様は、デバイス及びその管理サービスが単一のユーザ環境内で利用されるとして、または利用されるとの想定の下に設計されたデバイスの管理専用のサービスの仮想化及び管理に向けられている。これらのサービスを仮想化し、そのようなサービスの複数のインスタンスを作成することにより、そのようなデバイスは、マルチユーザ環境における仮想化されたサービスによって使用及び管理することができる。
【0013】
様々な実施形態の次の説明では、上記で識別され本明細書の一部をなす添付の図面を参照する。添付図面には、本明細書で説明する態様を実践することができる様々な実施形態が例示として示される。本明細書で説明する範囲から逸脱することなく、他の実施形態を利用することができ、かつ構造的及び機能的改変を行うことができることを理解されたい。様々な態様は、他の実施形態が可能であり、かつ様々な異なる方法で実践し、または実行することが可能である。
【0014】
本明細書で使用される表現及び用語は、説明目的のためのものであり、限定的であるとみなされるべきではないことを理解されたい。むしろ、本明細書で使用される句及び用語は、最も広い解釈及び意味を与えられるべきである。「含む」及び「備える」及びその変形の使用は、それ以降に列挙された項目及びその等価物、ならびにそれらの追加項目及び等価物を包含することを意味する。「取り付けられた」、「接続された」、「結合された」、「位置付けられた」、「係合された」及び類似の用語の使用は、直接的及び間接的両方の取り付け、接続、結合、位置決め及び係合を含む。
【0015】
〈コンピュータアーキテクチャ〉
コンピュータソフトウェア、ハードウェア、及びネットワークは、とりわけ、スタンドアローン、ネットワーク、リモートアクセス(別名リモートデスクトップ)、仮想化された、及び/またはクラウドベースの環境を含む様々な異なるシステム環境で、利用することができる。
図1は、スタンドアローン及び/またはネットワーク環境において、本明細書で説明する1つ以上の例示的な態様を実現するために使用され得るシステムアーキテクチャ及びデータ処理デバイスの一例を示す。様々なネットワークノード103、105、107、及び109は、インターネットなどの広域ネットワーク(WAN)101を介して相互接続されてもよい。プライベートイントラネット、企業ネットワーク、LAN、メトロポリタンエリアネットワーク(MAN)無線ネットワーク、パーソナルネットワーク(PAN)などを含む他のネットワークを使用してもよく、または代替的に使用してもよい。ネットワーク101は、例示目的のためのものであり、より少ないまたは追加のコンピュータネットワークと置き換えることができる。ローカルエリアネットワーク(LAN)は、1つ以上の任意の既知のLANトポロジーを有することができ、イーサネット(登録商標)などの様々な異なるプロトコルのうちの1つ以上を使用することができる。デバイス103、105、107、109、及び他のデバイス(不図示)は、ツイストペア線、同軸ケーブル、光ファイバ、電波または他の通信媒体を介して1つ以上のネットワークに接続されてもよい。
【0016】
本明細書で使用され、図面に示されている用語「ネットワーク」は、リモート記憶デバイスが1つ以上の通信経路を介して共に結合されるシステムだけでなく、ストレージ機能を有するようなシステムに時折、結合され得るスタンドアローンデバイスにも適用することができる。したがって、「ネットワーク」という用語には、「物理ネットワーク」だけでなく、全ての物理ネットワークに存在する単一のエンティティに起因するデータで構成される「コンテンツネットワーク」も含まれる。
【0017】
コンポーネントは、データサーバ103、ウェブサーバ105、及びクライアントコンピュータ107、109を含むことができる。データサーバ103は、本明細書で説明する1つ以上の例示的な態様を実施するためのデータベース及び制御ソフトウェアの全体的な、アクセス、制御及び管理を提供する。データサーバ103はウェブサーバ105に接続され、ユーザは、ウェブサーバ105を介してデータと対話し、要求されたとおりにデータを取得する。代替的に、データサーバ103は、ウェブサーバ自体として動作し、かつインターネットに直接接続されてもよい。データサーバ103は直接的または間接的な接続を介して、または他の何らかのネットワークを介して、ネットワーク101(例えば、インターネット)を通ってウェブサーバ105に接続することができる。ユーザは、ウェブサーバ105によってホストされる1つ以上の外部に露出されたウェブサイトを介してデータサーバ103に接続するために、リモートコンピュータ107、109を使用して、例えばウェブブラウザを使用して、データサーバ103と対話することができる。クライアントコンピュータ107、109は、そこに格納されたデータにアクセスするためにデータサーバ103と協働して使用されてもよく、または他の目的のために使用されてもよい。例えば、ユーザは、クライアントデバイス107から、当技術分野で知られているように、インターネットブラウザを使用して、または、ウェブサーバ105及び/またはデータサーバ103とコンピュータネットワーク(例えば、インターネット)を越えて、通信するソフトウェアアプリケーションを実行することによって、ウェブサーバ105にアクセスすることができる。
【0018】
サーバとアプリケーションは、同じ物理マシン上で結合され、別個の仮想アドレスまたは論理アドレスを保持することも、別個の物理マシン上に存在することもできる。
図1は、使用可能なネットワークアーキテクチャの単なる一例を示しており、当業者であれば、使用される特定のネットワークアーキテクチャ及びデータ処理デバイスは、本明細書でさらに説明するように、変更可能であり、かつそれらが提供する機能性に二次的であるということを理解するであろう。例えば、ウェブサーバ105とデータサーバ103によって提供されるサービスは、単一のサーバ上で組みみ合わせることができる。
【0019】
各コンポーネント103、105、107、109は、任意のタイプの既知のコンピュータ、サーバ、またはデータ処理デバイスとすることができる。データサーバ103は、例えば、データサーバ103の全体的な動作を制御するプロセッサ111を含むことができる。データサーバ103は、ランダムアクセスメモリ(RAM)113、リードオンリメモリ(ROM)115、ネットワークインターフェース117、入力/出力インターフェース119(例えば、キーボード、マウス、ディスプレイ、プリンタなど)、及びメモリ121をさらに含むことができる。入力/出力(I/O)119は、データまたはファイルの読み出し、書き込み、表示、及び/または印刷のための様々なインターフェースユニット及びドライブを含むことができる。メモリ121は、データ処理デバイス103の全体的な動作を制御するためのオペレーティングシステムソフトウェア123、データサーバ103に本明細書で説明する態様を実施するよう指示する制御論理125、及び/または本明細書で説明する態様と併せて使用されても使用されなくてもよい、二次的なサポート及び/または他の機能を提供する他のアプリケーションソフトウェア127をさらに格納することができる。制御論理は、本明細書ではデータサーバソフトウェア125とも呼ぶことがある。データサーバソフトウェアの機能は、制御論理にコード化されたルールに基づいて自動的に行われ、システムに入力を供給するユーザによって手動で行われ、及び/またはユーザ入力に基づく自動処理の組み合わせ(例えば、クエリ、データ更新など)によって行われる、操作または決定を指すことができる。
【0020】
メモリ121は、本明細書で説明する1つ以上の態様の実施に使用されるデータを格納することもでき、第1のデータベース131及び第2のデータベース129を含む。いくつかの実施形態では、第1のデータベースは、(例えば、別個のテーブル、レポートなどとして)第2のデータベースを含むことができる。つまり、システム設計に応じて、情報を単一のデータベースに格納し、または異なる論理、仮想、または物理データベースに分離することができる。デバイス105、107、109は、デバイス103に関して説明したのと同様のアーキテクチャまたは異なるアーキテクチャを有することができる。当業者であれば、本明細書で説明するデータ処理デバイス103(またはデバイス105、107、109)の機能を複数のデータ処理デバイスに分散させる、例えば、地理的ロケーション、ユーザーアクセスレベル、サービス品質(QoS)などに基づいて、処理負荷を複数のコンピュータに分散し、トランザクションを分離することなどができることを理解するであろう。
【0021】
1つ以上の態様は、本明細書で説明されるような1つ以上のコンピュータまたは他のデバイスによって実行される、1つ以上のプログラムモジュールなどの、コンピュータ使用可能または読み出し可能なデータ及び/またはコンピュータ実行可能命令で具体化されてもよい。一般に、プログラムモジュールは、コンピュータまたは他のデバイス内のプロセッサによって行われるとき、特定のタスクを実施し、または特定の抽象データ型を実現する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。モジュールは、実行のために後でコンパイルされるソースコードプログラミング言語で書かれてもよく、(これらに限定されないが)HTML(HyperText Markup Language)またはXML(Extensible Markup Language)などのスクリプト言語で記述されてもよい。コンピュータ実行可能命令は、不揮発性記憶デバイスなどのコンピュータ可読媒体に格納されてもよい。ハードディスク、CD−ROM、光学記憶デバイス、磁気記憶デバイス、及び/またはそれらの任意の組み合わせを含む、任意の適切なコンピュータ可読記憶媒体を利用することができる。さらに、本明細書で説明するデータまたはイベントを表す様々な送信(非記憶)媒体は、金属ワイヤ、光ファイバ、及び/または無線送信媒体(例えば、空気及び/またはは空間)などの信号伝達媒体を通って進む電磁波の形態で送信元と送信先との間で転送されてもよい。本明細書で説明される様々な態様は、方法、データ処理システム、またはコンピュータプログラム製品として具体化されてもよい。したがって、ソフトウェア、ファームウェア、及び/またはハードウェアまたは集積回路、フィールドプログラマブルゲートアレイ(FPGA)などのハードウェア同等物において、様々な機能が全体的または部分的に具体化されてもよい。本明細書で説明される1つ以上の態様をより効果的に実現するために、特定のデータ構造を使用することができ、このようなデータ構造は、本明細書で説明するコンピュータ実行可能命令及びコンピュータ使用可能データの範囲内で考えられる。
【0022】
図2をさらに参照すると、本明細書で説明される1つ以上の態様は、リモートアクセス環境において実現され得る。
図2は、本明細書で説明される1つ以上の例示的な態様に従って使用され得る例示的なコンピューティング環境200内の汎用コンピューティングデバイス201を含む例示的なシステムアーキテクチャを示す。汎用コンピューティングデバイス201は、クライアントアクセスデバイスに仮想マシンを提供するように構成された単一のサーバまたは複数サーバデスクトップ仮想化システム(例えば、リモートアクセスまたはクラウドシステム)内のサーバ206aとして使用することができる。汎用コンピューティングデバイス201は、サーバ、及びRAM205、ROM207、I/Oモジュール209及びメモリ215を含む、その関連コンポーネントの全体的な動作を制御するためのプロセッサ203を有することができる。
【0023】
I/Oモジュール209は、汎用コンピューティングデバイス201のユーザが入力を提供することができるマウス、キーパッド、タッチスクリーン、スキャナ、光学式リーダ、及び/またはスタイラス(または他の入力デバイス(複数))を含むことができ、また、オーディオ出力を提供するための1つ以上のスピーカと、テキスト、オーディオビジュアル、及び/またはグラフィカル出力を提供するためのビデオ表示デバイスとを含むこともできる。ソフトウェアは、メモリ215及び/または他の記憶装置に格納されて、本明細書で説明されるような様々な機能を実施するために、汎用コンピューティングデバイス201を専用コンピューティングデバイスに構成するための命令をプロセッサ203に提供する。例えば、メモリ215は、オペレーティングシステム217、アプリケーションプログラム219、及び関連するデータベース221など、コンピューティングデバイス201によって使用されるソフトウェアを格納することができる。
【0024】
コンピューティングデバイス201は、(クライアントデバイスとも呼ばれる)端末240などの1つ以上のリモートコンピュータへの接続をサポートするネットワーク環境で動作することができる。端末240は、汎用コンピューティングデバイス103または201に関して上述した要素の多くまたは全てを含む、パーソナルコンピュータ、モバイルデバイス、ラップトップコンピュータ、タブレット、またはサーバであってもよい。
図2に示すネットワーク接続は、ローカルエリアネットワーク(LAN)225及び広域ネットワーク(WAN)229を含むが、他のネットワークを含むこともできる。LANネットワーキング環境で使用される場合、コンピューティングデバイス201は、ネットワークインターフェースまたはアダプタ223を介してLAN225に接続されてもよい。WANネットワーキング環境で使用される場合、コンピューティングデバイス201は、コンピュータネットワーク230(例えば、インターネット)などのWAN229を越えて通信を確立するためのモデム227または他の広域ネットワークインターフェースを含むことができる。示されたネットワーク接続は例示であり、コンピュータ間の通信リンクを確立する他の手段を使用することができることが理解されよう。コンピューティングデバイス201及び/または端末240は、バッテリ、スピーカ、及びアンテナ(図示せず)などの様々な他のコンポーネントを含むモバイル端末(例えば、携帯電話、スマートフォン、携帯情報端末(PDA)、ノートブックなど)であってもよい。
【0025】
本明細書で説明される態様は、多数の他の汎用または専用コンピューティングシステム環境または構成と共に動作することもできる。本明細書で説明する態様での使用に適している他のコンピューティングシステム、環境、及び/または構成の例には、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル民生用電子機器、ネットワークパーソナルコンピュータ(PC)、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれるが、これらに限定されない。
【0026】
図2に示すように、1つ以上のクライアントデバイス240は、1つ以上のサーバ(一般に、本明細書では「サーバ(複数)206」と呼ばれる)206a〜206nと通信することができる。一実施形態では、コンピューティング環境200は、サーバ206とクライアントマシン(複数)240との間にインストールされたネットワーク機器を含むことができる。ネットワーク機器は、クライアント/サーバ接続を管理することができ、場合によっては、複数のバックエンドサーバ206の間でクライアント接続の負荷を分散することができる。
【0027】
クライアントマシン(複数)240は、いくつかの実施形態では、単一のクライアントマシン240または単一のグループのクライアントマシン240と呼ぶことがあり、一方、サーバ(複数)206は、単一のサーバ206または単一のグループのサーバ206と呼ぶことがある。一実施形態では、単一のクライアントマシン240は複数のサーバ206と通信し、別の実施形態では単一のサーバ206は複数のクライアントマシン240と通信する。さらに別の実施形態では、単一のクライアントマシン240が単一のサーバ206と通信する。
【0028】
いくつかの実施形態では、クライアントマシン240は、以下の非網羅的な用語、すなわち、クライアントマシン(複数)、クライアント(複数)、クライアントコンピュータ(複数)、クライアントデバイス(複数)、クライアントコンピューティングデバイス(複数)、ローカルマシン、リモートマシン、クライアントノード(複数)、エンドポイント(複数)、またはエンドポイントノード(複数)のうちのいずれか1つによって参照されることができる。いくつかの実施形態では、サーバ206は、以下の非網羅的な用語、すなわち、サーバ(複数)、ローカルマシン、リモートマシン、サーバファーム(複数)、またはホストコンピューティングデバイス(複数)のうちのいずれか1つによって参照されることができる。
【0029】
一実施形態では、クライアントマシン240は仮想マシンであってもよい。仮想マシンは任意の仮想マシンとすることができ、いくつかの実施形態では、仮想マシンは、タイプ1またはタイプ2のハイパーバイザー、例えば、Citrix Systems、IBM、VMwareによって開発されたハイパーバイザーまたは他のハイパーバイザーによって管理される任意の仮想マシンとすることができる。いくつかの態様では、仮想マシンはハイパーバイザーによって管理され、態様のうちでは、仮想マシンが、サーバ206上で実行するハイパーバイザーまたはクライアント240上で実行するハイパーバイザーによって管理されてもよい。
【0030】
いくつかの実施形態は、サーバ206または他の遠隔配置されたマシン上で遠隔から実行するアプリケーションによって生成されたアプリケーション出力を表示するクライアントデバイス240を含む。これらの実施形態では、クライアントデバイス240は、仮想マシン受信機プログラムまたはアプリケーションを実行して、アプリケーションウィンドウ、ブラウザ、または他の出力ウィンドウに出力を表示することができる。一例では、アプリケーションはデスクトップであり、他の例ではアプリケーションはデスクトップを生成または提示するアプリケーションである。デスクトップは、ローカル及び/またはリモートアプリケーションを統合することができるオペレーティングシステムのインスタンスのためのユーザインターフェースを提供するグラフィカルシェルを含むことができる。本明細書で使用されるアプリケーションとは、オペレーティングシステムのインスタンス(及びオプションでデスクトップも)がロードされた後に実行するプログラムである。
【0031】
いくつかの実施形態では、サーバ206は、リモートプレゼンテーションプロトコルまたは他のプログラムを使用して、クライアント上で実行するシンクライアントまたはリモートディスプレイアプリケーションにデータを送信し、サーバ206上で実行するアプリケーションによって生成されるディスプレイ出力を提示する。シンクライアントまたはリモートディスプレイプロトコルは、次の非包括的なプロトコルリスト、すなわち、Citrix Systems,Inc.of Ft.Lauderdale,Floridaによって開発された、Independent Computing Architecture(ICA)プロトコル、またはMicrosoft Corporation of Redmond,Washingtonによって製造されたRemote Desktop Protocol(RDP)のうちのいずれか1つであり得る。
【0032】
リモートコンピューティング環境は、サーバ206a〜206nが、例えばクラウドコンピューティング環境のサーバファーム206に論理的にグループ化されるように、複数のサーバ206a〜206nを含むことができる。サーバファーム206は、地理的に分散されているが論理的にグループ化されたサーバ206、または論理的にグループ化されつつ、互いに近接して配置されたサーバ206を含むことができる。サーバファーム206内の地理的に分散されたサーバ206a〜206nは、いくつかの実施形態では、WAN(ワイド)、MAN(メトロポリタン)、またはLAN(ローカル)を使用して、通信することができる。ここで、異なる地理的領域は、異なる大陸、大陸の異なる領域、異なる国、異なる州、異なる都市、異なる構内、異なる場所、または前述の地理的ロケーションの任意の組み合わせとして特徴付けることができる。いくつかの実施形態では、サーバファーム206は単一のエンティティとして管理され、他の実施形態ではサーバファーム206は複数のサーバファームを含むことができる。
【0033】
いくつかの実施形態では、サーバファームは、(例えば、WINDOWS(登録商標)、UNIX(登録商標)、LINUX、iOS、ANDROID(登録商標)、SYMBIANなど)実質的に同様のタイプのオペレーティングシステムプラットフォームを実行するサーバ206を含むことができる。他の実施形態では、サーバファーム206は、第1のタイプのオペレーティングシステムプラットフォームを実行する1つ以上のサーバの第1のグループと、第2のタイプのオペレーティングシステムプラットフォームを実行する1つ以上のサーバの第2のグループとを含むことができる。
【0034】
サーバ206は、必要に応じて、任意のタイプのサーバ、例えば、ファイルサーバ、アプリケーションサーバ、ウェブサーバ、プロキシサーバ、機器、ネットワーク機器、ゲートウェイ、アプリケーションゲートウェイ、ゲートウェイサーバ、仮想化サーバ、デプロイメントサーバ、Secure Sockets Layer(SSL)VPNサーバ、ファイアウォール、ウェブサーバ、アプリケーションサーバまたはマスタアプリケーションサーバ、アクティブディレクトリを実行するサーバ、またはファイアウォール機能、アプリケーション機能、またはロードバランシング機能を提供するアプリケーション加速プログラムを実行するサーバとして構成されてもよい。他のサーバータイプも使用できる。
【0035】
いくつかの実施形態は、クライアントマシン240から要求を受信し、第2のサーバ206bにその要求を転送し、第2のサーバ206bからの応答で、クライアントマシン240によって生成された要求に応答する第1のサーバ206aを含む。第1のサーバ206aは、クライアントマシン240に利用可能なアプリケーションの列挙、及びアプリケーションの列挙内で識別されたアプリケーションをホストするアプリケーションサーバ206に関連するアドレス情報を取得することができる。次いで、第1のサーバ206aは、ウェブインターフェースを使用してクライアントの要求に対する応答を提示し、クライアント240に直接通信して、識別されたアプリケーションへのアクセスをクライアント240に提供することができる。1つ以上のクライアント240及び/または1つ以上のサーバ206は、ネットワーク230、例えばネットワーク101を越えてデータを送信することができる。
【0036】
図2は、例示的なデスクトップ仮想化システムの高水準アーキテクチャを示す。図示のように、デスクトップ仮想化システムは、仮想デスクトップ及び/または仮想アプリケーションを1つ以上のクライアントアクセスデバイス240に提供するように構成された少なくとも1つの仮想化サーバ206を含む、単一のサーバまたは複数のサーバシステム、またはクラウドシステムであってもよい。本明細書で使用するデスクトップは、1つ以上のアプリケーションをホスト及び/または実行することができるグラフィック環境または空間を指す。デスクトップは、ローカル及び/またはリモートアプリケーションを統合することができる、オペレーティングシステムのインスタンスのためのユーザインターフェースを提供するグラフィカルシェルを含むことができる。アプリケーションには、オペレーティングシステムのインスタンス(及びオプションでデスクトップも)がロードされた後で実行するプログラムが含まれてもよい。オペレーティングシステムの各インスタンスは、物理的(例えば、デバイスごとに1つのオペレーティングシステム)、または仮想(例えば、単一のデバイス上で作動している多くのOSのインスタンス)であってもよい。各アプリケーションは、ローカルデバイス上で実行されてもよく、または遠隔配置されたデバイス(例えば、遠隔のデバイス)上で実行されてもよい。
【0037】
さらに
図3を参照すると、コンピューティングデバイス301は、仮想化環境、例えば単一のサーバ、複数のサーバ、またはクラウドコンピューティング環境内の仮想化サーバとして構成することができる。
図3に示す仮想化サーバ301は、
図2に示すサーバ206の1つ以上の実施形態によって、または他の既知のコンピューティングデバイスによって、展開及び/または実現することができる。仮想化サーバ301には、1つ以上の物理ディスク304、1つ以上の物理デバイス306、1つ以上の物理プロセッサ308、及び1つ以上の物理メモリ316を含むことができるハードウェアレイヤ310が含まれる。いくつかの実施形態では、ファームウェア312が、物理メモリ316のメモリ要素内に格納され、1つ以上の物理プロセッサ308によって実行され得る。仮想化サーバ301は、物理メモリ316のメモリ要素に格納され1つ以上の物理プロセッサ308によって実行されるオペレーティングシステム314をさらに含むことができる。なお、さらに、ハイパーバイザー302が、物理メモリ316のメモリ要素に格納されてもよく、1つ以上の物理プロセッサ308によって実行することができる。
【0038】
1つ以上の物理プロセッサ308上で実行するのは、1つ以上の仮想マシン332A〜C(一般に332)であってもよい。各仮想マシン332は、仮想ディスク326A〜C及び仮想プロセッサ328A〜Cを有することができる。いくつかの実施形態では、第1の仮想マシン332Aは、仮想プロセッサ328Aを使用して、ツールスタック324を含む制御プログラム320を実行することができる。制御プログラム320は、制御仮想マシン、Dom0、Domain0、セッション0、またはシステムの運営及び/または制御に使用される他の仮想マシンを指すことができる。いくつかの実施形態では、1つ以上の仮想マシン332B〜Cは、仮想プロセッサ328B〜Cを使用して、ゲストオペレーティングシステム330A〜Bを実行することができる。
【0039】
仮想化サーバ301は、仮想化サーバ301と通信する1つ以上のハードウェアを有するハードウェアレイヤ310を含むことができる。いくつかの実施形態では、ハードウェアレイヤ310は、1つ以上の物理ディスク304、1つ以上の物理デバイス306、1つ以上の物理プロセッサ308、及び1つ以上のメモリ216を含むことができる。物理コンポーネント304、306、308、及び316は、例えば、上述したコンポーネントのいずれかを含むことができる。物理デバイス306は、例えば、ネットワークインターフェースカード、ビデオカード、キーボード、マウス、入力デバイス、モニタ、ディスプレイデバイス、スピーカ、光学ドライブ、記憶デバイス、ユニバーサルシリアルバス接続、プリンタ、スキャナ、ネットワーク要素(例えば、ルータ、ファイアウォール、ネットワークアドレス変換器、ロードバランサ、仮想プライベートネットワーク(VPN)ゲートウェイ、Dynamic Host Configuration Protocol(DHCP)ルータなど)、または仮想化サーバ301に接続され、また仮想化サーバ301と通信する任意のデバイスを含むことができる。ハードウェアレイヤ310内の物理メモリ316は、任意のタイプのメモリを含むことができる。物理メモリ316は、データを格納することができ、いくつかの実施形態では、1つ以上のプログラムまたは実行可能命令のセットを格納することができる。
図3は、ファームウェア312が仮想化サーバ301の物理メモリ316内に格納される実施形態を示す。物理メモリ316に格納されたプログラムまたは実行可能命令は、仮想化サーバ301の1つ以上のプロセッサ308によって実行され得る。
【0040】
仮想化サーバ301は、ハイパーバイザー302も含むことができる。いくつかの実施形態では、ハイパーバイザー302は、仮想化サーバ301上のプロセッサ308によって実行されるプログラムであってもよく、任意の数の仮想マシン332を作成及び管理する。ハイパーバイザー302は、仮想マシンモニタまたはプラットフォーム仮想化ソフトウェアと呼ぶことができる。いくつかの実施形態では、ハイパーバイザー302は、コンピューティングマシン上で実行する、仮想マシンを監視する実行可能命令及びハードウェアの任意の組み合わせとすることができる。ハイパーバイザー302は、仮想化サーバ301上で実行するオペレーティングシステム314内で実行するハイパーバイザーであるタイプ2ハイパーバイザーとすることができる。そのとき、仮想マシンはハイパーバイザーの上のレベルで実行する。いくつかの実施形態では、タイプ2ハイパーバイザーは、タイプ2ハイパーバイザーがユーザのオペレーティングシステムと対話するように、ユーザのオペレーティングシステムのコンテキスト内で実行する。他の実施形態では、仮想化環境内の1つ以上の仮想化サーバ201は、タイプ1ハイパーバイザー(図示せず)を代わりに含むことができる。タイプ1ハイパーバイザーは、ハードウェアレイヤ310内のハードウェア及びリソースに直接アクセスすることによって、仮想化サーバ301上で実行することができる。すなわち、タイプ2ハイパーバイザー302は、図示されるように、ホストオペレーティングシステム314を通ってシステムリソースにアクセスするが、タイプ1ハイパーバイザーは、ホストオペレーティングシステム314なしで全てのシステムリソースに直接アクセスすることができる。タイプ1ハイパーバイザーは、仮想化サーバ301の1つ以上の物理プロセッサ308上で直接実行することができ、物理メモリ316に格納されたプログラムデータを含むことができる。
【0041】
ハイパーバイザー302は、いくつかの実施形態では、オペレーティングシステム330、またはシステムリソースに直接アクセスする制御プログラム320をシミュレートする任意の方法で、仮想マシン332上で実行するオペレーティングシステム330または制御プログラム320に仮想リソースを提供することができる。システムリソースは、物理デバイス306、物理ディスク304、物理プロセッサ308、物理メモリ316、及び仮想化サーバ301のハードウェアレイヤ310に含まれる他のコンポーネントを含むことができるが、これらに限定されない。ハイパーバイザー302は、仮想ハードウェアをエミュレートし、物理ハードウェアをパーティションし、物理ハードウェアを仮想化し、及び/またはコンピューティング環境へのアクセスを提供する仮想マシンを実行するために使用することができる。さらに他の実施形態では、ハイパーバイザー302は、仮想化サーバ301上で実行する仮想マシン332のプロセッサスケジューリング及びメモリパーティショニングを制御する。ハイパーバイザー302は、VMWare,Inc.of Palo Alto,California,the XEN hypervisorによって製造されたもの、the open source Xen.org communityによって開発が監督されているオープンソース製品、すなわち、Microsoftによって提供されるHyperV、VirtualServer、またはvirtual PC hypervisors、などを含むことができる。いくつかの実施形態では、仮想化サーバ301は、ゲストオペレーティングシステムが実行可能な仮想マシンプラットフォームを作成するハイパーバイザー302を実行する。これらの実施形態では、仮想化サーバ301は、ホストサーバと呼ばれることもある。そのような仮想化サーバの一例は、Citrix Systems,Inc.of Fort Lauderdale,FL.によって提供されるXEN SERVERである。
【0042】
ハイパーバイザー302は、ゲストオペレーティングシステム330が実行する1つ以上の仮想マシン332B〜C(一般に332)を作成することができる。いくつかの実施形態では、ハイパーバイザー302は仮想マシンイメージをロードして、仮想マシン332を作成することができる。他の実施形態では、ハイパーバイザー302は、仮想マシン332内のゲストオペレーティングシステム330を実行することができる。さらに他の実施形態では、仮想マシン332は、ゲストオペレーティングシステム330を実行することができる。
【0043】
ハイパーバイザー302は、仮想マシン332を作成することに加えて、少なくとも1つの仮想マシン332の実行を制御することができる。他の実施形態では、ハイパーバイザー302は、仮想化サーバ301によって提供される少なくとも1つのハードウェアリソース(例えば、ハードウェアレイヤ310内で利用可能な任意のハードウェアリソース)の抽象化を少なくとも1つの仮想マシン332に提示することができる。他の実施形態では、ハイパーバイザー302は、仮想化サーバ301内で利用可能な物理プロセッサ308に仮想マシン332がアクセスする方法を制御することができる。物理プロセッサ308へのアクセスを制御することは、仮想マシン332がプロセッサ308へのアクセス権を有するべきか、及び物理プロセッサ機能が仮想マシン332にどのように提示されるかを決定することを含むことができる。
【0044】
図3に示すように、仮想化サーバ301は、1つ以上の仮想マシン332をホストまたは実行することができる。仮想マシン332は、プロセッサ308によって実行されるときに、仮想マシン332が物理コンピューティングデバイスのようにプログラム及びプロセスを実行できるように、物理コンピュータの動作をそっくり模倣する実行可能命令のセットである。
図3は、仮想化サーバ301が3つの仮想マシン332をホストする実施形態を示しているが、他の実施形態では、仮想化サーバ301は任意の数の仮想マシン332をホストすることができる。ハイパーバイザー302は、いくつかの実施形態では、各仮想マシン332に利用可能な物理ハードウェア、メモリ、プロセッサ及び他のシステムリソースの一意の仮想ビューをその仮想マシン332に提供する。いくつかの実施形態では、一意の仮想ビューは、1つ以上の仮想マシン許可、1つ以上の仮想マシン識別子へのポリシーエンジンの適用、仮想マシンにアクセスするユーザ、仮想マシン上で実行するアプリケーション、仮想マシンによってアクセスされるネットワーク、または任意の他の所望の基準に基づくことができる。例えば、ハイパーバイザー302は、1つ以上の安全でない仮想マシン332、及び1つ以上の安全な仮想マシン332を作成することができる。安全でない仮想マシン332は、仮想マシン332を保護することが許可され得るリソース、ハードウェア、メモリロケーション、及びプログラムにアクセスすることを妨げられ得る。他の実施形態では、ハイパーバイザー302は、各仮想マシン332に利用可能な物理ハードウェア、メモリ、プロセッサ及び他のシステムリソースの実質的に類似した仮想ビューを仮想マシン332に提供することができる。
【0045】
各仮想マシン332は、仮想ディスク326A〜C(一般に326)及び仮想プロセッサ328A〜C(一般に328)を含むことができる。仮想ディスク326は、いくつかの実施形態では、仮想化サーバ301の1つ以上の物理ディスク304、または仮想化サーバ301の1つ以上の物理ディスク304の一部分の仮想化されたビューである。物理ディスク304の仮想化されたビューは、ハイパーバイザー302によって生成され、提供され、管理され得る。いくつかの実施形態では、ハイパーバイザー302は、各仮想マシン332に物理ディスク304の一意のビューを提供する。したがって、これらの実施形態では、各仮想マシン332に含まれる特定の仮想ディスク326は、他の仮想ディスク326と比較した場合に一意であり得る。
【0046】
仮想プロセッサ328は、仮想化サーバ301の1つ以上の物理プロセッサ308の仮想化されたビューであり得る。いくつかの実施形態では、物理プロセッサ308の仮想化されたビューは、ハイパーバイザー302によって生成され、提供され、管理され得る。いくつかの実施形態では、仮想プロセッサ328は、少なくとも1つの物理プロセッサ308と同じ特性の実質的に全てを有する。他の実施形態では、仮想プロセッサ328は、仮想プロセッサ328の特性の少なくとも一部が対応する物理プロセッサ308の特性と異なるように、物理プロセッサ308の修正されたビューを提供する。
【0047】
〈デバイス管理サービス仮想化システム〉
図4は、本明細書で説明する1つ以上の例示的な態様による例示的なコンピューティングシステム400を示す。
図4に示すように、コンピューティングシステム400は、広域ネットワーク408(例えば、インターネット、イントラネット、及び/またはそれらの組み合わせ)を介して複数のクライアントデバイス404A〜C(一般に404)に接続されたリモートサーバ402を含むことができる。クライアントデバイス404は、例えばパーソナルコンピュータ、サーバ、シンクライアント、タブレット、スマートフォンなどの任意のタイプのコンピューティングデバイスであってよく、ネットワークノード103またはコンピューティングデバイス201の1つ以上のコンポーネントを含む。サービス管理対象デバイス406A〜C(一般に406)は、(例えば、USB−Cポートなどのユニバーサルシリアルバスポートを通る)有線または(例えば、ブルートゥース(登録商標)、Wi−Fiなどの)無線接続を介してクライアントデバイス404と動作可能に接続されてもよい。サービス管理対象デバイス406は、例えば、スマートカード406A、USBベースのデバイス406B、(例えば、ゲームコントローラ、遠隔制御などの)コントローラ406Cなどを含むことができる。クライアントデバイス404がデバイス管理サービスによって管理され、制御される場合、クライアントデバイス404Dは、サービス管理対象デバイスとみなすことができる。一例として、タブレットまたはプリンタは、デバイスの動作を管理する、対応するサービスを有することができる。
【0048】
リモートサーバ402は、仮想アプリケーション配信解決策をクライアントデバイス404に提供することができる。仮想アプリケーション配信解決策は、アプリケーション仮想化を提供し、その結果、クライアントデバイス404のユーザは、クライアントデバイス404から受信した入力を使用してリモートサーバ402上で完全に実行される1つ以上のアプリケーションに遠隔からアクセスし、対話することができる。そのような仮想アプリケーション配信解決策では、リモートサーバ402は、複数のセッション及び各セッション内の複数のアプリケーションで使用するための単一のオペレーティングシステムのみを実行することができる。すなわち、リモートサーバ402は、各セッションのための仮想化されたオペレーティングシステムを作成することは費用がかかり、膨大なディスクスペースを必要とするため、サーバのオペレーティングシステムの1つ以上のインスタンスを仮想化しないことがある。いくつかの実施形態では、アプリケーションが、実際に、リモートサーバ402のオペレーティングシステムに対するプロキシとして動作する、アプリケーション仮想化レイヤ(図示せず)とインターフェース接続しているときに、アプリケーションは、リモートサーバ402にインストールされたオペレーティングシステムと直接インターフェース接続していると考えられる。いくつかの実施形態では、コンピューティングシステム400は、ハイパーバイザーを含まなくてもよい。
【0049】
リモートサーバ402はまた、各セッションによってアクセス可能なグローバルレジストリデータベース410を含み、及び/またはグローバルレジストリデータベース410と通信可能に結合されてもよい。デバイス管理サービスは、サービス管理対象デバイス406が単一のセッション環境で動作していると想定して、グローバルレジストリデータベース410に情報を書き込み、また、グローバルレジストリデータベース410から情報を読み出すように設計されている。
【0050】
1つ以上の構成では、リモートサーバ402は、いくつかのタスクを実施するセッションマネージャを含むことができる。セッションマネージャは、サードパーティのベンダまたはパートナーが、登録ソフトウェア開発キット(SDK)を使用して、セッションマネージャ及び/またはアプリケーション仮想化サービス(例えば、Citrix Systems,Inc.によって開発されたXenApp)に、それらのデバイス管理サービスを登録することを許可するセッションインターフェースを提供することができる。サードパーティのベンダまたはパートナーは、セッションマネージャによる使用のために仮想セッションホスト(VSH)サービスデータベースにデバイス管理サービスを登録することができる。登録の間に、マルチセッション環境でのデバイス管理サービスの使用に関するポリシーが作成されることがある。1つのポリシーは、インスタンスの起動時にセッションマネージャがそのセッションで使用するためのデバイス管理サービスの仮想化されたインスタンスを生成して、各セッションがデバイス管理サービスの独自の仮想化されたインスタンスを有するようにすることを含むことができる。さらに、別のポリシーは、リソースをいつ仮想化するかを含むことができる。さらに別のポリシーは、指定されたコマンド(例えば、グローバルレジストリデータベース410への書き込みコマンド)をいつ、及び/またはどこにルート変更するかを含むことができる。さらに別のポリシーは、それらのサービス管理対象デバイス406及び/またはそれらのデバイス管理サービスによる使用のために割り当てられる、リモートサーバ402の1つ以上のメモリロケーション(例えばファイル)、またはリモートサーバ402に通信可能に結合されるデータベースを割り当てることを含むことができる。セッションの起動の間に、セッションマネージャは、レジストリデータベース410の固有の1つ以上のメモリロケーションに基づいて、作成される固有のセッションで使用するメモリロケーションを割り当て、サービス管理対象デバイス406及び/またはそれらのデバイス管理サービスからのコマンドがそこにルーティングされ得る。さらに、セッションマネージャは、レジストリデータベース410内の仮想リソース及び/またはメモリロケーションの、セッションに固有のメモリロケーション(例えば、
図6で後述するセッション固有のデータベース606)へのマッピングを作成することができる。登録SDKは、デバイス管理サービスのアクセス許可及びレベルを含む様々なオプションを提供することができる。デバイス管理サービスは、様々なイベント(例えば、起動、シャットダウン、セッションイベントなど)が通知されるように、標準インターフェースを公開してもよい。SDKは、アドミニストレータがデバイス管理サービスの各セッション固有のインスタンスの動作を監視及び制御できるようにすることもできる。
【0051】
サービス管理対象デバイス406は、オペレーティングシステムと対話するためのインターフェース及び/または命令を提供するデバイス管理サービスによって管理することができる。デバイス管理サービスは、オペレーティングシステムと共に実行されているアプリケーションが、サービス管理対象デバイス406のハードウェア機能にアクセスすることを可能にする。例えば、デバイス管理サービスは、特定のサービス管理対象デバイス406と共に使用するためのデバイスドライバの形態であってもよい。オペレーティングシステムまたはアプリケーションが、コマンドを発行することによって特定の機能を実施するように特定のサービス管理対象デバイス406に指示すると、サービス管理対象デバイス406の対応するデバイス管理サービスは、コマンドをインターセプトし、そのコマンドを特定のサービス管理対象デバイス406によって理解可能な形式(例えばフォーマット)に変換して、変換されたコマンドを実行のために特定のサービス管理対象デバイス406に送信する。同様に、アプリケーションまたはオペレーティングシステムによる受信向けの特定のサービス管理対象デバイス406の出力は、アプリケーションまたはオペレーティングシステムによって受信される前に、インターセプトされ、アプリケーションによって理解可能な形式に変換されてもよい。したがって、デバイス管理サービスは、アプリケーションが、サービス管理対象デバイス406の固有のハードウェアまたはソフトウェアコマンドポリシーの正確な知識を有することなく、特定のサービス管理対象デバイス406と通信することを可能にする。
【0052】
ユーザは、リモートサーバ402によって提供される仮想化されたアプリケーションと共に使用するために、サービス管理対象デバイス406をクライアントデバイス404と接続することができる。一例として、ユーザは、スマートカードリーダを介してスマートカード406Aをクライアントデバイス404Aに接続して、リモートサーバ402によって提供される仮想されたアプリケーションと共に使用することができる。サービス(例えば、特定のタイプのスマートカードまたはスマートカードリーダのためのドライバ)は、スマートカード406Aまたはそのスマートカードリーダが単一セッションまたは単一ユーザ環境で利用されることを前提として設計されており、このことは多くの問題を引き起こす可能性がある。
【0053】
1つの問題は、1つのセッション内のアプリケーションの1つの仮想インスタンスが、異なるセッション内のアプリケーションの別の仮想インスタンスによって格納されたデータを上書きするときに発生することがある。一例として、スマートカード406Aのデバイス管理サービス(例えば、デバイスドライバ)は、グローバルレジストリデータベース410、クライアントデバイス404、及び/またはスマートカード406Aの特定のメモリロケーション(例えば、特定のファイル)に情報を書き込む(または、から情報を読み出す)ようにアプリケーションのインスタンスに指示することができる。しかしながら、デバイス管理サービスは、アプリケーションの各インスタンスが同じグローバルレジストリデータベース410に対してそのようなコマンド(例えば、書き込みコマンド、読み出しコマンドなど)を初期化することができる、異なるセッションに対応する同じアプリケーションの複数のインスタンスを考慮しないかもしれない。その結果、デバイス管理サービスは、第1のセッションにおけるアプリケーションの1つのインスタンスに、グローバルレジストリデータベース410の特定のメモリロケーションに情報を書き込むよう指示し、かつ第2の(例えば、異なる)セッションにおけるアプリケーションの別のインスタンスに、グローバルレジストリデータベース410の同じメモリロケーションに情報を書き込むように指示することもでき、その結果、後続の書き込み命令によって上書きされ、情報が失われる。
【0054】
さらに、1つのセッションにおけるアプリケーションの1つのインスタンスによるデータの不適切な上書きは、異なるセッションにおけるアプリケーションの別のインスタンスによる不正確なデータ読み出し結果となり得る。上記の例に続いて、第2のセッションにおけるアプリケーションのインスタンスがグローバルレジストリデータベース410の特定のメモリロケーションに情報を書き込み、それによって、第1のセッションにおけるアプリケーションのインスタンスによってグローバルレジストリデータベース410の特定のメモリロケーションに以前に書き込まれた情報を不適切に上書きした後で、第1のセッションにおけるアプリケーションのインスタンスが、グローバルレジストリデータベース410の特定のメモリロケーションに格納された情報を読み出すことがあるが、それは、不適切な上書きの結果として第1のセッションにおけるアプリケーションのインスタンスに関して不正確である。この問題は、第1のセッションにおけるアプリケーションのインスタンスが、グローバルレジストリデータベース410のメモリロケーションから読み出された情報は、第1のセッションにおけるアプリケーションのインスタンスに関して不正確であることを認識しない可能性があることにより悪化する。
【0055】
しかし、ここで簡単に説明し、以下にさらに詳細に説明するように、リモートサーバ402は、デバイス管理サービスの複数の仮想化されたインスタンス(例えば、スマートカード406A用のデバイスドライバ)を作成し、リダイレクションレイヤを利用して、書き込み命令、読み出し命令、または他の命令を適切な宛先にルーティングして、マルチセッション環境における各セッション間の境界を維持する。したがって、上記の例に従えば、情報は、異なるセッションで実行されているアプリケーションによって上書きされない可能性があり、上記の問題を救済する。
【0056】
上記の問題をもたらすマルチセッション環境の典型的なセットアップにおいて、サービス管理対象デバイスのためのデバイス管理サービスは、システムサービス(例えば、セッション0)と同じセッションで実行された。さらに、マルチセッション環境がセッション境界を首尾よく施行した場合、デバイス管理サービスは異なるセッションにおいてサービス管理対象デバイスにアクセスできないことがある。しかしながら、
図5に示すマルチセッション環境500の設定によって、これらの問題を救済する。
【0057】
図5は、本明細書で説明する1つ以上の例示的な態様によるマルチセッション環境500の例示的なセッションビューを示す。マルチセッション環境500は、複数の異なるセッション(例えば、セッション0、セッション1〜セッションN)を含むことができる。
図5に示すように、各セッションは、仮想化されたデバイス管理サービスと、そのようなサービスによって管理される対応するデバイスとの間の関係を表すことができる。1つのセッション(例えば、セッション0)は、リモートサーバ402の単一のオペレーティングシステムを含み、アドミニストレータとして機能するシステムサービスに固有のものであってもよい。オペレーティングシステムのような仮想化されたシステムサービスのインスタンスは生成されず、ハイパーバイザーが存在しない可能性がある。セッション0はシステムサービスを含むことができるが、サービス管理対象デバイス406を管理するためのデバイス管理サービス(またはその仮想化されたインスタンス)を含まない可能性がある。
【0058】
特定のセッションで使用される各サービス管理対象デバイス406について、その管理サービス(例えば、そのデバイスドライバ)の仮想化されたセッションインスタンス504及び対応するリダイレクト/仮想化レイヤ506は、セッション内のサービス管理対象デバイス406のデバイスタイプを含む。結果として、セッション(例えば、セッション1〜セッションN)は、特定のデバイスタイプを管理するためにそのセッションと共に使用するためのデバイス管理サービスのセッションインスタンス(例えば、デバイスドライバの仮想化されたインスタンス)504をそれぞれ含むことができる。さらに、セッションマネージャは、インスタンスごとにリダイレクト/仮想化レイヤ506を生成して、デバイスタイプを管理する際にデバイス管理サービスのインスタンス506を支援することができる。例えば、セッション1は、デバイス管理サービスAのセッションインスタンス504Aと、デバイスタイプA(例えば、スマートカード406Aのスマートカードタイプ)を管理するリダイレクション仮想レイヤ506Aとを含むことができる。セッション1は、デバイス管理サービスBのセッションインスタンス504Bと、デバイスタイプB(例えば、USBベースのデバイス406BのためのUSBデバイスタイプ)を管理するリダイレクション仮想レイヤ506Bとを含むこともできる。同様に、セッションNは、デバイス管理サービスAの別のセッションインスタンス504Aと、デバイスタイプA(例えば、スマートカード406Aのスマートカードタイプ)を管理するリダイレクション仮想レイヤ506Aとを含むことができる。セッションNは、デバイス管理サービスBのセッションインスタンス504Bと、デバイスタイプB(例えば、USBベースのデバイス406BのためのUSBデバイスタイプ)を管理するためのリダイレクション仮想レイヤ506Bとを含むこともできる。
【0059】
デバイス管理サービスの2つのインスタンス504及びリダイレクト/仮想化レイヤ506が、
図5の2つのデバイスタイプA及びBに対して示されているが、2つより多くの、または2つ未満のデバイス管理サービス504及びリダイレクト/仮想化レイヤ506が利用されてもよく、これはそのセッションで利用される異なるデバイスタイプの数に対応してもよい。
【0060】
図6は、本明細書の1つ以上の例示的な態様による、特定のサービス管理対象デバイスのセッション1の一部の分解ブロック図を示す。新しいセッションの作成の間に、セッションマネージャは、起動プロセスを使用して、様々なデバイス管理サービスをホストする仮想サービスホストプロセスコンテナを作成することができる。起動プロセスの間に、セッションマネージャは、ウィンドウ及びグラフィックスサブシステム及び認証サブシステム(例えば、Winlogon、LogonUI)のためにクライアント/サーバランタイムサブシステム(CRSS)とインターフェース接続する、初期化及び通知インターフェース602を作成することができる。さらに、初期化及び通知インターフェース602は、デバイス管理サービスAのセッションインスタンス504Aのための初期化及びシャットダウンインターフェースを提供することができる。その結果、デバイス管理サービスAのセッションインスタンス504Aは、起動プロセスが呼び出されると、デバイス固有の監視を開始することができる。デバイス管理サービスAのセッションインスタンス504Aは、それに応じてシャットダウン及び再開通知を処理することもできる。さらに、初期化及び通知インタ−フェース602は、デバイス管理サービスAのセッションインスタンス504Aがホストセッション固有の通知(例えば、ロック、アンロック、ログオン、事前ログオフなど)を受信することを可能にすることができる。さらに、起動プロセスの間に、セッションマネージャは、予め登録されたサードパーティサービスに関連する任意の他の起動プロセスを作成し、仮想サービスホストプロセスでプロセスをロードすることもできる。例えば、セッションマネージャは、リモートサーバ402によって作成された各セッションにおいて予め構成されたデバイス管理サービスをホストする新しいプロセスを作成することができる。
【0061】
1つ以上の仮想化されたユーザアプリケーション604がサービス管理対象デバイス406の機能にアクセスしたい場合。リダイレクション仮想レイヤ608は、アプリケーションからであってサービス管理対象デバイス406向けの通信(例えば、コマンドまたは命令)を、デバイス管理サービスAのセッションインスタンス504Aにルート変更することができ、次に、デバイス管理サービスAは、その通信をサービス管理対象デバイス406によって理解可能な形式に再フォーマット及び/または変換することができる。次いで、デバイス管理サービスAのセッションインスタンス504Aは、変換された通信をサービス管理対象デバイス406に送信することができる。それに応答して、サービス管理対象デバイス406は、変換された通信によって指示された機能を実施することができる。一例として、サービス管理対象デバイス406がスマートカード406Aである場合、スマートカード406Aは、ユーザの認証証明書を取り出すか、または他の何らかの機能を実施することができる。適切な場合、サービス管理対象デバイス406は、アプリケーションに応答性のある通信を送信することができる。しかしながら、リダイレクション仮想レイヤ608は、デバイス管理サービスAのセッションインスタンス504Aに通信をルート変更してもよく、次に、デバイス管理サービスAは、応答通信をアプリケーションによって理解可能なフォーマットに再フォーマット及び/または変換することができる。
【0062】
リダイレクション仮想レイヤ506Aは、デバイス管理サービスAのセッションインスタンス504Aに送受信される各通信をインターセプトして検査することができる。通信が所定の基準を満たす場合、リダイレクション仮想レイヤはアクションを実施することができる(例えば、通信はルート変更されてもよく、及び/または特定のリソースが仮想化されてもよい)。所定の基準は、サードパーティまたは別のエンティティによるデバイス管理サービスの登録の間に設定されてもよい。
【0063】
場合によっては、所定の基準は、通信がグローバルオブジェクト/リソース(例えば、セッションに固有ではないオブジェクトまたはリソース)への参照を含むかであり得る。このような場合、リダイレクション仮想レイヤ506Aは、グローバルリソースがセッションに固有であるグローバルリソースの仮想インスタンスにアクセスするように、セッションに関連する通信をリダイレクトすることができる。例えば、リダイレクション仮想レイヤ506Aは、セッションで使用するグローバルリソースの仮想インスタンスがリダイレクションデータベース610及び/またはセッション固有のデータベース606に存在するかを判定することができる。存在しない場合、リダイレクション仮想レイヤ506Aは、セッションで使用するためにグローバルリソースの仮想インスタンスを生成し、グローバルリソースのグローバルインスタンスの仮想インスタンスをリダイレクションデータベース610及び/またはセッション固有のデータベース606の1つ以上に格納し、かつグローバルリソースとグローバルリソースの仮想インスタンスとの対応を含むように、リダイレクションデータベース610に格納されたマッピングを更新する。リダイレクション仮想レイヤ506Aは、グローバルリソース自体にアクセスするのではなく、セッションに固有であるグローバルリソースの仮想インスタンスにアクセスするように通信を指示してもよい。そうでなければ、リダイレクション仮想レイヤ506Aが、リダイレクションデータベース610に格納されたマッピングを調べることによって、セッションと共に使用するグローバルリソースの仮想インスタンスが存在すると判定した場合、リダイレクション仮想レイヤ506Aは、マッピングを使用して、グローバルリソース自体にアクセスするのではなく、セッションに固有であるグローバルリソースの仮想インスタンスにアクセスするように通信を指示することができる。
【0064】
本明細書で説明する多くの例では、所定の基準は、特定のファイルまたはメモリロケーションに対する書き込みまたは読み出しコマンドであってもよい。一例として、通信が、サービス管理対象デバイス406に割り当てられたグローバルレジストリデータベース410内のリソース(例えば、メモリロケーション)、及び/またはグローバルレジストリデータベース410内のグローバルデバイス固有情報に対する、書き込みコマンドまたは読み出しコマンドである場合、リダイレクション仮想レイヤ506Aはこれらのコマンドをセッション固有のデータベース606にリダイレクトすることができ、そのようなコマンドは、グローバルレジストリデータベース410に送信されない可能性がある。各セッション(例えば、セッション1〜セッションN)は、それ自体のセッション固有のデータベース606に関連付けられてもよく、レジストリデータベースリダイレクションで使用するためのリモートサーバ402の論理メモリパーティションであってもよい。
【0065】
リダイレクション仮想レイヤ506Aは、ルーティングポリシー(例えば、レジストリデータベース410内のメモリロケーションの、セッション固有のデータベース606内のメモリロケーションへのマッピング)を格納するリダイレクションデータベース610を調べることができる。マッピングを使用して、リダイレクション仮想レイヤ506A及び/またはセッションマネージャは、書き込みコマンドまたは読み出しコマンドからグローバルレジストリデータベース410向けのメモリロケーションを取り出し、グローバルレジストリデータベース410のそのメモリロケーションに対応する、セッション固有のデータベース606のメモリロケーションを決定することができる。次に、リダイレクション仮想レイヤ506Aは、書き込みコマンドまたは読み出しコマンドが、グローバルレジストリデータベース410の当初指定されたメモリロケーションからではなく、セッション固有のデータベース606の対応するメモリロケーションに情報を書き込みまたは読み出すように、書き込みコマンドまたは読み出しコマンドをルート変更することができる。一例として、書き込みコマンドの場合、グローバルレジストリデータベース410のファイルAに情報を書き込む代わりに、その情報は、サービス管理対象デバイス406と共に使用するために割り当てられたセッション固有のデータベース606のファイルAに書き込まれてもよい。別の例として、読み出しコマンドの場合、グローバルレジストリデータベース410内のファイルAから情報を読み出す代わりに、セッション固有のデータベース606内のファイルAから情報を読み出すことができる。
【0066】
(各セッションによってアクセス可能な)グローバルレジストリデータベース410から(対応するセッションのみによってアクセス可能な)セッション固有のデータベース606への書き込みコマンド及び読み出しコマンドのリダイレクションの結果として、特定のセッションで作動しているサービスの1つのインスタンスは、両方のセッションが同じタイプのサービス管理対象デバイス406を使用している場合、別のセッションで作動中のサービスの別のインスタンスのリソースを変更できない場合がある。リダイレクションを利用することにより、グローバルレジストリデータベース410からの情報の不適切な読み出しをもたらすサービスの1つのインスタンスによるグローバルレジストリデータベース410への不適切な上書きに関する上述の例は、回避することができる。
【0067】
さらに、1つ以上の構成では、リダイレクション仮想レイヤ506Aは、グローバルレジストリデータベース410内の意図されたメモリロケーションが、セッション固有のデータベース606内のマッピングに基づく対応するメモリロケーションを有しないことを判定することができる。固有のデータベース606に対応するメモリロケーションがなく、通信がグローバル/共有システムリソース(例えば、グローバルレジストリデータベース410のメモリロケーション)に対するものである場合、リダイレクション仮想レイヤ506Aは、リソースを仮想化し、かつ/またはセッション固有のデータベース606内のメモリをグローバルレジストリデータベース410内の意図されたメモリロケーションに対応するように割り当てるための1つ以上のポリシーを介して構成することができ、セッション固有のデータベース606内の新しく割り当てられたメモリロケーションに通信をリダイレクトし、かつ新しい対応を反映するようにマッピングを更新する。
【0068】
通信が読み出しコマンドであり、かつセッション固有のデータベース606が、その読み出しコマンドがリダイレクション仮想レイヤ506Aによってリダイレクトされたメモリロケーションに格納された情報を有していない場合、リダイレクションレイヤ506Aは、読み出しコマンドをグローバルレジストリデータベース410(例えば、読み出しコマンドで意図されたグローバルレジストリデータベース410の元のメモリロケーション)に再びリダイレクトすることができる。そのような場合、セッションマネージャは、デバイス管理サービス及びアプリケーションによる後の参照のために、読み出しコマンドのグローバルレジストリデータベース410のメモリロケーションをセッション固有のデータベース606に格納することができる。追加的、または代替的に、いくつかの実施形態では、グローバルレジストリデータベース410のメモリロケーションから読み出すために読み出しコマンドをルーティングするのではなく、セッションマネージャは、起動プロセスの間に、セッション固有のデータベース606の1つ以上の対応するメモリロケーションにデフォルト値を設定することができる。1つ以上の構成では、セッション固有のデータベース606の1つ以上のメモリロケーションのデフォルト値は、ユーザ、管理者、及び/またはデバイス管理サービスAのセッションインスタンス504Aによって事前設定されてもよい。1つ以上の追加のまたは代替の構成では、デフォルト値は、グローバルレジストリデータベース410の対応するメモリロケーションに現在格納されている値であってもよい。その結果、セッション固有のデータベース606の対応するメモリロケーションに格納された値は、サービス管理対象デバイス406またはそのデバイス管理サービスAと共に使用するために割り当てられたグローバルレジストリデータベース410のメモリロケーションに格納された値と一致する。
【0069】
いくつかの実施形態では、デバイス管理サービスの登録の間に、サードパーティ及び/または別のエンティティは、リダイレクションデータベース610に格納されたマッピング内のどのグローバルリソースまたはメモリロケーションに、セッション固有の仮想化されたリソース及び/またはセッション固有のメモリロケーションを割り当てるべきかの指示を生成することができる。このような実施形態では、起動プロセスの間(例えば、セッション作成の間)に、セッションマネージャはリダイレクションデータベース610を調べて、どのリソース及び/またはグローバルメモリロケーション(例えば、レジストリデータベース410のメモリロケーション)が、特定のセッションで使用するためのサービス管理デバイス406またはそのデバイス管理サービスAに割り当てられた、対応する仮想化されたリソース及び対応するメモリロケーションを有するべきかを判定する。
【0070】
リダイレクション仮想レイヤ506Aは、オブジェクト名変換レイヤとしての役割を果たすこともできる。1つ以上の代替構成では、オブジェクト名変換レイヤは、リダイレクト仮想レイタ506Aとは別個のレイヤであってもよい。オブジェクト名変換レイヤは、セッション固有のオブジェクト名解決を提供するために、名前変換ポリシーを格納することができるオブジェクト名変換データベース612(本明細書では変換データベース612とも呼ばれる)を使用することができる。
【0071】
デバイス管理サービスAのようなデバイス管理サービスは単一のセッション環境用に設計されているので、そのようなサービスはグローバルオブジェクト名(例えば、セッション1のような特定のセッションに固有でないオブジェクト名)を使用することができる。その結果、マルチセッション環境にデバイス管理サービスを適合させるために、グローバルオブジェクト名をセッション固有のオブジェクト名に変更することができる。グローバルオブジェクト名のセッション固有のオブジェクト名へのマッピングは、起動プロセスの間に(例えば、セッション作成の間に)割り当てられ、かつ設定されるオブジェクト名変換データベース612に格納されてもよい。場合によっては、デバイス管理サービスの登録の間に、デバイス管理のためのセッション固有のオブジェクト名のタクソノミーを指定することができる。
【0072】
図6に示すセッション1を参照すると、リダイレクション仮想レイヤ506Aは、デバイス管理サービスAのセッションインスタンス504Aとの通信を検査して、通信がグローバルオブジェクト名(例えば、特定のセッションに固有でないオブジェクト名)を含むかを判定することができる。リダイレクト仮想レイヤ506Aは、オブジェクト名変換データベース612に格納されたグローバルオブジェクト名のリストを調べることによって、通信がグローバルオブジェクト名を含むかを判定することができる。そうである場合、リダイレクション仮想レイヤ506Aは、オブジェクト名変換データベース612内の各グローバルオブジェクト名に対するセッション固有オブジェクト名を検索し、通信において、グローバルオブジェクト名をセッション固有オブジェクト名で置き換えることができる。
【0073】
同様に、リダイレクト仮想レイヤ608は、ユーザアプリケーション604への、及びユーザアプリケーション604からの通信を検査して、通信がグローバルオブジェクト名(例えば、セッション1のようなセッションに固有でないオブジェクト名)を含むかを判定し、かつ通信において、グローバルオブジェクト名をオブジェクトのセッションを示すセッション固有のオブジェクト名で置き換えることができる。一例として、グローバルオブジェクト名「Foo」は、セッション固有のオブジェクト名「Foo.Session1」に置き換えて、このオブジェクトがセッション1に固有であることを示すことができる。システムのグローバルオブジェクト名をセッション固有のオブジェクト名に名前変更することにより、デバイス管理サービスAのセッションインスタンス504Aは、セッション固有のオブジェクト名を使用して通信し、セッション境界が維持され、及び/または他のセッションと交差することはない。サードパーティベンダまたはパートナーは、デバイス管理用のサービスが、ワークステーション及びマルチセッションプラットフォームの両方で、何ら変更されることなく可能であるように、セッションで使用するセッション固有の命名規則を指定することができる。結果として、サードパーティのベンダ及びパートナーは、統一されたサービスモデルに注力することができ、ワークステーション及びマルチセッションプラットフォームのデバイス管理サービスの変更に多くの労力と時間を費やすことがない。
【0074】
いくつかの実施形態では、リダイレクションデータベース610及び/またはリダイレクションレイヤ608は、グローバルオブジェクト名をセッション固有のオブジェクト名に名前変更することによって、ファイルの通信をリダイレクトすることができる。
【0075】
いくつかの実施形態では、そして
図6に示すように、セッション(例えば、セッション1)は、デバイス管理サービスAのセッションインスタンス504aに関連付けられ、サービス管理対象デバイス406と通信するデバイスドライバ614を含むことができる。デバイスドライバ614は、リモートサーバ402及び/またはクライアントデバイス404のカーネルスペースに常駐することができる。場合によっては、デバイスドライバ614は、リモートサーバ402上で実行されるオペレーティングシステムの一部であってもよい。他の例では、デバイスドライバ614は、リモートサーバ402上で実行されるオペレーティングシステムから(例えば、一部ではなく)独立していてもよく、かつサードパーティベンダによって供給されてもよい。このような場合、デバイス管理サービスAのセッションインスタンス504aはユーザモードで実行され、デバイス機能を実施する実際のドライバ(例えば、デバイスドライバ614)はリモートサーバ402のカーネル空間内で実行される。
【0076】
図6に関連する上記の説明は、1つのサービス管理対象デバイス及びそれに対応するデバイス管理サービスに関するが、セッションは、第2のサービス管理対象デバイス及びそれに対応するデバイス管理サービスを含むことができる。セッションは、第2のサービス管理対象デバイス及びそれに対応するデバイス管理サービスに関して同様の方法で動作することができる。さらに、異なるユーザに対応する異なるセッションは、1つ以上のサービス管理対象デバイス及びそれらの対応するデバイス管理サービスを含むことができ、
図6に関して上述したのと同様の方法で動作することができる
図7は、本明細書で説明する1つ以上の例示的な態様による、仮想化されたデバイス管理サービスのセッション開始及びロードの例示的フローを示す。1つ以上の実施形態では、
図7の各ステップ及び/またはその1つ以上のステップは、1つ以上のコンピューティングデバイスによって実施されてもよい。他の実施形態では、
図7に示す方法及び/またはその1つ以上のステップは、非一時的なコンピュータ可読メモリのようなコンピュータ可読媒体に格納されるコンピュータ実行可能命令に具体化することができる。いくつかの例では、
図7の1つ以上のステップは、異なる順序で実施されてもよい。いくつかの例では、
図7の1つ以上のステップは、省略されてもよく、及び/または実施されなくてもよい。
【0077】
この方法は、リモートサーバ402が、仮想化されたマルチセッション環境において、スタートアッププロセスを介してセッションを初期化及び/または作成することができる、ステップ702から開始する。一例として、クライアントデバイス404Aのユーザは、リモートサーバ402上で実行されるアプリケーションに遠隔からアクセスすることを望む場合がある。そのユーザは、ポータルにログインして、リモートサーバ402によって提供される仮想化されたアプリケーションサービスにアクセスすることができる。リモートサーバ402は、ユーザの認証証明書の受信に応答してユーザを認証し、ユーザが認証された場合、リモートサーバ402によって管理されるマルチセッション環境においてそのユーザのセッションを初期化する。ユーザの認証証明書が認証されない場合、リモートサーバ402は、ユーザがクライアントデバイス404Aに認証されていないことを示すメッセージをユーザに表示するためにクライアントデバイス404Aに送信することができる。
【0078】
ユーザが認証されている場合、ステップ704で、リモートサーバ402は、ユーザのクライアントデバイスに接続されたサービス管理対象デバイスを識別し、各対応するデバイス管理サービスが事前に構成(例えば、このセッションを作成する前に、登録及び/またはセットアップ)されているかを判定する。サードパーティエンティティは、マルチセッション環境で使用するためにデバイス管理サービスを登録及び/または設定することができる。例えば、デバイス管理サービスの構成の間に、後でリダイレクション仮想レイヤによって使用するために、1つ以上のルーティングポリシー(例えば、メモリロケーション、ファイル、データベースなどのマッピング)、及びファイルまたはオブジェクト名変換ポリシーを決定する(例えば、サードパーティによって選択する)ことができる。デバイス管理サービスが事前に設定されていない場合、リモートサーバ402は、セッション固有のデータベースに通信(例えば、書き込みコマンド、読み出しコマンドなど)を適切にリダイレクトすることができず、かつ/またはグローバルオブジェクト名をセッション固有のオブジェクト名に変換し、結果として、上記で説明した上書き、及び不正確な読み読み出しの問題をもたらすことはない。デバイス管理サービスの仮想化されたインスタンス、ルーティングポリシー、及び/または名前変更ポリシーのうちの1つ以上の作成を許可するように事前に構成されていないユーザのクライアントデバイスに接続されたサービス管理対象デバイスに関連する各デバイス管理サービスについては、リモートサーバ402は、ステップ710に進み、他のセッションプロセス(例えば、ユーザのセッションをセットアップするための他のプロセス)を開始する。さらに、ユーザへの表示のために、リモートサーバ402からユーザのクライアントデバイス4064に警告メッセージを送信することができる。警告メッセージは、ユーザのクライアントデバイス404に接続されたサービス管理対象デバイス406が正しく機能しない可能性があり、かつ不正確な情報を表示する可能性があることを示すことができる。さらに、リモートサーバ402は、登録されていない、及び/または未構成のデバイス管理サービスからのグローバルレジストリデータベース410への書き込みコマンドを防止して、グローバルレジストリデータベース410に格納された情報がマルチセッション環境の他のセッションに関して正確なままであることを確実にする。
【0079】
デバイス管理サービスの仮想化されたインスタンス、ルーティングポリシー、及び/または名前変更ポリシーの1つ以上の作成を可能にするように事前に構成された、ユーザのクライアントデバイスに接続されたサービス管理対象デバイスに関連する各デバイス管理サービスについては、リモートサーバ402は、ステップ706で、デバイス管理サービスホストを初期化し、1つ以上の事前に構成されたデバイス管理サービスの仮想化されたセッションインスタンスをロードする。例えば、リモートサーバ402は、セッション1において、デバイス管理サービスAのセッションインスタンス504A及びデバイス管理サービスBのセッションインスタンス504Bを作成することができる。デバイス管理サービスの仮想化されたセッションインスタンスは、デバイス管理サービスのすべての機能を含むことができる。
【0080】
ステップ708で、リモートサーバ402は、ステップ706で作成されたデバイス管理サービスの各セッションインスタンスのリダイレクション仮想レイヤ(例えば、リダイレクション仮想レイヤ506、608)を構築することができる。1つ以上の構成では、デバイス管理サービスの登録及び/または構成の間に、リモートサーバ402は、ルーティングポリシー及び名前変換ポリシーを決定し、及び/またはデバイス管理サービスまたはその関連するサードパーティエンティティから受け取ることができる。次に、リモートサーバ402は、そのようなポリシーを使用して、リダイレクション仮想レイヤを構成することができる。さらに、リモートサーバ402は、まだ生成されていない場合には、セッション固有のデータベース606、リダイレクションデータベース610及び/またはオブジェクト名変換データベース612を生成してもよい。
【0081】
ステップ710において、リモートサーバ402は、マルチセッション環境においてユーザのセッションを作成するための他のセッションプロセスを初期化することができる。例えば、リモートサーバ402は、ユーザのクライアントデバイスによる使用のためにユーザのアプリケーションの仮想化されたインスタンスを作成することができる。
【0082】
図8は、本明細書で説明する1つ以上の例示的な態様による、アプリケーションを起動し、アプリケーションをサービス管理対象デバイスで使用する例示的なフローを示す。1つ以上の実施形態では、
図8の各ステップ及び/またはその1つ以上のステップは、1つ以上のコンピューティングデバイスによって実施されてもよい。他の実施形態では、
図8に示す方法及び/またはその1つ以上のステップは、非一時的なコンピュータ可読メモリのようなコンピュータ可読媒体に格納されたコンピュータ実行可能命令で具体化することができる。いくつかの例では、
図8の1つ以上のステップは、異なる順序で実施されてもよい。いくつかの例では、
図8の1つ以上のステップは、省略されてもよく、及び/または実施されなくてもよい。
【0083】
本フローは、ステップ802で開始し、リモートサーバ402は、マルチセッション環境のセッションにおいてアプリケーションの仮想化されたインスタンスを起動することができる。例えば、リモートサーバ402は、1つのセッションで使用するためのアプリケーションの仮想化されたセッション固有のインスタンスを作成することができる。このインスタンスは、アプリケーションの全ての機能を含むことができ、ユーザのクライアントデバイス404によって提供される入力を使用してリモートサーバ402によって実行され得る。出力は、ユーザへの表示のためにクライアントデバイス404に送信されてもよい。
【0084】
ステップ804において、リモートサーバ402は、アプリケーションの仮想化されたアプリケーションインスタンスのうちの1つ以上(例えば、各々)と、デバイス管理サービスの仮想化されたセッションインスタンスの1つ以上(例えば、各々)との間にオープンな通信チャネルがあるかを判定することができる。例えば、通信が、デバイス管理サービスの仮想化されたセッションインスタンスのうちの少なくとも1つと、同じセッション内の仮想化されたアプリケーションインスタンスのうちの少なくとも1つの間で送信される場合、オープンな通信チャネルが存在し得る。オープンな通信チャネルが存在しない場合、プロセスは、以下に詳細に説明するステップ808に進むことができる。そうではなく、オープン通信チャネルが存在する(例えば、デバイス管理サービスの仮想化されたセッションインスタンスと仮想化アプリケーションインスタンスとの間で通信が送信されている)場合、リダイレクション仮想レイヤは、通信をインターセプトして検査して、非セッション固有メモリロケーション、ファイル、レジストリデータベース410などのグローバルリソースへの参照を識別し、かつグローバルオブジェクト名(例えば、システムオブジェクト名、オペレーティングシステムオブジェクト名など)を識別することもできる。
【0085】
ステップ806において、リダイレクション仮想レイヤは、非セッション固有メモリロケーション、ファイル、レジストリデータベース410などのグローバルリソース、また、ステップ804で識別されたグローバルオブジェクト名(例えば、システムオブジェクト名、オペレーティングシステムオブジェクト名など)への参照のそれぞれについて、通信リダイレクト及び/またはシステムオブジェクト名変換を実施することができる。
【0086】
一例として、アプリケーション(または、代替的にデバイス管理サービスのセッションインスタンス)からの通信は、任意のセッションに固有でない、グローバルレジストリデータベース410、ファイル、または他のメモリロケーションに対する書き込みコマンドであってもよい。リダイレクション仮想サーバ506は、リダイレクションデータベース610を調べることによって、通信に関連するセッションに固有の対応するメモリロケーションまたはファイルが存在するかを判定することができる。セッション固有のデータベース(例えば、セッション固有のデータベース606)が存在しない場合、リダイレクション仮想レイヤ506は、リモートサーバ402のメモリパーティションであってもよいセッション固有のデータベース606を作成することができる。一度作成された場合、またはセッションデータベース606が既に存在するが、書き込みコマンドで指定されたグローバルレジストリデータベース410のメモリロケーションまたはファイルにマップされたメモリロケーションまたはファイルを有しない場合、リダイレクション仮想レイヤ506は、セッション固有のデータベース606のメモリロケーションまたはファイルを割り当て、グローバルレジストリデータベース410のメモリロケーションまたはファイルをセッション固有のデータベース606のそのメモリロケーションまたはファイルにマッピングし、リダイレクションデータベース610に格納されたセッションのマッピングを更新する。さらに、書き込みコマンドは、その情報をセッション固有のデータベース606のメモリロケーションまたはファイルに書き込むようにリダイレクトされ、その情報をグローバルレジストリデータベース410の意図されたメモリロケーションまたはファイルに書き込まなくてもよい。
【0087】
別の例として、アプリケーション(または、代替的には、デバイス管理サービスのセッションインスタンス)からの通信は、任意のセッションに固有でない、グローバルレジストリデータベース410、ファイル、または他のメモリロケーションからの読み出しコマンドであってもよい。リダイレクション仮想レイヤ506は、リダイレクションデータベース610を調べることによって、通信に関連するセッションに固有の対応するメモリロケーションまたはファイルが存在するかを判定することができる。セッション固有のデータベース(例えば、セッション固有のデータベース606)が存在しない場合、またはセッション固有のデータベース606が、グローバルレジストリデータベースの意図されたメモリロケーションまたはファイルにマップされたメモリロケーションまたはファイルを有しない場合、リダイレクション仮想レイヤは、読み出しコマンドが、任意のセッションに固有でないグローバルレジストリデータベース410、ファイル、または他のメモリロケーションから読み出すことを可能にすることができる。そうではなく、グローバルレジストリデータベース410の意図されたメモリロケーションまたはファイルにマップされたメモリロケーションまたはファイルがセッション固有のデータベース606に存在する場合、リダイレクション仮想レイヤ506は、グローバルレジストリデータベース410の意図されたメモリロケーションまたはファイルからでなく、セッション固有のデータベース606のメモリロケーションまたはファイルに格納された情報を読み出すように読み出しコマンドをリダイレクトすることができる。
【0088】
さらに別の例として、リダイレクション仮想レイヤ506、608は、任意のセッションに固有ではないグローバルシステムオブジェクト名への参照について、オブジェクト名変換データベース612に見つかる、対応するセッション固有オブジェクト名でその通信における参照の名前を変更することができる。例えば、グローバルオブジェクト名「Foo」は、セッション1の場合は「Foo.Session1」に、セッション2の場合は「Foo.Session2」に名前を変更できる。
【0089】
ステップ808において、リモートサーバ402は、通常のアプリケーションの起動に進むことができる。例えば、ユーザは、ユーザのクライアントデバイスを介してアプリケーションの仮想化されたインスタンスと対話することができる。アプリケーションの仮想化されたインスタンスの機能は、リモートサーバ402によって実行されてもよい。
【0090】
ステップ810で、リダイレクション仮想レイヤ506、608は、仮想アプリケーションインスタンスが、リダイレクトされたレジストリ及び/またはリダイレクトされたファイルシステムを含むことができるセッション固有のデータベース606にアクセスしようとしているか、及び/またはアクセスしたかを判定することができる。そうである場合、リダイレクション仮想レイヤ506、608は、グローバルシステムオブジェクトの仮想化されたセッション固有のインスタンスが既に作成され、かつセッション固有のデータベース606に格納されてしていないかぎり、ステップ812において、グローバルシステムオブジェクトの仮想化されたセッション固有のインスタンスを作成し、それをセッション固有のデータベース606に格納する。さらに、リダイレクション仮想レイヤ506、608は、グローバルシステムオブジェクトの仮想化されたセッション固有のインスタンスのロケーション、及びグローバルシステムオブジェクトへの対応を含むように、リダイレクションデータベース610に格納されたセッションのマッピングを更新することができる。その結果、アプリケーションインスタンスは、サービス管理対象デバイスからデータを取得しながら、グローバルシステムオブジェクトの仮想化されたセッション固有のインスタンスにアクセスし、それを使用することができる。さらに、リダイレクション仮想レイヤ506、608がグローバルシステムオブジェクトについて後続の通信をインターセプトするとき、グローバルシステムオブジェクトは、リダイレクションデータベース610を使用して、グローバルシステムオブジェクトがグローバルシステムオブジェクトの対応する仮想化されたセッション固有のインスタンスを有するかを判定し、そうである場合、グローバルシステムオブジェクトの仮想化されたセッション固有のインスタンスを使用するように指示され得る。他のセッションは、グローバルシステムオブジェクトの仮想化されたセッション固有のインスタンスにアクセスしない可能性がある。そうではなく、アプリケーションインスタンスがセッション固有のデータベース606にアクセスしようとしていない、及び/またはアクセスしていない場合、グローバルシステムオブジェクトは、ステップ814で仮想化されない可能性がある。
【0091】
場合によっては、ステップ804及び/または806において、リダイレクション仮想レイヤは、アプリケーションのセッションインスタンスとデバイス管理サービスとの間の通信チャネルを仮想化することができる。さらに、ステップ810及び/または812において、リダイレクション仮想レイヤは、アプリケーション及びデバイス管理サービスのセッションインスタンスによる使用のために、様々なタイプのリソースを仮想化することができる。
【0092】
いくつかの実施形態では、リダイレクション仮想レイヤはファイルシステム変換を実施することができる。例えば、リダイレクション仮想レイヤがセッションに関連するメッセージをルーティングするロケーションは、要求に関連し、かつそのロケーションに対する書き込み要求が既に受信されているかに依存する。第1または最初の書き込み要求を含む、グローバルレジストリデータベース410のロケーションに対するセッションに関連する各書き込み要求は、グローバルレジストリデータベース410のロケーションに対応するセッション固有のデータベース606のロケーションにリダイレクトされ、その対応を反映するために、リダイレクションデータベース610に格納されたマッピングを更新することができる。ファイルからの読み出し要求は、(例えば、書き込み要求を介して)ファイルのアクセス及び/または内容の変更を試みるまで、元のファイルからの読み出し要求が続く。書き込みアクセスの後にオープンな読み出し要求の場合、ファイルは自動的にセッション固有のサイロ(例えば、セッション固有のディレクトリ606)にリダイレクトされる。一例として、リダイレクション仮想レイヤは、グローバルレジストリデータベース410のロケーションに対する読み出し要求を受信したことに応答して、リダイレクションデータベース610に格納されたマッピングを使用することによって、グローバルレジストリデータベース410のロケーションに対するセッションに関連付けられた、以前にインターセプトされた書み込みアクセスがあったかを判定することができる。そうである場合、リダイレクション仮想レイヤは、情報を読み出すために、セッション固有のディレクトリ606のグローバルレジストリデータベース410のロケーションに対応するロケーションに読み出し要求をルート変更ことができる。そうではなく、グローバルレジストリデータベース410のロケーションに対するセッションに関連付けられた以前の書き込みアクセスがなかった場合、リダイレクション仮想レイヤは、グローバルレジストリデータベース410のロケーションに読み出し要求をルーティングして情報を読み出すことができる。
【0093】
本明細書で使用されるように、セッション内のコンポーネント(例えば、リダイレクション仮想レイヤ)が機能を実施していると言われるとき、リモートサーバ402が機能を実施している可能性がある。
【0094】
主題は、構造的特徴及び/または方法論的行為に固有の言語で説明されているが、添付の請求項に定義された主題は、必ずしも上述の固有の特徴または行為に限定されないことを理解されたい。むしろ、上記の固有の特徴及び動作は、請求項を実現する例示的な形態として開示されている。
【0095】
関連出願の相互参照
この出願は、2015年8月3日に出願された「Virtualizing Device Management Services on a multi−session Platform」と題する米国非仮特許出願第14/816,800号に対する優先権を主張する。上記の出願は、その全体が全ての目的のために参照により本明細書に組み込まれる。
本発明の精神および範囲は、添付する特許請求の範囲の中に存在するが、本願の出願時に特許請求の範囲として存在し、その一部は補正により削除された、以下の[予備的な特許請求の範囲]の中にも潜在する。この[予備的な特許請求の範囲]の記載事項は、本願明細書の開示に含まれるものとする。
[予備的な特許請求の範囲]
[予備請求項11]
プロセッサと、
命令を格納しているコンピュータ可読媒体と、を備える装置であって、
前記命令は、前記プロセッサによって実行されると、
各セッションが、異なるユーザに固有であり、アプリケーションの少なくとも1つの仮想インスタンスを含む複数のセッションを生成し、
前記装置とは異なるユーザデバイスから受信した1つ以上のユーザ入力に基づいて、前記複数のセッションのうちの1つのセッションについて前記アプリケーションの仮想インスタンスの1つ以上の機能を実施し、
前記ユーザデバイスが、デバイスドライバによって管理されるように構成された周辺デバイスに接続されているかを判定し、かつ
前記ユーザデバイスが、前記デバイスドライバによって管理されるように構成された前記周辺デバイスに接続されていると判定されたことに応答して、前記セッション用の前記デバイスドライバの仮想インスタンス、及び前記セッション用の前記デバイスドライバの前記仮想インスタンスのためのリダイレクションレイヤを生成するように前記装置を構成する、装置。
[予備請求項12]
前記コンピュータ可読媒体は命令を格納し、前記命令は、前記プロセッサによって実行されると、
異なるユーザデバイスから受信した1つ以上のユーザ入力に基づいて、前記複数のセッションのうちの異なるセッションについて前記アプリケーションの異なる仮想インスタンスの1つ以上の機能を実施し、
前記異なるユーザデバイスが、前記デバイスドライバによって管理されるように構成された異なる周辺デバイスに接続されているかを判定し、かつ
前記異なるユーザデバイスが、前記デバイスドライバによって管理されるように構成された前記異なる周辺デバイスに接続されていると判定されたことに応答して、前記異なるセッション用の前記デバイスドライバの異なる仮想インスタンス、及び前記異なるセッション用の前記デバイスドライバの前記異なる仮想インスタンス用の異なるリダイレクションレイヤを生成するように前記装置をさらに構成する、予備請求項11に記載の装置。
[予備請求項13]
前記コンピュータ可読媒体は命令を格納し、前記命令は、前記プロセッサによって実行されると、
前記デバイスドライバの前記仮想インスタンスと、前記アプリケーションの前記仮想インスタンスとの間の通信をインターセプトし、かつ
前記通信が、グローバルレジストリデータベースのロケーションへの書き込み命令を含むと判定したことに応答して、前記セッションに固有で前記グローバルレジストリデータベースの前記ロケーションに対応する、データベースのロケーションに書き込み命令をルーティングするように前記装置をさらに構成する、予備請求項11に記載の装置。
[予備請求項14]
前記コンピュータ可読媒体は命令を格納し、前記命令は、前記プロセッサによって実行されると、
前記デバイスドライバの前記仮想インスタンスと、前記アプリケーションの前記仮想インスタンスとの間の通信をインターセプトし、かつ
前記通信が、グローバルレジストリデータベースのロケーションへの読み出し命令を含むと判定したことに応答して、前記セッションに固有で前記グローバルレジストリデータベースの前記ロケーションに対応する、データベースのロケーションに読み出し命令をルーティングするように前記装置をさらに構成する、予備請求項11に記載の装置。
[予備請求項15]
前記コンピュータ可読媒体は命令を格納し、前記命令は、前記プロセッサによって実行されると、
前記デバイスドライバの前記仮想インスタンスと、前記アプリケーションの前記仮想インスタンスとの間の通信をインターセプトし、かつ
前記通信がグローバルオブジェクトへの参照を含むと判定したことに応答して、
前記セッションに固有である前記グローバルオブジェクトの仮想インスタンスを生成し、
前記グローバルオブジェクトへの前記参照を前記セッションに固有である前記グローバルオブジェクトの前記仮想インスタンスへの参照に変更するように前記装置をさらに構成する、予備請求項11に記載の装置。
[予備請求項16]
各セッションが、異なるユーザに固有であり、アプリケーションの少なくとも1つの仮想インスタンスを含む、複数のセッションをコンピューティングデバイスによって生成することと、
前記コンピューティングデバイスとは異なるユーザデバイスから受信した1つ以上のユーザ入力に基づいて、前記複数のセッションのうちの1つのセッションについて前記アプリケーションの仮想インスタンスの1つ以上の機能を前記コンピューティングデバイスによって実施することと、
前記ユーザデバイスが、デバイスドライバによって管理されるように構成された周辺デバイスに接続されていると判定したことに応答して、前記セッション用の前記デバイスドライバの仮想インスタンス、及び前記セッション用の前記デバイスドライバの前記仮想インスタンスのためのリダイレクションレイヤを生成することと、
セッションに関連し、グローバルリソース向けのメッセージを、前記セッションに固有である前記グローバルリソースの仮想インスタンスにルート変更することと、を含む、方法。
[予備請求項17]
前記複数のセッションの各々が、同じオペレーティングシステムと通信し、ハイパーバイザーと通信しない、予備請求項16に記載の方法。
[予備請求項18]
前記メッセージ内のグローバルオブジェクト名を前記セッション固有のオブジェクト名に名前変更することをさらに含む、予備請求項16に記載の方法。
[予備請求項19]
前記セッションに関連し、グローバルリソース向けの前記メッセージの少なくとも1つが、グローバルレジストリデータベースのロケーションへの書き込み命令または読み出し命令を含む、予備請求項16に記載の方法。
[予備請求項20]
前記セッションに関連する読み出し命令をインターセプトすることと、
前記セッションに関連する前記読み出し命令が、グローバルレジストリデータベースのロケーションに関するものであると判定することと、
前記セッションに関連し、前記グローバルレジストリデータベースのロケーションに関する書き込み命令が、前記セッションに固有であり、前記グローバルレジストリデータベースのロケーションに対応するデータベースのロケーションに、以前にルート変更されたことがあると判定したことに応答して、前記セッションに固有であり、前記グローバルレジストリデータベースのロケーションに対応するデータベースの前記ロケーションに、前記読み出し命令をルート変更することと、をさらに含む、予備請求項16に記載の方法。