様々な実施の形態の以下の説明では、上記で特定され、本明細書の一部を形成し、本明細書に記載する態様が実施され得る様々な実施の形態の例として示される添付図面を参照する。本明細書で説明される範囲を逸脱することなく、他の実施の形態が利用されてもよく、構造的および機能的な修正が行われてもよいことを理解されたい。さまざまな態様は、他の実施の形態を行うことができ、さまざまな異なる方法で実践または実行が可能である。
以下でより詳細に説明される発明の主題への一般的な紹介として、本明細書で説明される態様が、表示され、またはその他の方法により処理される、キーボード入力に対応する出力を自動的に比較し、これらの出力の1つ以上が、仮想デスクトップおよび/またはアプリケーションのコンテキストでの対応するキーボード入力に誤ってマッピングされていると決定する方法を対象とする。
この方法は、キーボードマッピングテーブルに定義される、オペレーティングシステム、ブラウザ、キーボードタイプなどの指定された組み合わせについてのテストケースを構築する。この方法は、テキスト認識を使用して、ローカルマシン上に生成されるシミュレートされたキーボード出力を、仮想デスクトップ/アプリケーションでの出力と比較する。シミュレートされたキーボード出力が一致しない場合、キーボードマッピングに誤りがあると推定され、キーボードマッピングテーブルでの自動訂正が実行される。
本明細書で使用されている表現および用語は、説明を目的としており、限定的なものと見なすべきでないことも理解されたい。むしろ、本明細書で使用される語句および用語は、それらの最も広い解釈および意味を与えられるべきである。「including(含む)」、「comprising(含む)」、およびこれらの変形の使用は、その後に列挙される項目およびそれらの等価物、並びに、追加の項目およびそれらの等価物を包含することを意味する。「接続された(connected)」、「結合された(coupled)」という用語および同様の用語の使用は、直接的かつ間接的な接続および結合の両方を含むことが意味される。
コンピューティングアーキテクチャ
コンピュータソフトウェア、ハードウェア、およびネットワークは、スタンドアロン、ネットワーク、リモートアクセス(リモートデスクトップの別名でも知られる)、仮想、および/または、クラウドベースの環境等を含む、さまざまな異なるシステム環境で利用されてよい。
図1は、本明細書に記載する1つまたは複数の例示的な態様をスタンドアロンおよび/またはネットワーク環境で実施するために使用され得るシステムアーキテクチャおよびデータ処理デバイスの一例を示す。さまざまなネットワークノード103、105、107、および109は、インターネット等の広域ネットワーク(WAN)101を介して相互接続されてよい。プライベートイントラネット、企業ネットワーク、ローカルエリアネットワーク(LAN)、メトロポリタンエリアネットワーク(MAN)、ワイヤレスネットワーク、パーソナルネットワーク(PAN)等、他のネットワークも追加または代替として使用されてよい。ネットワーク101は、例示を目的としたものであり、より少ないまたは追加のコンピュータネットワークで置き換えられてもよい。ローカルエリアネットワーク133は、任意の既知のLANトポロジの1つ以上を有してよく、イーサネット等のさまざまな異なるプロトコルの1つ以上を使用してよい。デバイス103、105、107、および109並びに他のデバイス(図示せず)は、ツイストペア線、同軸ケーブル、光ファイバ、電波、または他の通信媒体を介してネットワークの1つ以上に接続されてよい。
本明細書で使用され、図面に示される「ネットワーク」という用語は、リモートストレージデバイスが1つ以上の通信パスを介して一緒に結合されるシステムだけでなく、ストレージ機能を持つそのようなシステムに時々結合され得るスタンドアロンデバイスも指す。したがって、「ネットワーク」という用語は、「物理ネットワーク」だけでなく、全ての物理ネットワークにわたって存在する(単一のエンティティに起因する)データから構成される「コンテンツネットワーク」も含む。
コンポーネントは、データサーバ103、ウェブサーバ105、およびクライアントコンピュータ107、109を含むことができる。データサーバ103は、本明細書で説明される1つ以上の例示的な態様を実行するためのデータベースおよび制御ソフトウェアの全体的なアクセス、制御、および管理を提供する。データサーバ103は、ウェブサーバ105に接続されてよく、ウェブサーバ105を通じて、ユーザは要求に応じてデータと対話し、データを取得する。あるいは、データサーバ103は、それ自体がウェブサーバとして機能し、インターネットに直接接続されてもよい。データサーバ103は、ローカルエリアネットワーク133、広域ネットワーク101(例えば、インターネット)を介して、直接もしくは間接接続を介して、または他の何らかのネットワークを介して、ウェブサーバ105に接続されてよい。ユーザは、リモートコンピュータ107、109を使用して、例えば、ウェブブラウザを使用してウェブサーバ105によってホストされる1つ以上の外部に公開されたウェブサイトを介してデータサーバ103に接続して、データサーバ103と対話してよい。クライアントコンピュータ107、109は、データサーバ103に記憶されたデータにアクセスするためにデータサーバ103と協力して使用されてよい、または、他の目的のために使用されてよい。例えば、クライアント装置107から、ユーザは、当技術分野で知られているように、インターネットブラウザを使用して、または、(インターネット等の)コンピュータネットワークを介してウェブサーバ105および/またはデータサーバ103と通信するソフトウェアアプリケーションを実行することによって、ウェブサーバ105にアクセスしてよい。
サーバおよびアプリケーションは、同一の物理マシン上で組み合わされてよく、別個の仮想アドレスもしくは論理アドレスを保持してよい、または別個の物理マシン上に存在してよい。図1は、使用することができるネットワークアーキテクチャの一例を示しているにすぎず、当業者は、本明細書で更に説明されるように、使用される特定のネットワークアーキテクチャおよびデータ処理デバイスは変わってよく、それらが提供する機能に依存することを理解されよう。例えば、ウェブサーバ105およびデータサーバ103によって提供されるサービスは、単一のサーバ上で組み合わされてよい。
各コンポーネント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は、本明細書ではデータサーバソフトウェア125と呼ぶこともある。データサーバソフトウェア125の機能は、制御ロジック125内にコード化されたルールに基づいて自動的に行われる動作もしくは判定、ユーザがシステムに入力を提供することによって手動で行われる動作もしくは判定、および/またはユーザ入力に基づく自動処理(たとえば、クエリ、データ更新など)の組み合わせを指す場合がある。
メモリ121は、第1のデータベース129および第2のデータベース131を含む、本明細書に記載の1つ以上の態様を実施する際に使用されるデータも記憶してもよい。一部の実施の形態では、第1のデータベース129は、第2のデータベース131を(たとえば、別個のテーブル、レポートなどとして)含んでもよい。すなわち、情報は、システム設計に応じて、単一のデータベースに記憶するか、または異なる論理データベース、仮想データベース、もしくは物理データベースに分けることができる。デバイス105、107、および109は、デバイス103に関して記載したのと同様または異なるアーキテクチャを有してよい。当業者は、本明細書で説明されるデータ処理デバイス103(または、デバイス105、107、もしくは109)の機能性が、例えば、複数のコンピュータにわたって処理負荷を分散し、地理的位置、ユーザアクセスレベル、サービス品質(QoS)などに基づいてトランザクションを分けるよう、複数のデータ処理デバイスにわたって展開されてもよいことを理解されよう。
1つ以上の態様は、本明細書に記載の1つ以上のコンピュータまたは他のデバイスによって実行される、1つ以上のプログラムモジュール等、コンピュータで使用可能もしくは読み取り可能なデータおよび/またはコンピュータ実行可能命令で具体化されてよい。一般に、プログラムモジュールは、コンピュータまたは他のデバイスのプロセッサで実行されると、特定のタスクを実行する、または、特定の抽象データタイプを実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含む。モジュールは、実行のために後にコンパイルされるソースコードプログラミング言語で書かれてもよく、またはハイパーテキストマークアップ言語(HTML)もしくは拡張マークアップ言語(XML)など(それらに限定されない)のスクリプト言語で書かれてもよい。
コンピュータ実行可能命令は、不揮発性記憶装置等のコンピュータ可読媒体に記憶されてよい。ハードディスク、CD-ROM、光学記憶装置、磁気記憶装置、および/またはそれらの任意の組み合わせを含む、任意の適切なコンピュータ可読記憶媒体が利用されてよい。加えて、本明細書で説明されるデータまたはイベントを表すさまざまな伝送(非記憶)媒体が、金属線、光ファイバ、並びに/または無線伝送媒体(例えば、空気および/または空間)等、信号伝播媒体を通じて移動する電磁波の形式において、送信元と宛先の間で伝達されてよい。本明細書に記載するさまざまな態様は、方法、データ処理システム、またはコンピュータプログラム製品として具体化されてもよい。したがって、さまざまな機能が、ソフトウェア、ファームウェア、および/または、集積回路、フィールドプログラマブルゲートアレイ(FPGA)等のハードウェアもしくはハードウェア同等物の形で全体的または部分的に具体化されてもよい。特定のデータ構造を使用して、本明細書に記載する1つ以上の態様をより効果的に実施してもよく、そのようなデータ構造は、本明細書に記載するコンピュータ実行可能命令およびコンピュータ使用可能データの範囲内で企図される。
さらに図2を参照すると、本明細書に記載する1つ以上の態様は、リモートアクセス環境で実施されてよい。図2に、本明細書に記載の1つ以上の例示的な態様に従って使用され得る例示的なコンピューティング環境200におけるコンピューティングデバイス201を含む例示的なシステムアーキテクチャを示す。コンピューティングデバイス201は、単一サーバまたはマルチサーバのデスクトップ仮想化システム(たとえば、リモートアクセスまたはクラウドシステム)内のサーバ206aとして使用されてもよく、クライアントアクセスデバイスに仮想マシンを提供するように構成することができる。コンピューティングデバイス201は、デバイス201の動作全体を制御するプロセッサ203と、それに関連するコンポーネント、たとえば、RAM205、ROM207、入力/出力(I/O)モジュール209、およびメモリ215と、を有してもよい。
I/Oモジュール209は、コンピューティングデバイス201のユーザが入力を提供し得るマウス、キーパッド、タッチスクリーン、スキャナ、光学リーダ、および/またはスタイラス(もしくは他の入力デバイス(複数可))を含んでもよく、また、音声出力を提供するためのスピーカーのうちの1つ以上と、テキスト、オーディオビジュアル、および/またはグラフィカル出力を提供するためのビデオディスプレイデバイスのうちの1つ以上と、を含んでもよい。本明細書に記載するさまざまな機能を実行するために、コンピューティングデバイス201を専用コンピューティングデバイスに構成する命令をプロセッサ203に提供するソフトウェアがメモリ215および/または他のストレージ内に記憶されてよい。例えば、メモリ215は、オペレーティングシステム217、アプリケーションプログラム219、および関連するデータベース221等、コンピューティングデバイス201によって使用されるソフトウェアを記憶してよい。
コンピューティングデバイス201は、端末240(クライアントデバイスとも呼ばれる)等の1つ以上のリモートコンピュータへの接続をサポートするネットワーク環境で動作してよい。端末240は、コンピューティングデバイス103または201に関して前述した要素の多くまたは全てを含むパーソナルコンピュータ、モバイルデバイス、ラップトップコンピュータ、タブレット、またはサーバであってよい。図2に示すネットワーク接続は、ローカルエリアネットワーク(LAN)225および広域ネットワーク(WAN)229を含むが、他のネットワークも含んでよい。LANネットワーキング環境で使用される場合、コンピューティングデバイス201は、ネットワークインタフェースまたはアダプタ223を介してLAN225に接続されてもよい。WANネットワーキング環境で使用される場合、コンピューティングデバイス201は、コンピュータネットワーク230(たとえば、インターネット)などのWAN229を介して通信を確立するためのモデムまたは他のワイドエリアネットワークインタフェース227を含んでもよい。図示したネットワーク接続は例示的なものであり、コンピュータ間に通信リンクを確立する他の手段が使用されてもよいことは理解されよう。コンピューティングデバイス201および/または端末240は、バッテリ、スピーカー、およびアンテナ(図示せず)等の他のさまざまなコンポーネントを含むモバイル端末(例えば、携帯電話、スマートフォン、パーソナルデジタルアシスタント(PDA)、ノートブック等)であってもよい。
本明細書で説明される態様は、他の多くの汎用または特殊目的コンピューティングシステム環境または構成により動作してもよい。本明細書で説明される態様による使用に適切であることができる他のコンピューティングシステム、環境、および/または構成の例には、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドもしくはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な家電、ネットワークパーソナルコンピュータ(PC)、ミニコンピュータ、メインフレームコンピュータ、上記のシステムもしくはデバイスの任意のものを含む分散コンピューティング環境等が含まれるが、これらに限定されない。
図2に示すように、1つ以上のクライアントデバイス240は、1つ以上のサーバ206a~206n(本明細書では一般に「サーバ(複数可)206」と呼ばれる)と通信してよい。一つの実施の形態では、コンピューティング環境200は、サーバ(複数可)206とクライアントマシン(複数可)240の間にインストールされたネットワークアプライアンスを含んでよい。ネットワークアプライアンスは、クライアント/サーバ接続を管理してよく、場合によっては、複数のバックエンドサーバ206間でクライアント接続の負荷を分散できる。
クライアントマシン(複数可)240は、一部の実施の形態では、単一のクライアントマシン240またはクライアントマシン240の単一グループと呼ばれる場合があり、一方、サーバ(複数可)206は、単一のサーバ206またはサーバグループ206の単一のグループと呼ばれる場合がある。一つの実施の形態では、単一のクライアントマシン240は複数のサーバ206と通信し、別の実施の形態では、単一のサーバ206は複数のクライアントマシン240と通信する。更に別の実施の形態では、単一のクライアントマシン240は、単一のサーバ206と通信する。
クライアントマシン240は、一部の実施の形態では、クライアントマシン(複数可)、クライアント(複数可)、クライアントコンピュータ(複数可)、クライアントデバイス(複数可)、クライアントコンピューティングデバイス(複数可)、ローカルマシン、リモートマシン、クライアントノード(複数可)、エンドポイント(複数可)、またはエンドポイントノード(複数可)のいずれかによって言及できるが、これらの用語が全てではない。サーバ206は、一部の実施の形態では、サーバ(複数可)、ローカルマシン、リモートマシン、サーバファーム(複数可)、またはホストコンピューティングデバイス(複数可)のいずれかによって言及されてよいが、これらの用語が全てではない。
一つの実施の形態では、クライアントマシン240は、仮想マシンであってもよい。仮想マシンは、任意の仮想マシンであってよく、一部の実施の形態では、仮想マシンは、タイプ1またはタイプ2のハイパーバイザ、例えば、Citrix Systems、IBM、Vmwareによって開発されたハイパーバイザ、または任意の他のハイパーバイザによって管理される任意の仮想マシンであってよい。一部の態様では、仮想マシンはハイパーバイザによって管理されてよく、他の態様では、仮想マシンは、サーバ206上で実行されるハイパーバイザまたはクライアント240上で実行されるハイパーバイザによって管理されてよい。
一部の実施の形態は、サーバ206または他のリモートに配置されたマシン上、リモートで実行されるアプリケーションによって生成されたアプリケーション出力を表示するクライアントデバイス240を含む。これらの実施の形態では、クライアントデバイス240は、仮想マシン受け手プログラムまたはアプリケーションを実行して、アプリケーションウインドウ、ブラウザ、または他の出力ウインドウに出力を表示してよい。一例では、アプリケーションはデスクトップであるが、他の例では、アプリケーションはデスクトップを生成または提示するアプリケーションである。デスクトップは、ローカルおよび/またはリモートのアプリケーションを統合できるオペレーティングシステムのインスタンスにユーザインタフェースを提供するグラフィカルシェルを含んでもよい。アプリケーションは、本明細書では、オペレーティングシステムのインスタンス(およびオプションでデスクトップも)がロードされた後に実行されるプログラムである。
サーバ206は、一部の実施の形態では、リモートプレゼンテーションプロトコルまたは他のプログラムを使用して、クライアント上で実行されるシンクライアントまたはリモートディスプレイアプリケーションにデータを送信して、サーバ206上で実行されるアプリケーションによって生成される表示出力を提示する。シンクライアントまたはリモートディスプレイプロトコルは、以下のプロトコルのいずれかであってよいが、これらが全てではない。すなわち、フロリダ州フォートローダーデールのCitrix Systems社が開発した独立コンピューティングアーキテクチャ(ICA)プロトコル、または、ワシントン州レドモンドのMicrosoft Corporationによって製造されたリモートデスクトッププロトコル(RDP)である。
リモートコンピューティング環境は、2つ以上のサーバ206a~206nを含むことによって、サーバ206a~206nが、たとえばクラウドコンピューティング環境におけるサーバファーム206に論理的にグループ化されるようにしてもよい。サーバファーム206は、論理的にグループ化されつつも地理的に分散しているサーバ206、または論理的にグループ化されつつ互いに近接して配置されたサーバ206を含んでもよい。サーバファーム206内の地理的に分散したサーバ206a~206nは、一部の実施の形態では、WAN(ワイド)、MAN(メトロポリタン)、またはLAN(ローカル)を使用して通信することができ、異なる地理的地域は、異なる大陸、ある大陸の異なる地域、異なる国、異なる州、異なる都市、異なるキャンパス、異なる部屋、または前述の地理的な場所の任意の組み合わせとして特徴づけることができる。一部の実施の形態では、サーバファーム206は単一のエンティティとして管理されてよいが、他の実施の形態では、サーバファーム206は複数のサーバファームを含むことができる。
一部の実施の形態では、サーバファームは、実質的に類似のタイプのオペレーティングシステムプラットフォーム(例えば、WINDOWS(登録商標)、UNIX(登録商標)、LINUX、iOS、ANDROID(登録商標)、SYMBIAN等)を実行するサーバ206を含んでよい。他の実施の形態では、サーバファーム206は、第1のタイプのオペレーティングシステムプラットフォームを実行する1つ以上のサーバの第1のグループと、第2のタイプのオペレーティングシステムプラットフォームを実行する1つ以上のサーバの第2のグループとを含んでよい。
サーバ206は、必要に応じて、任意のタイプのサーバとして構成されてよく、例えば、ファイルサーバ、アプリケーションサーバ、ウェブサーバ、プロキシサーバ、アプライアンス、ネットワークアプライアンス、ゲートウェイ、アプリケーションゲートウェイ、ゲートウェイサーバ、仮想化サーバ、展開サーバ、セキュアソケット層(SSL)VPNサーバ、ファイアウォール、ウェブサーバ、アプリケーションサーバ、または、マスタアプリケーションサーバとしてのサーバ、アクティブディレクトリを実行するサーバ、または、ファイアウォール機能、アプリケーション機能、もしくは負荷分散機能を提供するアプリケーション加速プログラムを実行するサーバとして構成されてよい。他の種類のサーバも使用されてよい。他のサーバタイプも使用されてもよい。
一部の実施の形態は、第1のサーバ206aを含み、第1のサーバ206aは、クライアントマシン240から要求を受け取り、要求を第2のサーバ206b(図示せず)に転送し、第2のサーバ206b(図示せず)からの応答を用いて、クライアントマシン240により生成された要求に応答する。第1のサーバ206aはクライアントマシン240が利用可能なアプリケーションの一覧表に加え、アプリケーションの一覧表内で識別されるアプリケーションをホストするアプリケーションサーバ206に関連するアドレス情報を取得してもよい。第1のサーバ206aは次いで、ウェブインタフェースを使用してクライアントの要求に対する応答を提示し、クライアント240と直接通信して、識別されたアプリケーションへのアクセスをクライアント240に提供することができる。1つ以上のクライアント240および/または1つ以上のサーバ206は、ネットワーク230、例えばネットワーク101を介してデータを送信してよい。
図3は、例示的なデスクトップ仮想化システムの高レベルのアーキテクチャを示す。図に示すように、デスクトップ仮想化システムは、仮想デスクトップおよび/または仮想アプリケーションを1つ以上のクライアントアクセスデバイス240に提供するように構成された少なくとも1つの仮想化サーバ301を含む、単一サーバシステム、マルチサーバシステム、またはクラウドシステムであってよい。本明細書で使用するとき、デスクトップとは、1つ以上のアプリケーションをホストおよび/または実行し得るグラフィカルな環境または空間を指す。デスクトップは、ローカルおよび/またはリモートのアプリケーションを統合できるオペレーティングシステムのインスタンスにユーザインタフェースを提供するグラフィカルシェルを含んでもよい。アプリケーションは、オペレーティングシステム(およびオプションでデスクトップ)のインスタンスがロードされた後に実行されるプログラムを含んでもよい。オペレーティングシステムの各インスタンスは、物理的(例えば、デバイスごとに1つのオペレーティングシステム)または仮想的(例えば、単一のデバイスで実行されているOSの多くのインスタンス)であってよい。各アプリケーションは、ローカルデバイスで実行されてよい、または、リモートに配置されたデバイスで実行されて(リモートであって)よい。
コンピュータデバイス301は、仮想化環境における仮想化サーバ、例えば、単一サーバ、マルチサーバ、またはクラウドコンピューティング環境として構成されてよい。図3に示す仮想化サーバ301は、図2に示されるサーバ206の1つ以上の実施の形態として、または、他の既知のコンピューティングデバイスとして展開、および/または、それらによって実装されてよい。仮想化サーバ301には、1つ以上の物理ディスク304、1つ以上の物理デバイス306、1つ以上の物理プロセッサ308、および1つ以上の物理メモリ316を含むことができるハードウェア層が含まれる。一部の実施の形態では、ファームウェア312は、物理メモリ316のメモリ要素内に記憶することができ、物理プロセッサ308の1つ以上によって実行することができる。仮想化サーバ301は、オペレーティングシステム314を更に含んでよく、オペレーティングシステム314は、物理メモリ316内のメモリ要素に記憶されてよく、物理プロセッサ308の1つ以上によって実行されてよい。更に、ハイパーバイザ302は、物理メモリ316内のメモリ要素に記憶されてよく、物理プロセッサ308のうちの1つ以上によって実行されてもよい。
物理プロセッサ308のうちの1つ以上の上で実行するのは、1つ以上の仮想マシン332A~C(全体的に332)であってもよい。各仮想マシン332は、仮想ディスク326A~326Cおよび仮想プロセッサ328A~328Cを有してよい。一部の実施の形態では、第1の仮想マシン332Aは、仮想プロセッサ328Aを使用して、ツールスタック324を含む制御プログラム320を実行してよい。制御プログラム320は、制御仮想マシン、Dom0、ドメイン0、またはシステム管理および/または制御に使用される他の仮想マシンと呼ばれ得る。一部の実施の形態では、1つ以上の仮想マシン332B~332Cは、仮想プロセッサ328B~328Cを使用して、ゲストオペレーティングシステム330A~330Bを実行することができる。
仮想化サーバ301は、仮想化サーバ301と通信する1つ以上のハードウェアを備えたハードウェア層310を含んでよい。一部の実施の形態では、ハードウェア層310は、1つ以上の物理ディスク304、1つ以上の物理デバイス306、1つ以上の物理プロセッサ308、および1つ以上の物理メモリ316を含むことができる。物理コンポーネント304、306、308、および316は、例えば、上記のコンポーネントのいずれかを含んでよい。物理デバイス306は、例えば、ネットワークインタフェースカード、ビデオカード、キーボード、マウス、入力デバイス、モニタ、ディスプレイデバイス、スピーカー、光学ドライブ、ストレージデバイス、ユニバーサルシリアルバス接続、プリンタ、スキャナ、ネットワーク要素(例えば、ルータ、ファイアウォール、ネットワークアドレストランスレータ、ロードバランサ、仮想プライベートネットワーク(VPN)ゲートウェイ、動的ホスト構成プロトコル(DHCP)ルータ等)、または、仮想化サーバ301に接続または通信する任意のデバイスを含んでよい。ハードウェア層310内の物理メモリ316は、任意のタイプのメモリを含んでよい。物理メモリ316は、データを記憶してよく、一部の実施の形態では、1つ以上のプログラム、または実行可能命令のセットを記憶してよい。図3は、ファームウェア312が仮想化サーバ301の物理メモリ316内に記憶される実施の形態を示す。物理メモリ316に記憶されたプログラムまたは実行可能命令は、仮想化サーバ301の1つ以上のプロセッサ308によって実行することができる。
仮想化サーバ301は、ハイパーバイザ302も含んでよい。一部の実施の形態では、ハイパーバイザ302は、任意の数の仮想マシン332を作成および管理するために仮想化サーバ301上のプロセッサ308によって実行されるプログラムであってよい。ハイパーバイザ302は、仮想マシンモニタまたはプラットフォーム仮想化ソフトウェアと呼ばれる場合がある。一部の実施の形態では、ハイパーバイザ302は、実行可能命令と、コンピューティングマシン上で実行されている仮想マシンを監視するハードウェアとの任意の組み合わせであってよい。ハイパーバイザ302はタイプ2ハイパーバイザであってもよく、そのハイパーバイザは、仮想化サーバ301上で実行されるオペレーティングシステム314内で実行される。仮想マシンは次いで、ハイパーバイザ302より上のレベルで実行されてもよい。一部の実施の形態では、タイプ2ハイパーバイザをユーザのオペレーティングシステムのコンテキスト内で実行させて、タイプ2ハイパーバイザがユーザのオペレーティングシステムとやり取りするようにしてもよい。
他の実施の形態では、仮想化環境内の1つ以上の仮想化サーバ301は、代わりにタイプ1ハイパーバイザ(図示せず)を含んでよい。タイプ1ハイパーバイザは、ハードウェア層310内のハードウェアおよびリソースに直接アクセスすることにより、仮想化サーバ301上で実行されてよい。すなわち、図に示すように、タイプ2ハイパーバイザ302は、ホストオペレーティングシステム314を介してシステムリソースにアクセスするが、タイプ1ハイパーバイザは、ホストオペレーティングシステム314無しで全てのシステムリソースに直接アクセスしてよい。タイプ1ハイパーバイザは、仮想化サーバ301の1つ以上の物理プロセッサ308で直接実行されてよく、物理メモリ316に記憶されたプログラムデータを含んでよい。
ハイパーバイザ302は、一部の実施の形態では、システムリソースに直接アクセスできるオペレーティングシステム330または制御プログラム320をシミュレートする任意の方法で、仮想マシン332上で実行されるオペレーティングシステム330または制御プログラム320に仮想リソースを提供することができる。システムリソースは、物理デバイス306、物理ディスク304、物理プロセッサ308、物理メモリ316、および仮想化サーバ301のハードウェアレイヤ310に含まれる他の任意のコンポーネントを含むことができるが、これらに限定されない。ハイパーバイザ302は、仮想ハードウェアのエミュレート、物理ハードウェアの分割、物理ハードウェアの仮想化、および/またはコンピューティング環境へのアクセスを提供する仮想マシンの実行を行うために使用されてもよい。さらに他の実施の形態では、ハイパーバイザ302は、仮想化サーバ301上で実行される仮想マシン332のプロセッサスケジューリングおよびメモリ分割を制御してよい。ハイパーバイザ302は、カリフォルニア州パロアルトのVMWare社によって製造されるハイパーバイザ、オープンソースのXenProject.orgコミュニティによって開発が監督されているオープンソース製品であるXENPROJECTハイパーバイザ、Microsoft社によって提供されるHyperV、VirtualServer、または仮想PCハイパーバイザ等を含んでよい。
一部の実施の形態では、仮想化サーバ301は、ゲストオペレーティングシステムが実行し得る仮想マシンプラットフォームを作成するハイパーバイザ302を実行してよい。これらの実施の形態では、仮想化サーバ301は、ホストサーバと呼ばれてよい。そのような仮想化サーバの例は、フロリダ州フォートローダーデールのCitrix Systems社が提供するXENSERVERである。
ハイパーバイザ302は、ゲストオペレーティングシステム330が実行される1つ以上の仮想マシン332B~332C(一般的に332)を作成してよい。一部の実施の形態では、ハイパーバイザ302は、仮想マシンイメージをロードして、仮想マシン332を作成してよい。他の実施の形態では、ハイパーバイザ302は、仮想マシン332内でゲストオペレーティングシステム330を実行してもよい。さらに他の実施の形態では、仮想マシン332は、ゲストオペレーティングシステム330を実行してよい。
仮想マシン332を作成することに加えて、ハイパーバイザ302は、少なくとも1つの仮想マシン332の実行を制御してよい。他の実施の形態では、ハイパーバイザ302は、仮想化サーバ301によって提供される少なくとも1つのハードウェアリソース(例えば、ハードウェア層310内で利用可能な任意のハードウェアリソース)の抽象化を少なくとも1つの仮想マシン332に提示してよい。他の実施の形態では、ハイパーバイザ302は、仮想マシン332が仮想化サーバ301で利用可能な物理プロセッサ308にアクセスする方法を制御してよい。物理プロセッサ308へのアクセスの制御は、仮想マシン332がプロセッサ308にアクセスを有すべきか否か、および物理プロセッサ機能が仮想マシン332にどのように提示されるかを決定することを含んでよい。
図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に提供してよい。
各仮想マシン332は、仮想ディスク326A~326C(総称で326)および仮想プロセッサ328A~328C(総称で328)を含んでよい。一部の実施の形態では、仮想ディスク326は、仮想化サーバ301の1つ以上の物理ディスク304の仮想化ビュー、または、仮想化サーバ301の1つ以上の物理ディスク304の一部の仮想化ビューである。物理ディスク304の仮想化ビューは、ハイパーバイザ302によって生成、提供、および管理することができる。一部の実施の形態では、ハイパーバイザ302は、各仮想マシン332に物理ディスク304の一意のビューを提供する。したがって、これらの実施の形態では、各仮想マシン332に含まれる特定の仮想ディスク326は、他の仮想ディスク326と比較されるときに一意であってよい。
仮想プロセッサ328は、仮想化サーバ301の1つ以上の物理プロセッサ308の仮想化ビューであってよい。一部の実施の形態では、物理プロセッサ308の仮想化ビューは、ハイパーバイザ302によって生成、提供、および管理することができる。一部の実施の形態では、仮想プロセッサ328は、少なくとも1つの物理プロセッサ308の同じ特性を実質的に全て有する。他の実施の形態では、仮想プロセッサ308は、仮想プロセッサ328の特性の少なくとも一部が対応する物理プロセッサ308の特性とは異なるように、物理プロセッサ308の修正されたビューを提供する。
図4をさらに参照すると、本明細書に記載する一部の態様は、クラウドベース環境で実施されてよい。図4に、クラウドコンピューティング環境(またはクラウドシステム)400の一例を示す。図4に見られるように、クライアントコンピュータ411~414はクラウド管理サーバ410と通信して、クラウドシステムのコンピューティングリソース(たとえば、ホストサーバ403a~403b(本明細書では総称して「ホストサーバ403」と呼ぶ)、ストレージリソース404a~404b(本明細書では総称して「ストレージリソース404」と呼ぶ)、およびネットワークリソース405a~405b(本明細書では総称して「ネットワークリソース405」と呼ぶ))にアクセスしてもよい。
管理サーバ410が1つ以上の物理サーバ上に実装されてもよい。管理サーバ410は、例えば、フロリダ州フォートローダーデールのCitrix Systems社によるCLOUDPLATFORM、または、OPENSTACK等を実行してよい。管理サーバ410は、クラウドのハードウェアおよびソフトウェアリソース、例えば、ホストコンピュータ403、データストレージデバイス404、およびネットワーキングデバイス405を含む、さまざまなコンピューティングリソースを管理してよい。クラウドのハードウェアおよびソフトウェアリソースはプライベートおよび/またはパブリックコンポーネントを含んでよい。例えば、クラウドは、1つ以上の特定の顧客もしくはクライアントコンピュータ411~414によって、および/またはプライベートネットワークを介して使用されることになるプライベートクラウドとして構成されてよい。他の実施の形態では、パブリッククラウドまたはハイブリッドパブリックプライベートクラウドが、オープンまたはハイブリッドネットワークを介して他の顧客によって使用されてよい。
管理サーバ410は、クラウドオペレータおよびクラウド顧客がクラウドシステム400と対話し得るユーザインタフェースを提供するように構成されてよい。例えば、管理サーバ410は、アプリケーションプログラミングインタフェース(API)のセットおよび/またはユーザインタフェースを備えた1つ以上のクラウドオペレータコンソールアプリケーション(例えば、ウェブベースまたはスタンドアロンアプリケーション)を提供して、クラウドオペレータがクラウドリソースを管理し、仮想化層を構成し、顧客アカウントを管理し、他のクラウド管理タスクを実行できるようにしてよい。管理サーバ410はまた、クライアントコンピュータ411~414を介してエンドユーザからクラウドコンピューティング要求、例えば、クラウド内で仮想マシンを作成、修正、または破壊する要求を受け取るように構成されたユーザインタフェースを有するAPIのセットおよび/または1つ以上の顧客コンソールアプリケーションを含んでもよい。クライアントコンピュータ411~414は、インターネットまたは他の何らかの通信ネットワークを介して管理サーバ410に接続してよく、管理サーバ410によって管理される1つ以上のコンピューティングリソースへのアクセスを要求してよい。クライアント要求に応答して、管理サーバ410は、クライアント要求に基づいてクラウドシステムのハードウェア層の物理リソースを選択およびプロビジョニングするように構成されたリソースマネージャを含んでよい。例えば、管理サーバ410およびクラウドシステムの追加のコンポーネントは、ネットワーク(例えば、インターネット)を通じてクライアントコンピュータ411~414における顧客に対して、仮想マシンおよびそれらの動作環境(例えば、ハイパーバイザ、ストレージリソース、ネットワーク要素によって供給されるサービス等)をプロビジョニング、作成、および管理するように構成されてもよく、計算リソース、データストレージサービス、ネットワーク機能、並びにコンピュータプラットフォームおよびアプリケーションサポートを顧客に提供する。クラウドシステムはまた、セキュリティシステム、開発環境、ユーザインタフェースなどを含むさまざまな特定のサービスを提供するように構成されてもよい。
ある特定のクライアント411~414は、同じエンドユーザ、または同じ会社もしくは組織に属する異なるユーザのために、仮想マシンを作成する異なるクライアントコンピュータなどに関連付けられてもよい。他の例では、ある特定のクライアント411~414は、異なる会社または組織に属するユーザなど、無関係であってもよい。関連のないクライアントの場合、ある任意のユーザの仮想マシンまたはストレージに関する情報は、他のユーザから隠される場合がある。
ここで、クラウドコンピューティング環境の物理ハードウェア層を参照すると、アベイラビリティゾーン401~402(またはゾーン)は、配列された物理コンピューティングリソースのセットを指す場合がある。ゾーンは、コンピューティングリソースのクラウド全体で他のゾーンから地理的に離れている場合がある。例えば、ゾーン401は、カリフォルニアに位置する第1のクラウドデータセンタであってよく、ゾーン402は、フロリダに位置する第2のクラウドデータセンタであってよい。管理サーバ410は、アベイラビリティゾーンの1つに、または別の場所に配置されてよい。各ゾーンは、ゲートウェイを介して、管理サーバ410等のゾーン外にあるデバイスとインタフェースする内部ネットワークを含むことができる。クラウドのエンドユーザ(例えば、クライアント411~414)は、ゾーン間の違いを認識している場合もあれば認識していない場合もある。例えば、エンドユーザは、指定された量のメモリ、処理能力、およびネットワーク機能を備えた仮想マシンの作成を要求してよい。管理サーバ410は、ユーザの要求に応答してよく、仮想マシンがゾーン401またはゾーン402からのリソースを使用して作成されたか否かをユーザが知ることなく、仮想マシンを作成するためのリソースを割り当ててよい。他の例では、クラウドシステムは、仮想マシン(または他のクラウドリソース)が特定のゾーンまたはゾーン内の特定のリソース403~405に割り当てられることをエンドユーザが要求するのを可能にしてよい。
この例では、各ゾーン401~402は、さまざまな物理ハードウェアコンポーネント(またはコンピューティングリソース)403~405の配置、例えば、物理ホスティングリソース(または処理リソース)、物理ネットワークリソース、物理ストレージリソース、スイッチ、およびクラウドコンピューティングサービスを顧客に提供するために使用し得る追加のハードウェアリソースの配置を含んでよい。クラウドゾーン401~402内の物理ホスティングリソースは、仮想マシンインスタンスを作成およびホストするように構成され得る上記仮想化サーバ301等の1つ以上のコンピュータサーバ403を含んでよい。クラウドゾーン401または402内の物理ネットワークリソースは、ファイアウォール、ネットワークアドレストランスレータ、ロードバランサ、仮想プライベートネットワーク(VPN)ゲートウェイ、動的ホスト構成プロトコル(DHCP)ルータ等、クラウドの顧客にネットワークサービスを提供するように構成されたハードウェアおよび/またはソフトウェアを含む1つ以上のネットワーク要素405(例えば、ネットワークサービスプロバイダ)を含んでよい。クラウドゾーン401~402内のストレージリソースは、ストレージディスク(例えば、ソリッドステートドライブ(SSD)、磁気ハードディスク等)および他のストレージデバイスを含んでよい。
図4に示すクラウドコンピューティング環境の例はまた、仮想マシンを作成および管理し、クラウドの物理リソースを使用して顧客に他のサービスを提供するように構成された追加のハードウェアおよび/またはソフトウェアリソースを備えた(例えば、図1~3に示すような)仮想化層を含んでよい。仮想化層は、図3で前述したように、ネットワーク仮想化、ストレージ仮想化等を提供する他のコンポーネントとともにハイパーバイザを含んでよい。仮想化層は、物理リソース層とは別の層として存在してよい、または同じハードウェアおよび/またはソフトウェアリソースの一部または全てを物理リソース層と共有してよい。例えば、仮想化層は、物理コンピューティングリソースを備えた仮想化サーバ403のそれぞれにインストールされたハイパーバイザを含んでよい。例えば、WINDOWS(登録商標) AZURE(ワシントン州レドモンドMicrosoft Corporation)、AMAZON EC2(ワシントン州シアトルAmazon.com Inc.)、IBM BLUE CLOUD(ニューヨーク州アーモンクIBM Corporation)等、既知のクラウドシステムを代わりに使用してよい。
エンタプライズモビリティ管理アーキテクチャ
図5は、「ブリング・ユア・オウン・デバイス」(BYOD)環境で使用するためのエンタプライズモビリティ技術アーキテクチャ500を表す。このアーキテクチャは、モバイルデバイス502のユーザが、モバイルデバイス502からエンタプライズリソースまたは個人リソースにアクセスすること、および個人使用のためにモバイルデバイス502を使用することの両方を可能にする。ユーザは、ユーザが購入したモバイルデバイス502、または企業がユーザに提供したモバイルデバイス502を使用して、そのようなエンタプライズリソース504またはエンタプライズサービス508にアクセスしてよい。ユーザは、モバイルデバイス502をビジネス用途のみに、またはビジネスおよび個人用途に利用してよい。モバイルデバイス502は、iOSオペレーティングシステム、Android(登録商標)オペレーティングシステム等を実行してよい。企業は、モバイルデバイス502を管理するためのポリシーを実施することを選択してよい。ポリシーは、モバイルデバイス502が識別、セキュリティ保護、またはセキュリティ検証され、エンタプライズリソース(例えば、504および508)への選択的または完全なアクセスが提供されるように、ファイアウォールまたはゲートウェイを介して実施されてよい。ポリシーは、モバイルデバイス管理ポリシー、モバイルアプリケーション管理ポリシー、モバイルデータ管理ポリシー、またはモバイルデバイス、アプリケーション、およびデータの管理ポリシーの何らかの組み合わせであってよい。モバイルデバイス管理ポリシーの適用を通して管理されるモバイルデバイス502は、登録済みデバイスと呼ばれてよい。
一部の実施の形態では、モバイルデバイス502のオペレーティングシステムは、管理対象パーティション510および非管理対象パーティション512に分離されてよい。管理対象パーティション510には、管理対象パーティション510で実行されているアプリケーションと管理対象パーティション510に記憶されているデータをセキュリティ保護するためのポリシーを適用してよい。管理対象パーティション510上で実行されるアプリケーションは、安全なアプリケーションであることができる。他の実施の形態では、全てのアプリケーションは、アプリケーションとは別に受信される1つ以上のポリシーファイルのセットに従って実行してよく、ポリシーファイルは、1つ以上のセキュリティパラメータ、機能、リソース制限、および/またはアプリケーションがモバイルデバイス502で実行されているときにモバイルデバイス管理システムが実施する他のアクセス制御を定義する。それぞれのポリシーファイル(複数可)に従って動作することにより、各アプリケーションは、1つ以上の他のアプリケーションおよび/またはリソースとの通信を許可または制限され、それにより仮想パーティションを作成してよい。したがって、本明細書で使用される場合、パーティションは、メモリの物理的に分割された部分(物理パーティション)、メモリの論理的に分割された部分(論理パーティション)、および/または、1つ以上のポリシーおよび/または本明細書に記載されている複数のアプリケーションにわたるポリシーファイルの実施の結果として作成された仮想パーティション(仮想パーティション)を指してよい。言い換えると、管理対象アプリケーションにポリシーを実施することにより、それらのアプリケーションは、他の管理対象アプリケーションおよび信頼できるエンタプライズリソースとのみ通信できるように制限され、それにより、非管理対象アプリケーションおよびデバイスからアクセスできない仮想パーティションを作成してよい。
安全なアプリケーションは、電子メールアプリケーション、ウェブ閲覧アプリケーション、サービスとしてのソフトウェア(SaaS)アクセスアプリケーション、Windows(登録商標)アプリケーションアクセスアプリケーション等であってよい。安全なアプリケーションは、安全なネイティブアプリケーション514、安全なアプリケーションランチャ518によって実行される安全なリモートアプリケーション522、安全なアプリケーションランチャ518によって実行される仮想化アプリケーション526等であってよい。安全なネイティブアプリケーション514は、安全なアプリケーションラッパー520によってラップされてよい。安全なアプリケーションラッパー520は、安全なネイティブアプリケーション514がモバイルデバイス502上で実行されるときにモバイルデバイス502上で実行される統合ポリシーを含んでよい。安全なアプリケーションラッパー520は、安全なネイティブアプリケーション514の実行時に安全なネイティブアプリケーション514が要求されたタスクを完了するために必要とし得る企業でホストされているリソース(例えば、504および508)にモバイルデバイス502上で実行されている安全なネイティブアプリケーション514を差し向けるメタデータを含んでよい。安全なアプリケーションランチャ518によって実行される安全なリモートアプリケーション522は、安全なアプリケーションランチャ518内で実行されてよい。
安全なアプリケーションランチャ518によって実行される仮想化アプリケーション526は、モバイルデバイス502、エンタプライズリソース504等でリソースを利用してよい。安全なアプリケーションランチャ518によって実行される仮想化アプリケーション526によってモバイルデバイス502上で使用されるリソースは、ユーザ対話リソースおよび処理リソース等を含んでよい。ユーザ対話リソースは、キーボード入力、マウス入力、カメラ入力、触覚入力、音声入力、視覚入力、およびジェスチャ入力等を収集および送信するために使用されてよい。処理リソースは、ユーザインタフェースを提示し、エンタプライズリソース504から受け取ったデータを処理する等のために使用されてよい。安全なアプリケーションランチャ518によって実行される仮想化アプリケーション526によってエンタプライズリソース504において使用されるリソースは、ユーザインタフェース生成リソースおよび処理リソース等を含んでよい。ユーザインタフェース生成リソースは、ユーザインタフェースの組み立て、ユーザインタフェースの修正、ユーザインタフェースのリフレッシュ等に使用されてよい。処理リソースは、情報の作成、情報の読み取り、情報の更新、情報の削除等に使用されてよい。例えば、仮想化アプリケーション526は、グラフィカルユーザインタフェース(GUI)に関連するユーザ対話を記録し、ユーザ対話をサーバアプリケーションに通信し、サーバアプリケーションは、ユーザ対話データをサーバで動作するアプリケーションへの入力として使用する。このような配置では、企業は、サーバ側のアプリケーションと、アプリケーションに関連付けられたデータ、ファイル等とを維持することを選択してよい。
企業は、モバイルデバイス502に展開するためにアプリケーションをセキュリティ保護することにより、本明細書の原理に従って一部のアプリケーションを「モバイル化する」ことを選択してよいが、この配置はある特定のアプリケーションに対して選択されてもよい。例えば、一部のアプリケーションはモバイルデバイス502での使用のためにセキュリティ保護され得るが、他のアプリケーションはモバイルデバイス502での展開に対して準備されていない、または不適切な可能性があるため、企業は仮想化手法を通して、準備なされていないアプリケーションへのモバイルユーザアクセスを提供することを選択してよい。別の例として、企業は、大規模で複雑なデータセットを有する大規模で複雑なアプリケーション(例えば、資材リソース計画アプリケーション)を有している場合があり、この場合、モバイルデバイス502のためにアプリケーションをカスタマイズすることは、非常に難しい、または、望ましくないので、企業は仮想化手法を通したアプリケーションへのアクセスの提供を選択してよい。さらに別の例として、セキュリティ保護されたモバイル環境に対してさえ機密であると企業が見なし得る高度にセキュリティ保護されたデータ(例えば、人事データ、顧客データ、エンジニアリングデータ)を維持するアプリケーションを有する場合があり、よって、企業は、仮想化技術を使用して、そのようなアプリケーションやデータへのモバイルアクセスを許可することを選択してよい。企業は、モバイルデバイス502に完全にセキュリティ保護された完全に機能するアプリケーションと、サーバ側でより適切に操作されると見なされるアプリケーションへのアクセスを可能にする仮想化アプリケーション526との両方を提供することを選択してよい。ある実施の形態では、仮想化アプリケーション526は、一部のデータ、ファイル等をモバイルデバイス502上の安全な記憶場所の1つに記憶してよい。企業は、例えば、他の情報を許可せずに、ある特定の情報をモバイルデバイス502に記憶することを許可することを選択してよい。
本明細書に記載するように、仮想化アプリケーション526に関連して、モバイルデバイス502は、仮想化アプリケーション526を有してよく、仮想化アプリケーション526は、GUIを提示し、次いでユーザのGUIとの対話を記録するように設計される。仮想化アプリケーション526は、サーバ側にユーザ対話を通信してよく、サーバ側アプリケーションはアプリケーションとのユーザ対話としてユーザ対話を使用する。これに応答して、サーバ側のアプリケーションは、新しいGUIをモバイルデバイス502に返信してよい。例えば、新しいGUIは、静的ページ、動的ページ、アニメーション等であってよく、それにより、リモートに配置されたリソースへのアクセスを提供する。
安全なアプリケーション514は、モバイルデバイス502の管理対象パーティション510の安全なデータコンテナ528に記憶されたデータにアクセスしてよい。安全なデータコンテナで保護されたデータは、安全なネイティブアプリケーション514、安全なアプリケーションランチャ518によって実行される安全なリモートアプリケーション522、安全なアプリケーションランチャ518によって実行される仮想化アプリケーション526等によってアクセスされてよい。安全なデータコンテナ528に記憶されたデータは、ファイル、データベース等を含んでよい。安全なデータコンテナ528に記憶されたデータは、特定の安全なアプリケーション530に制限されたデータ、および安全なアプリケーション532の間で共有されたデータ等を含んでよい。安全なアプリケーションに制限されたデータには、安全な一般データ534および高度に安全なデータ538を含んでよい。安全な一般データは、高度暗号化標準(AES)128ビット暗号化等の強力な暗号化形式を使用してよく、高度に安全なデータ538は、AES256ビット暗号化等の非常に強力な暗号化形式を使用してよい。安全なデータコンテナ528に記憶されたデータは、デバイスマネージャ524からコマンドを受け取ると、モバイルデバイス502から削除されてよい。
安全なアプリケーション(例えば、514、522、および526)は、デュアルモードオプション540を有してよい。デュアルモードオプション540は、セキュリティ保護されたアプリケーションを非保護モードまたは非管理モードで操作するオプションをユーザに提示してよい。非保護または非管理モードでは、安全なアプリケーションは、モバイルデバイス502の非管理対象パーティション512上の非保護データコンテナ542に記憶されているデータにアクセスしてよい。非保護データコンテナに記憶されたデータは、個人データ544であってよい。非保護データコンテナ542に記憶されたデータは、モバイルデバイス502の非管理対象パーティション512上で実行されている非保護アプリケーション546によってもアクセスされてよい。非保護データコンテナ542に記憶されたデータは、安全なデータコンテナ528に記憶されたデータがモバイルデバイス502から削除されたとき、モバイルデバイス502上に残ってよい。企業は、ユーザが所有、ライセンス、または制御する個人データ、ファイルおよび/またはアプリケーション(個人データ)を残し、またはその他の方法で保存しながら、企業が所有、ライセンス、または制御する全てのデータ、ファイル、および/またはアプリケーション(企業データ)を選択したモバイルデバイス502から削除したい場合がある。この操作は、選択的ワイプと呼ばれてよい。本明細書で説明される態様に従って配置された企業および個人データにより、企業は選択的ワイプを実行してよい。
モバイルデバイス502は、企業のエンタプライズリソース504およびエンタプライズサービス508に、パブリックインターネット548に等に接続してよい。モバイルデバイス502は、仮想プライベートネットワーク接続を介してエンタプライズリソース504およびエンタプライズサービス508に接続してよい。マイクロVPNまたはアプリケーション固有VPNとも呼ばれる仮想プライベートネットワーク接続は、特定のアプリケーション(マイクロVPN550、特定のデバイス、モバイルデバイスの(O/S VPN552で示されるような)特定のセキュリティ保護された領域等に固有であってよい。例えば、モバイルデバイス502のセキュリティ保護された領域内のラップされたアプリケーションのそれぞれは、アプリケーション固有のVPNを通してエンタプライズリソースにアクセスすることによって、VPNへのアクセスは、おそらくユーザまたはデバイスの属性情報と共に、アプリケーションに関連付けられた属性に基づいて許可されてよい。仮想プライベートネットワーク接続は、Microsoft Exchangeトラフィック、Microsoftアクティブディレクトリトラフィック、ハイパーテキスト転送プロトコル(HTTP)トラフィック、ハイパーテキスト転送プロトコルセキュア(HTTPS)トラフィック、アプリケーション管理トラフィック等を伝送してよい。仮想プライベートネットワーク接続は、シングルサインオン認証プロセス554をサポートおよび有効化してよい。シングルサインオンプロセスは、ユーザが認証証明の単一のセットを提供することを可能にしてよく、次に、認証証明は、認証サービス558によって検証される。次に、認証サービス558は、個々のエンタプライズリソース504の各々に認証証明を提供することをユーザに要求することなく、複数のエンタプライズリソース504へのユーザアクセスを許可してよい。
仮想プライベートネットワーク接続は、アクセスゲートウェイ560によって確立および管理されてよい。アクセスゲートウェイ560は、モバイルデバイス502へのエンタプライズリソース504の配信を管理、加速、および改善するパフォーマンス強化機能を含んでよい。アクセスゲートウェイ560はまた、モバイルデバイス502からパブリックインターネット548にトラフィックを再ルーティングし、モバイルデバイス502がパブリックインターネット548上で実行される公に利用可能なセキュリティ保護されていないアプリケーションにアクセスすることを可能にしてよい。モバイルデバイス502は、トランスポートプロトコルまたはネットワーク562を介してアクセスゲートウェイ560に接続されてもよい。トランスポートネットワーク562は、1つ以上のトランスポートプロトコルを使用してよく、有線ネットワーク、無線ネットワーク、クラウドネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワーク、広域ネットワーク、パブリックネットワーク、およびプライベートネットワーク等であってよい。
エンタプライズリソース504は、電子メールサーバ、ファイル共有サーバ、SaaSアプリケーション、ウェブアプリケーションサーバ、およびWindows(登録商標)アプリケーションサーバ等を含んでよい。電子メールサーバは、Exchangeサーバ、およびLotus Notesサーバ等を含んでよい。ファイル共有サーバは、ShareFileサーバ等を含んでよい。SaaSアプリケーションは、Salesforce等を含んでよい。Windows(登録商標)アプリケーションサーバは、ローカルのWindows(登録商標)オペレーティングシステム等で実行することを目的としたアプリケーションを提供するために構築された任意のアプリケーションサーバを含んでよい。エンタプライズリソース504は、建物ベースのリソース、クラウドベースのリソース等であってよい。エンタプライズリソース504は、モバイルデバイス502によって直接またはアクセスゲートウェイ560を介してアクセスされてよい。エンタプライズリソース504は、トランスポートネットワーク562を介してモバイルデバイス502によってアクセスされてよい。
エンタプライズサービス508は、認証サービス558、脅威検出サービス564、デバイスマネージャサービス524、ファイル共有サービス568、ポリシーマネージャサービス570、ソーシャル統合サービス572、アプリケーションコントローラサービス574等を含んでよい。認証サービス558は、ユーザ認証サービス、デバイス認証サービス、アプリケーション認証サービス、データ認証サービス等を含んでよい。認証サービス558は、証明書を使用してよい。証明書は、モバイルデバイス502に、エンタプライズリソース504によって等で記憶されてよい。モバイルデバイス502に記憶された証明書は、モバイルデバイス502の暗号化された場所に記憶されてよく、証明書は、認証時等に使用するためにモバイルデバイス502に一時的に記憶されてよい。脅威検出サービス564は、侵入検出サービス、不正アクセス試行検出サービス等を含んでよい。不正アクセス試行検出サービスは、デバイス、アプリケーション、データ等への不正アクセス試行を含んでよい。デバイス管理サービス524は、構成、プロビジョニング、セキュリティ、サポート、監視、報告、および廃止措置サービスを含んでよい。ファイル共有サービス568は、ファイル管理サービス、ファイルストレージサービス、ファイルコラボレーションサービス等を含んでよい。ポリシーマネージャサービス570は、デバイスポリシーマネージャサービス、アプリケーションポリシーマネージャサービス、およびデータポリシーマネージャサービス等を含んでよい。ソーシャル統合サービス572は、連絡先統合サービス、コラボレーションサービス、Facebook、Twitter、LinkedIn等のソーシャルネットワークとの統合を含んでよい。アプリケーションコントローラサービス574は、管理サービス、プロビジョニングサービス、デプロイメントサービス、割り当てサービス、失効サービス、ラッピングサービス等を含んでよい。
エンタプライズモビリティ技術アーキテクチャ500は、アプリケーションストア578を含んでよい。アプリケーションストア578は、ラップされていないアプリケーション580、事前にラップされたアプリケーション582等を含んでよい。アプリケーションは、アプリケーションコントローラ574からアプリケーションストア578に取り込まれてよい。アプリケーションストア578は、アクセスゲートウェイ560を介して、パブリックインターネット548等を介して、モバイルデバイス502によってアクセスされてよい。アプリケーションストア578は、直感的で使いやすいユーザインタフェースを備えてよい。
ソフトウェア開発キット584は、この記載で前述したようにアプリケーションをラップすることにより、ユーザが選択したアプリケーションをセキュリティ保護する機能をユーザに提供してよい。ソフトウェア開発キット584を使用してラップされたアプリケーションは、次に、アプリケーションコントローラ574を使用してアプリケーションストア578にそれを取り込むことにより、モバイルデバイス502が利用できるようにされてよい。
エンタプライズモビリティ技術アーキテクチャ500は、管理および分析機能588を含んでよい。管理および分析機能588は、リソースが使用される方法、リソースが使用される頻度等に関連する情報を提供してよい。リソースは、デバイス、アプリケーション、データ等を含んでよい。リソースの使用方法は、どのデバイスがどのアプリケーションをダウンロードするか、およびどのアプリケーションがどのデータにアクセスするか等を含んでよい。リソースが使用される頻度は、アプリケーションがダウンロードされた頻度、アプリケーションが特定のデータセットにアクセスした回数等を含んでよい。
図6は、別の例示的なエンタプライズモビリティ管理システム600である。図5を参照して前述したモビリティ管理システム500の構成要素の一部は、簡単にするために省略されている。図6に示すシステム600のアーキテクチャは、図5を参照して前述したシステム500のアーキテクチャと多くの点で類似しており、前述していない追加機能を含んでよい。
この場合、左側は、クライアントエージェント604を有する登録済みのモバイルデバイス602を表し、クライアントエージェント604は、(アクセスゲートウェイおよびアプリケーションコントローラ機能を含む)ゲートウェイサーバ606と対話して、上記右側に示すように、Exchange、Sharepoint、公開キー基盤(PKI)リソース、Kerberosリソース、証明書発行サービス等のさまざまなエンタプライズリソース608およびサービス609にアクセスする。具体的には示されていないが、モバイルデバイス602は、アプリケーションの選択およびダウンロードのために、エンタプライズアプリケーションストア(ストアフロント)と対話してもよい。
クライアントエージェント604は、高解像度ユーザ体験(HDX)/ICAディスプレイリモートプロトコルを使用してアクセスされる、エンタプライズデータセンタにおいてホストされるWindows(登録商標)アプリケーション/デスクトップについてのUI(ユーザインタフェース)手段としての役割を果たす。クライアントエージェント604はまた、ネイティブのiOSまたはAndroid(登録商標)アプリケーション等、モバイルデバイス602上のネイティブアプリケーションのインストールおよび管理をサポートする。例えば、上の図に示されている管理対象アプリケーション610(メール、ブラウザ、ラップされたアプリケーション)は全て、モバイルデバイス602でローカルに実行されるネイティブアプリケーションである。このアーキテクチャのクライアントエージェント604およびアプリケーション管理フレームワークは、エンタプライズリソース/サービス608に接続性やSSO(シングルサインオン)等のポリシー駆動管理機能や特徴を提供するように機能する。クライアントエージェント604は、企業に、通常は他のゲートウェイサーバコンポーネントへのSSOを用いてアクセスゲートウェイ(AG)606への一次ユーザ認証を処理する。クライアントエージェント604は、モバイルデバイス602上の管理対象アプリケーション610の挙動を制御するポリシーをゲートウェイサーバ606から取得する。
ネイティブアプリケーション610とクライアントエージェント604の間の安全なプロセス間通信(IPC)リンク612は、管理チャネルを表し、管理チャネルは、各アプリケーションを「ラッピング」するアプリケーション管理フレームワーク614が施行するポリシーを、クライアントエージェントが提供するのを可能にし得る。IPCチャネル612はまた、クライアントエージェント604が、エンタプライズリソース608への接続性およびSSOを有効にする資格情報および認証情報を供給することを可能にし得る。最後に、IPCチャネル612は、アプリケーション管理フレームワーク614が、オンラインおよびオフライン認証等のクライアントエージェント604によって実装されるユーザインタフェース機能を呼び出すことを可能にし得る。
クライアントエージェント604とゲートウェイサーバ606の間の通信は、本質的に、各ネイティブ管理アプリケーション610をラップするアプリケーション管理フレームワーク614からの管理チャネルの拡張である。アプリケーション管理フレームワーク614は、クライアントエージェント604にポリシー情報を要求してよく、クライアントエージェント604は次に、ゲートウェイサーバ606にポリシー情報を要求してよい。アプリケーション管理フレームワーク614は認証を要求してよく、クライアントエージェント604はゲートウェイサーバ606(NETSCALER ACCESS GATEWAYとしても知られている)のゲートウェイサービス部分にログインしてよい。クライアントエージェント604はまた、ゲートウェイサーバ606のサポートサービスを呼び出してよく、これにより、ローカルデータボールト616の暗号化キーを導出するための入力資料を生成してよい、または、PKI保護リソースへの直接認証を有効にし得るクライアント証明書を提供してよい。これについては、下記でより詳細に説明する。
より詳細には、アプリケーション管理フレームワーク614は、各管理対象アプリケーション610を「ラップ」する。これは、明示的なビルドステップまたは、またはポストビルド処理ステップを介して組み込まれてよい。アプリケーション管理フレームワーク614は、アプリケーション610の最初の起動時にクライアントエージェント604と「ペアリング」して、安全なIPCチャネル612を初期化し、そのアプリケーションのポリシーを取得してよい。アプリケーション管理フレームワーク614は、ローカルOSサービスの使用方法、または管理対象アプリケーション610との対話方法を制限するクライアントエージェントのログイン依存関係や封じ込めポリシーの一部等、ローカルに適用するポリシーの関連部分を実施してよい。
アプリケーション管理フレームワーク614は、認証および内部ネットワークアクセスを容易にするために、安全なIPCチャネル612を介してクライアントエージェント604によって提供されるサービスを使用してよい。プライベートおよび共有データボールト616(コンテナ)のキー管理は、管理対象アプリケーション610とクライアントエージェント604の間の適切な対話によって管理されてもよい。ボールト616は、オンライン認証後にのみ利用可能であってよく、またはポリシーによって許可される場合はオフライン認証後に利用可能にされてよい。ボールト616の最初の使用は、オンライン認証を必要とすることがあり、オフラインアクセスは、最大でも、オンライン認証が再度必要とされる前のポリシーリフレッシュ期間に制限されてよい。
内部リソースへのネットワークアクセスは、アクセスゲートウェイ606を介して、個々の管理対象アプリケーション610から直接発生する場合がある。アプリケーション管理フレームワーク614は、各管理対象アプリケーション610に代わってネットワークアクセスのオーケストレーションを担当してよい。クライアントエージェント604は、オンライン認証に続いて得られる適切な時間制限のある二次的な資格情報を提供することにより、これらのネットワーク接続を促進してよい。リバースウェブプロキシ接続やエンドツーエンドVPNスタイルのトンネル618等、ネットワーク接続の複数のモードを使用してよい。
メールおよびブラウザ管理対象アプリケーション610には特別なステータスがあり、任意のラップされたアプリケーションでは一般に利用できない機能を使用してよい。例えば、メールアプリケーション610は、完全なAGログオンを必要とせずに長期間にわたってExchangeサーバ608にアクセスすることを可能にする特別なバックグラウンドネットワークアクセスメカニズムを使用してよい。ブラウザアプリケーション610は、複数のプライベートデータボールト616を使用して、異なる種類のデータを分離してよい。
このアーキテクチャは、他のさまざまなセキュリティ機能の組み込みをサポートしてよい。例えば、ゲートウェイサーバ606(そのゲートウェイサービスを含む)は、場合によっては、アクティブディレクトリ(AD)パスワードを検証する必要がない場合がある。ADパスワードを一部の状況で一部のユーザの認証要素として使用し得るか否かは、企業の裁量に任せることができる。ユーザがオンラインまたはオフライン(つまり、ネットワークに接続されている、または、接続されていない)場合、異なる認証方法を使用してよい。
ステップアップ認証は、ゲートウェイサーバ606が、強力な認証を必要とする機密性の高いデータへのアクセスを許可されている管理対象ネイティブアプリケーション610を識別し、その前のより弱いレベルのログインの後、ユーザによる再認証が必要とされることを意味する場合でさえ、これらのアプリケーションへのアクセスが適切な認証の実行後にのみ許可されることを確実にする機能である。
この解決法の別のセキュリティ機能は、モバイルデバイス602上のデータボールト616(コンテナ)の暗号化である。ボールト616は、ファイル、データベース、および構成を含む全てのオンデバイスデータが保護されるように暗号化されてよい。オンラインボールトの場合、キーはサーバ(ゲートウェイサーバ606)に記憶されてよく、オフラインボールトの場合、キーのローカルコピーがユーザパスワードまたは生体認証によって保護されてよい。安全なコンテナ616内のモバイルデバイス602にローカルにデータが記憶されている場合またはその時、最低でもAES256暗号化アルゴリズムが利用されることが好ましい場合がある。
他の安全なコンテナ機能も実施されてよい。例えば、ロギング機能が含まれてもよく、この場合、管理対象アプリケーション610の内部で発生するセキュリティイベントがロギングされ、バックエンドに報告されてよい。管理対象アプリケーション610が改ざんを検出した場合またはその時など、データワイプがサポートされてよく、関連する暗号化キーがランダムなデータで上書きされてよく、ユーザデータが破壊されたというヒントがファイルシステムに残らないようにする。スクリーンショット保護は別の機能であってよく、アプリケーションがスクリーンショットにデータが記憶されるのを防いでよい。例えば、キーウィンドウの非表示プロパティがYESに設定されてよい。これにより、画面に現在表示されているあらゆるコンテンツが隠され、通常はコンテンツが存在しているスクリーンショットが空白にされる。
アプリケーションコンテナの外部にローカルにデータが転送されるのを防止することによって、例えば、データをコピーし、またはデータを外部アプリケーションに送信することによって等の、ローカルデータ転送を防止することができる。キーボードキャッシュ機能が動作して、機密性の高いテキストフィールドの自動修正機能を無効にしてよい。SSL証明書の検証が機能し得るので、アプリケーションは、サーバのSSL証明書をキーチェーンに記憶せずに、詳細に検証する。(オフラインアクセスが要求される場合)モバイルデバイス602でデータの暗号化に使用されるキーを、ユーザが提供するパスフレーズまたはバイオメトリックデータを使用して生成するように暗号化キー生成機能を使用してよい。オフラインアクセスが要求されない場合、サーバ側でランダムに生成され、記憶された別のキーでXORされてよい。キー導出関数は、ユーザパスワードから生成されたキーが、キーの暗号学的ハッシュを作成するのではなく、KDF(キー導出関数、特にパスワードベースのキー導出関数2(PBKDF2))を使用するように動作してよい。キーの暗号学的ハッシュ作成では、キーは、ブルートフォース攻撃や辞書攻撃の影響を受けやすくなる。
さらに、1つ以上の初期化ベクトルが、暗号化方法で使用されてよい。初期化ベクトルにより、同じ暗号化データの複数のコピーが異なる暗号文出力を生成し、再生攻撃と暗号解読攻撃の両方を防ぐ。これはまた、暗号化キーが盗まれた場合でも、攻撃者がデータを解読するのを防ぐ。さらに、認証、次に、解読を使用してよく、アプリケーションデータは、ユーザがアプリケーション内で認証された後にのみ解読される。別の機能は、メモリ内の機密データに関連してよく、機密データは、必要な時にのみ(ディスクではなく)メモリに保存されてよい。例えば、ログイン認証情報は、ログイン後にメモリからワイプされてよく、Objective-Cインスタンス変数内の暗号化キーや他のデータは、簡単に参照され得るので、記憶されない。代わりに、これらに手動でメモリを割り当ててよい。
非活動タイムアウトが実施されてよく、ポリシー定義された非活動期間の後、ユーザセッションが終結される。
アプリケーション管理フレームワーク614からのデータ漏洩は、他の方法で防ぎ得る。例えば、管理対象アプリケーション610がバックグラウンドに置かれた場合またはその時、メモリは、所定の(設定可能な)期間の後に消去されてよい。バックグラウンド化する時、アプリケーションの最後に表示された画面のスナップショットを取得して、フォアグラウンド化プロセスを強化してよい。スクリーンショットは機密データを含む可能性があるため、消去されるべきである。
別のセキュリティ機能は、1つ以上のアプリケーションにアクセスするためのAD(アクティブディレクトリ)622パスワードを使用せずに、OTP(ワンタイムパスワード)620を使用することに関連してよい。場合によっては、一部のユーザは自分のADパスワードを知らない(または知ることを許可されない)ため、これらのユーザはSecurIDなどのハードウェアOTPシステムを使用するなど、OTP620を使用して認証してよい(OTPは、EntrustやGemalto等、さまざまなベンダによって提供されてよい)。場合によっては、ユーザがユーザIDを用いて認証した後、OTP620を有するユーザにテキストが送信されてよい。場合によっては、これはオンラインでの使用にのみ実施されてよく、プロンプトは単一のフィールドである。
オフラインでの使用がエンタプライズポリシーによって許可されている管理対象アプリケーション610のオフライン認証用にオフラインパスワードが実施されてよい。例えば、企業はこの方法でストアフロントにアクセスしたい場合がある。この場合、クライアントエージェント604は、ユーザにカスタムオフラインパスワードを設定するように要求してよく、ADパスワードは使用されない。ゲートウェイサーバ606は、標準のWindows(登録商標)サーバのパスワードの複雑性要件等で記載されているように、パスワードの最小長、文字クラス構成、および経過時間に関してパスワード標準を制御および適用するポリシーを提供し得るが、これらの要件は修正されてよい。
別の機能は、(アプリケーション管理フレームワークのマイクロVPN機能を介してPKIで保護されたウェブリソースにアクセスするために)二次資格情報としてある特定のアプリケーション610のクライアント側証明書の有効化に関連してよい。例えば、管理対象アプリケーション610は、そのような証明書を利用してよい。この場合、ActiveSyncプロトコルを使用した証明書ベースの認証がサポートされてよく、クライアントエージェント604からの証明書がゲートウェイサーバ606によって読み出され、キーチェーンで使用されてよい。各管理対象アプリケーション610は、ゲートウェイサーバ606で定義されたラベルによって識別される1つの関連付けられたクライアント証明書を有してよい。
ゲートウェイサーバ606は、企業の専用ウェブサービスと対話して、クライアント証明書の発行をサポートし、関連する管理対象アプリケーションが内部PKI保護リソースを認証できるようにしてよい。
クライアントエージェント604およびアプリケーション管理フレームワーク614は、内部PKI保護ネットワークリソースに対する認証のためのクライアント証明書の取得および使用をサポートするように強化されてよい。さまざまなレベルのセキュリティおよび/または分離要件に合わせる等のために、複数の証明書がサポートされてよい。証明書は、メールおよびブラウザ管理対象アプリケーション610によって使用されてよく、最終的には任意のラップされたアプリケーション610によって使用されてよい(これらのアプリケーションが、アプリケーション管理フレームワークがHTTPS要求を仲介することが妥当なウェブサービススタイルの通信パターンを使用することを条件として)。
iOSでのアプリケーション管理クライアント証明書のサポートは、公開キー暗号規格(PKCS)12BLOB(バイナリラージオブジェクト)を、使用期間ごとに各管理対象アプリケーション610のiOSキーチェーンにインポートすることに依存してよい。アプリケーション管理フレームワークのクライアント証明書のサポートでは、プライベートインメモリキーストレージを備えたHTTPS実施を使用してよい。クライアント証明書はiOSキーチェーンに存在しない場合があり、強力に保護された「オンラインのみ」のデータ値に潜在的に存在する場合を除いて保持されない場合がある。
相互SSLまたはTLSを実施して、モバイルデバイス602が企業に対して認証されること、または、その逆を要求することにより、追加のセキュリティを提供してもよい。ゲートウェイサーバ606に対する認証のための仮想スマートカードも実施されてよい。
制限付きおよび完全なKerberosサポートの両方が追加機能であってよい。完全サポート機能は、ADパスワードまたは信頼されるクライアント認証情報を使用してアクティブディレクトリ(AD)622への完全なKerberosログインを実行し、HTTPネゴシエート認証チャレンジに応答するためのKerberosサービスチケットを取得する能力に関連する。制限付きサポート機能はCitrixのAGEE(Access Gateway Enterprise Edition)の制約付き委任に関連し、AGEEはKerberosプロトコル遷移の呼び出しをサポートしているため、HTTPネゴシエート認証チャレンジに応答してKerberosサービスチケット(制約付き委任の対象)を取得して使用できる。このメカニズムは、リバースウェブプロキシ(別名、企業仮想プライベートネットワーク(CVPN))モードで、並びに、HTTP(HTTPSではない)接続がVPNおよびマイクロVPNモードでプロキシされる場合に機能する。
別の機能は、アプリケーションコンテナのロックおよびワイプに関連してよく、アプリケーションコンテナのロックおよびワイプは、ジェイルブレイクまたはルート化の検出時に自動的に発生し、管理コンソールからのプッシュコマンドとして発生する場合があり、管理対象アプリケーション610が実行されていない場合でもリモートワイプ機能を含んでよい。
エンタプライズアプリケーションストアとアプリケーションコントローラのマルチサイトアーキテクチャまたは構成がサポートされて、障害が発生した場合に幾つかの異なる場所の1つからユーザにサービスを提供するのを可能にしてよい。
場合によっては、管理対象アプリケーション610は、API(例えば、オープンSSL)を介して証明書と秘密キーにアクセスを許可されてよい。企業の信頼できる管理対象アプリケーション610は、アプリケーションのクライアント証明書と秘密キーを使用して特定の公開キー操作を実行することを許可されてよい。アプリケーションがブラウザのように振舞い、証明書アクセスが不要な場合またはその時、アプリケーションが「私は誰であるか」の証明書を読み取る場合またはその時、アプリケーションが証明書を使用して安全なセッショントークンを構築する場合またはその時、並びに、アプリケーションが重要なデータ(例えば、トランザクションログ)のデジタル署名または一時的なデータ暗号化に秘密キーを使用する場合またはその時など、さまざまな使用例が識別され、それに従って処理されてよい。
仮想デスクトップのための自動キーボードマッピング
図7Aおよび7Bは、1つ以上の例示的な実施の形態による、仮想デスクトップのための自動キーボードマッピングを実行するように構成される例示的なコンピューティング環境を示す。図7Aを参照して、コンピューティング環境700は、1つ以上のコンピュータシステムを含むことができる。例えば、コンピューティング環境700は、キーボードマッピングテストプラットフォーム702およびリモートデスクトップホストプラットフォーム703を含むことができる。
以下により詳細に示されるように、キーボードマッピングテストプラットフォーム702は、本明細書で説明される機能のうちの1つ以上を実行するように構成される1つ以上のコンピューティングデバイスを含むことができる。例えば、キーボードマッピングテストプラットフォーム702は、1つ以上のコンピュータ(例えば、ラップトップコンピュータ、デスクトップコンピュータ、サーバ、サーバブレードなど)を含むことができる。1つ以上の例では、キーボードマッピングテストプラットフォーム702は、パーソナルコンピューティングデバイス(例えば、携帯電話、タブレット、ラップトップコンピュータ、デスクトップコンピュータなど)であることができる。場合によっては、キーボードマッピングテストプラットフォーム702は、キーボードマッピングテスト自動化スクリプトを生成して実施し、1つ以上のテストシナリオでのキーボードマッピングを検証することができ、誤りがあると決定されるあらゆるキーボードマッピングの自動訂正を引き起こすことができる。
リモートデスクトップホストプラットフォーム703は、1つ以上のコンピューティングデバイスおよび/または他のコンピュータコンポーネント(例えば、プロセッサ、メモリ、通信インタフェース)を含むコンピュータシステムであることができる。1つ以上の例では、リモートデスクトップホストプラットフォーム703は、キーボードマッピングテストプラットフォーム702によってアクセスすることができる仮想デスクトップ/アプリケーションをホストするように構成される1つ以上のサーバに対応する。さらに、リモートデスクトップホストプラットフォーム703は、キーボードマッピングテスト自動化スクリプトを実施し、キーボードマッピングテストプラットフォーム702によって実行される1つ以上のテストシナリオに対応する出力を引き起こすように構成することができる。
また、コンピューティング環境700は、キーボードマッピングテストプラットフォーム702とリモートデスクトップホストプラットフォーム703とを相互接続することができる1つ以上のネットワークを含むことができる。例えば、コンピューティング環境700は、有線または無線ネットワーク701(例えば、キーボードマッピングテストプラットフォーム702とリモートデスクトップホストプラットフォーム703とを相互接続することができる)を含むことができる。
1つ以上の配置では、キーボードマッピングテストプラットフォーム702、リモートデスクトップホストプラットフォーム703、および/またはコンピューティング環境700に含まれるその他のシステムは、任意のタイプのコンピューティングデバイスであることができ、ユーザインタフェース(例えば、ブラウザインタフェース、仮想デスクトップインタフェースなど)を受け取ること、ユーザインタフェースを介して入力を受け取ること、およびこの受け取った入力を1つ以上の他のコンピューティングデバイスに通信することができる。例えば、キーボードマッピングテストプラットフォーム702、リモートデスクトップホストプラットフォーム703、および/またはコンピューティング環境700に含まれるその他のシステムは、場合によっては、サーバコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォンなどであることができ、および/またはこれらを含むことができ、これらは、1つ以上のプロセッサ、メモリ、通信インタフェース、ストレージデバイス、および/または他のコンポーネントを含むことができる。上記のように、そして以下により詳細に示されるように、キーボードマッピングテストプラットフォーム702およびリモートデスクトップホストプラットフォーム703のいずれかおよび/またはすべては、場合によっては、特定の機能を実行するように構成される専用コンピューティングデバイスであることができる。
図7Bを参照して、キーボードマッピングテストプラットフォーム702は、1つ以上のプロセッサ711、メモリ712、および通信インタフェース713を含むことができる。データバスが、プロセッサ711、メモリ712、および通信インタフェース713を相互接続することができる。通信インタフェース713は、ネットワークインタフェースであり、キーボードマッピングテストプラットフォーム702と1つ以上のネットワーク(例えば、ネットワーク701など)との間の通信をサポートするように構成することができる。メモリ712は、命令を有する1つ以上のプログラムモジュールを含むことができ、これらの命令は、プロセッサ711によって実行されると、キーボードマッピングテストプラットフォーム702に、本明細書に記載の1つ以上の機能を実行する、および/またはそれらのようなプログラムモジュールおよび/またはプロセッサ711によって使用することができる情報を格納する、および/またはその他の方法により維持することができる1つ以上のデータベースにアクセスすることを行わせる。
場合によっては、1つ以上のプログラムモジュールおよび/またはデータベースは、キーボードマッピングテストプラットフォーム702の異なるメモリユニットによって格納することができる、および/またはこれらの異なるメモリユニットに維持することができる、および/または異なるコンピューティングデバイスによって格納することができる。これらの異なるコンピューティングデバイスは、キーボードマッピングテストプラットフォーム702を形成する、および/またはその他の方法により作り上げることができる。例えば、メモリ712は、キーボードマッピングテストモジュール712a、キーボードマッピングテストデータベース712b、および機械学習エンジン712cを有する、ホストする、格納する、および/または含むことができる。キーボードマッピングテストモジュール712aは、命令を含むことができ、これらの命令は、より詳細に以下で議論されるように、キーボードマッピングテストプラットフォーム702に、キーボードマッピングテーブルをテストし、訂正するための高度な技法を実行することを指示する、および/またはそれを行わせる(例えば、ローカルに、そして仮想デスクトップで、キーボード出力を生成し、プラットフォーム702および703の出力を比較し、プラットフォーム702および703の出力の不一致を自動的に訂正することによって)。キーボードマッピングテストデータベース712bは、キーボードマッピングを訂正する際に、および/または他の機能を実行する際に、キーボードマッピングテストモジュール712aおよび/またはキーボードマッピングテストプラットフォーム702によって使用される情報を格納することができる。機械学習エンジン712cは、命令を含むことができ、これらの命令は、キーボードマッピングテストプラットフォーム702に、ローカルおよび仮想デスクトップのキーボード出力の比較を実行することと、キーボードマッピングテストプラットフォーム701によって、および/またはコンピューティング環境700中の他のシステムによって使用される、最適化ルールおよび/または他のパラメータを設定する、定義する、および/または繰り返し洗練することとを指示する、および/またはそれを行わせる。1つ以上の例では、最適化ルールを洗練する際に、機械学習エンジン712cは、キーボードマッピングテストプラットフォーム702に、ローカルおよび仮想デスクトップのキーボード出力を比較するために使用することができる機械学習アルゴリズムおよびデータセットを洗練させることができる。
図8A~図8Bは、1つ以上の例示的な実施の形態による、仮想デスクトップのための自動キーボードマッピングを実行する、強化処理システムを展開する例示的なイベントシーケンスを示す。便宜上、ステップ801~818は、図8A~図8Bにまたがって示されている。ただし、ステップ801~818が単一のイベントシーケンスを表すことを理解されたい(例えば、図8Bのステップ812は、図8Aのステップ811に続くことができる)。図8Aを参照して、ステップ801では、キーボードマッピングテストプラットフォーム702は、キーボードマッピングテーブルを生成することができる。1つ以上の例では、キーボードマッピングテーブルは、さまざまな動作条件について、キーボード入力値をキーボード出力値にマッピングするための手段であることができる。1つ以上の例では、キーボードマッピングテーブルを生成する際に、キーボードマッピングテストプラットフォーム702は、入力としてオペレーティングシステムタイプ、ブラウザタイプ、キーボードモード(例えば、中国語、日本語、米国など)、キーボード入力、または同様のものを含むテーブルをコンパイルすることができる。本開示は、主にキーボード入力を単一のキー入力(例えば、単一の文字)として参照するが、本開示が個々のキーに加えて、マルチキーの組み合わせ、コマンドなどに適用されることを理解されたい。これらの例では、キーボードマッピングテストプラットフォーム702は、入力に対応する独立コンピューティングアーキテクチャ(ICA)値に対応するテーブルの出力を含むことができる。キーボードマッピングテーブルを生成する際に、キーボードマッピングテストプラットフォーム702は、図10Bに示される、キーボードマッピングテーブル1015と同様のテーブルを生成することができる。キーボードマッピングテーブル1015は、キーボードマッピングテストプラットフォーム702が、ブラウザとしてGOOGLEによるCHROME(商標)を使用し、そして日本語キーボードを使用して、MICROSOFTによるWINDOWS(登録商標)10を実行している場合を示す。キーボードマッピングテストプラットフォーム702に対応するキーボード上で「a」キーを押す場合、97のICA値を出力して、ローカルブラウザに、および/またはキーボードマッピングテストプラットフォーム702で実行している仮想デスクトップに「a」の表示を引き起こす必要がある。場合によっては、キーボードマッピングテーブルは、1つより多い行の入力および対応する出力に対応することができる。例えば、キーボードマッピングテーブルは、テストされるすべてのキー入力シナリオに対応することができる。1つ以上の例では、キーボードマッピングテストプラットフォーム702は、受け取ったユーザ入力に基づいてキーボードマッピングテーブルを生成することができる。追加で、または代替に、キーボードマッピングテストプラットフォーム702は、可能性のあるキー入力シナリオに基づいてキーボードマッピングテーブルを自動的に生成することができる。例えば、GOOGLEによるCHROME(商標)およびMICROSOFTによるINTERNET EXPLORER(商標)の両方がキーボードマッピングテストプラットフォーム702にインストールされている場合、キーボードマッピングテストプラットフォーム702は、両方のブラウザに対応するキー入力シナリオを含むキーボードマッピングテーブルを自動的に生成することができる。
ステップ802では、キーボードマッピングテストプラットフォーム702は、ソフトウェアコンポーネント(オペレーティングシステム、ブラウザ、キーボードモードなど)または情報(オペレーティングシステム、ブラウザ、キーボードモードなどを識別する情報)などの1つ以上の入力を受け取ることができ、これらの入力は、さまざまなキーボード入力シナリオをテストするようにキーボードマッピングテストプラットフォーム702を設定するためにインストールされる必要がある。1つ以上の例では、1つ以上の入力は、ステップ801で生成されるキーボードマッピングテーブルに対応することができる。例えば、1つ以上の入力は、キーボードマッピングテーブルで指定される条件下でキーボード入力をシミュレートするために、キーボードマッピングテストプラットフォーム702にインストールされる、オペレーティングシステム、ブラウザなどのソフトウェアコンポーネントに関する情報であることができる。1つ以上の例では、1つ以上の入力は、ソフトウェアコンポーネント自体であることができる。1つ以上の例では、キーボードマッピングテストプラットフォーム702は、キーボードマッピングテーブルに基づいて1つ以上の入力を自動的に取得することができる。1つ以上の例では、キーボードマッピングテストプラットフォームは、リモートデスクトップホストプラットフォーム703から1つ以上の入力を取得することができる。追加で、または代替に、キーボードマッピングテストプラットフォーム702は、1つ以上の入力をユーザ入力として受け取ることができる。
ステップ803では、キーボードマッピングテストプラットフォーム702は、キーボードマッピングテスト自動化スクリプトを生成することができる。1つ以上の例では、キーボードマッピングテストプラットフォーム702は、入力としてステップ801で生成されたキーボードマッピングテーブル、キーボードマッピングテストプラットフォーム702に対応するインターネットプロトコル、ユーザ名、パスワード、または同様のものにアクセスすることによって、キーボードマッピングテスト自動化スクリプトを生成することができる。これらの例では、キーボードマッピングテストプラットフォーム702は、スクリプトを生成することができ、このスクリプトは、実施されると、キーボードマッピングテストプラットフォーム702に、キーボードマッピングテーブルでのキー入力シナリオに対応するICA値を出力することを行わせることができる。
ステップ804では、キーボードマッピングテストプラットフォーム702は、ステップ803で生成されたキーボードマッピングテスト自動化スクリプトを開始することができる。キーボードマッピングテスト自動化スクリプトを開始することにより、キーボードマッピングテストプラットフォーム702は、以下でさらに詳細に説明される、ステップ805~816を実行することができる。1つ以上の例では、キーボードマッピングテストプラットフォーム702は、ユーザ入力を受け取ることに応答して、キーボードマッピングテスト自動化スクリプトを開始することができる。追加で、または代替に、キーボードマッピングテストプラットフォーム702は、所定の間隔(例えば、月に1回)で、または新しいソフトウェアコンポーネントがインストールされた(例えば、日本語キーボードがインストールされた)と決定したときに、キーボードマッピングテスト自動化スクリプトを自動的に開始することができる。
ステップ805では、キーボードマッピングテストプラットフォーム702は、テスト環境を作成することができる。1つ以上の例では、テスト環境を作成する際に、キーボードマッピングテストプラットフォーム702は、ステップ802で受け取った1つ以上の入力をインストールすることができる。例えば、キーボードマッピングテストプラットフォーム702は、1つ以上の入力によって示される任意のオペレーティングシステム、ブラウザ、キーボードなどをインストールすることができる。ステップ802で受け取る入力がソフトウェアコンポーネントに対応する(ソフトウェアコンポーネント自体ではなく)情報である場合には、キーボードマッピングテストプラットフォーム702は、この情報に示されるソフトウェアコンポーネントをダウンロードすることができる。
ステップ806では、キーボードマッピングテストプラットフォーム702は、リモートデスクトップホストプラットフォーム703との接続を確立することによって、テスト環境を作成し続けることができる。1つ以上の例では、キーボードマッピングテストプラットフォーム702は、リモートデスクトップホストプラットフォーム703との無線データ接続を確立して、キーボードマッピングテストプラットフォーム702をリモートデスクトップホストプラットフォーム703にリンクすることができる。リモートデスクトップホストプラットフォーム703との接続を確立する際に、キーボードマッピングテストプラットフォーム702は、リモートデスクトップホストプラットフォーム703との接続を確立することができる。このリモートデスクトップホストプラットフォーム703は、1つ以上の入力を実行することが可能である仮想デスクトップをホストするように設定することができる。例えば、リモートデスクトップホストプラットフォーム703は、キーボードマッピングテストプラットフォーム702および/またはローカルクライアントデバイスと同じオペレーティングシステム、ブラウザ、キーボード、または同様のものを実行することが可能である仮想デスクトップをホストするように設定することができる。1つ以上の例では、キーボードマッピングテストプラットフォーム702は、リモートデスクトッププロトコル(RDP)を使用して、リモートデスクトップホストプラットフォーム703との接続を確立することができる。
ステップ807では、キーボードマッピングテストプラットフォーム702は、リモートデスクトップホストプラットフォーム703に、プラットフォーム702で受け取ったキーボード入力をシミュレートするように指示する1つ以上のコマンドを生成して送信することができる。1つ以上の例では、1つ以上のコマンドを送信する際に、キーボードマッピングテストプラットフォーム702は、キーボード入力に対応するICA値をリモートデスクトップホストプラットフォーム703に送信することができる。1つ以上の例では、キーボードマッピングテストプラットフォーム702は、リモートデスクトップホストプラットフォーム703に、通信インタフェース713を介して、そして無線データ接続が確立されている間に、プラットフォーム702で受け取ったキーボード入力をシミュレートするように指示する1つ以上のコマンドを送信することができる。1つ以上の例では、キーボード入力をシミュレートするようにリモートデスクトップホストプラットフォーム703に指示する1つ以上のコマンドは、まだシミュレートされていないキーボードマッピングテーブルからのキーボード入力をシミュレートするようにリモートデスクトップホストプラットフォーム703に指示することができる。例えば、キーボードマッピングテーブルは、複数のキーボード入力(例えば、a、b、cなど)を含むことができる。第1のキーボード入力(例えば、a)をシミュレートした後、キーボードマッピングテストプラットフォーム702は、リモートデスクトップホストプラットフォーム703に、まだシミュレートされていない第2のキーボード入力(例えば、b)をシミュレートするように指示する1つ以上のコマンドを送信することができる。場合によっては、キーボードマッピングテストプラットフォーム702は、リモートデスクトップホストプラットフォーム703に、複数キーのコマンド(例えば、ctrl+vなど)をシミュレートするように指示する1つ以上のコマンドを送信することができる。これらの例では、キーボードマッピングテストプラットフォーム702は、第2のキー(例えば、v)が押されるときに第1のキー(例えば、ctrl)が押されていると決定することに応答して、1つ以上のコマンドをリモートデスクトップホストプラットフォーム703に送信することができる。
ステップ808では、リモートデスクトップホストプラットフォーム703は、キーボードマッピングテストプラットフォーム702で受け取ったキーボード入力をシミュレートするようにリモートデスクトップホストプラットフォーム703に指示する1つ以上のコマンドを受け取ることができる。1つ以上の例では、リモートデスクトップホストプラットフォーム703は、無線データ接続が確立されている間にキーボード入力をシミュレートするようにリモートデスクトップホストプラットフォーム703に指示する1つ以上のコマンドを受け取ることができる。これらの例では、リモートデスクトップホストプラットフォーム703は、ICA値を受け取ることができ、ローカルに格納されたキーボードマッピングテーブルのコピーを使用して、ICA値に対応するキーを決定するルックアップ機能を実行することができる。
ステップ809では、キーボードマッピングテストプラットフォーム702およびリモートデスクトップホストプラットフォーム703は、キーボード入力をシミュレートすることができる。場合によっては、キーボード入力をシミュレートすることによって、キーボードマッピングテストプラットフォーム702およびリモートデスクトップホストプラットフォーム703は、それぞれ、キーボード入力に対応する出力を表示する、またはその他の方法により処理することができる。キーボード入力をシミュレートする際に、キーボードマッピングテストプラットフォーム702は、キーボードマッピングテストプラットフォーム702におけるテストプログラム(例えば、テキストエディタ)を使用して、キーボード入力によって指定された特定のキー、キーの組み合わせ、キーコマンドなどをシミュレートし、出力を生成することができる。例えば、キーボードマッピングテストプラットフォーム702は、文字「a」キーに対応するキーボード入力をシミュレートして、キーボードマッピングテストプラットフォーム702に「a」の出力をもたらすことができる。
キーボード入力をシミュレートする際に、リモートデスクトップホストプラットフォーム703は、リモートデスクトップホストプラットフォーム703におけるテストプログラム(例えば、テキストエディタ)を使用して、キーボードマッピングテストプラットフォーム702によってシミュレートされる(例えば、ステップ808で受け取ったICA値に基づいて)ものと同じキー、キーの組み合わせ、キーコマンド、または同様のものをシミュレートすることで、キーボードマッピングテストプラットフォーム702に、または仮想デスクトップインタフェースを介して別のローカルコンピューティングデバイスに出力をもたらすことができる。例えば、リモートデスクトップホストプラットフォーム703は、文字「a」キーに対応するキーボード入力もシミュレートすることができ、このシミュレーションに基づいて出力を生成することができる。
ステップ810では、キーボードマッピングテストプラットフォーム702は、ローカルディスプレイおよび仮想デスクトップインタフェースに出力することができ、これらのそれぞれは、キーボードシミュレーション出力を含むことができる。これらのキーボードシミュレーション出力は、ステップ809において、キーボードマッピングテストプラットフォーム702およびリモートデスクトップホストプラットフォーム703でのそれぞれのキーボード入力のシミュレーションによって生成することができる。例えば、キーボード入力が文字「a」キーに対応する場合、キーボードマッピングテストプラットフォーム702は、文字「a」キーからの入力に対応するキーボードシミュレーション出力をテキストエディタに表示させることができる(例えば、キーボードマッピングテストプラットフォーム702はテキストエディタに文字「a」を表示することができる)。キーボードシミュレーション出力を出力する際に、キーボードマッピングテストプラットフォーム702は、図10Aに示されるグラフィカルユーザインタフェース1005と同様のグラフィカルユーザインタフェースを表示することができる。場合によっては、キーボードマッピングテストプラットフォーム702によるキーボードシミュレーション出力は、それがローカルマシン出力であるため、誤りがないと推定することができる。図10Aは、ローカルデスクトップおよび仮想デスクトップのそれぞれに単一のキーボードシミュレーション出力を示すが、ローカルデスクトップおよび仮想デスクトップが一度に複数のキーボードシミュレーション出力を表示することができることを理解されたい(例えば、単語または句がキーボード入力として入力された場合)。
同様に、リモートデスクトップホストプラットフォーム703は、キーボード入力に対応するキーボードシミュレーション出力を、仮想デスクトップインタフェースを介してキーボードマッピングテストプラットフォーム702に表示させることができる。リモートデスクトップホストプラットフォーム703によって格納されるキーボードマッピングテーブルに誤りがない場合、リモートデスクトップホストプラットフォーム703でのキーボードシミュレーション出力は、キーボードマッピングテストプラットフォーム702でのキーボードシミュレーション出力に一致するはずである(例えば、仮想デスクトップインタフェースもまた文字「a」を表示するはずである)。シミュレートされたキーボード入力を出力する際に、キーボードマッピングテストプラットフォーム702は、図10Aに示されるグラフィカルユーザインタフェース1010と同様のグラフィカルユーザインタフェースを表示することができる。ただし、これが常に当てはまるとは限らない。例えば、場合によっては、リモートデスクトップホストプラットフォーム703は、キーボード入力を誤ってマッピングすることがあり、仮想デスクトップで誤った文字またはコマンドが出力されることがある。これは、図11Aに示されるグラフィカルユーザインタフェース1105および1110に示される。例えば、グラフィカルユーザインタフェース1105によって示されるローカルキーボードシミュレーション出力は文字「a」であるが、グラフィカルユーザインタフェース1110によって示される仮想デスクトップキーボードシミュレーション出力は文字「b」である。これらの例では、キーボードマッピングテストプラットフォーム702によるキーボードシミュレーション出力は、それがローカルマシン出力であるため、誤りがないと推定することができる。
1つ以上の例では、キーボードマッピングテストプラットフォーム702は、ローカルおよび仮想デスクトップキーボードシミュレーション出力の表示を同時にもたらすことができる。他の例では、キーボードマッピングテストプラットフォーム702は、ローカルおよび仮想デスクトップキーボードシミュレーション出力の表示を別々の時間にもたらすことができる。
ステップ811では、キーボードマッピングテストプラットフォーム702は、ローカルおよび仮想デスクトップキーボードシミュレーション出力のスクリーンショットをキャプチャすることができる。スクリーンショットをキャプチャする際に、キーボードマッピングテストプラットフォーム702は、図10Aに示されるグラフィカルユーザインタフェース1005および1010、または図10Bに示されるグラフィカルユーザインタフェース1105および1110と同様のグラフィカルユーザインタフェースのスクリーンショットをキャプチャすることができる。
図8Bを参照して、ステップ812では、キーボードマッピングテストプラットフォーム702は、ステップ811でキャプチャされたスクリーンショットを比較することができる。スクリーンショットを比較する際に、キーボードマッピングテストプラットフォーム702は、スクリーンショット上でテキスト認識を実行し、ローカルおよび仮想デスクトップキーボードシミュレーション出力を比較することができる。スクリーンショットを比較する際に、キーボードマッピングテストプラットフォーム702は、リモートデスクトップホストプラットフォーム703がキーボード入力を、キーボードマッピングテストプラットフォーム702と同じキーボードシミュレーション出力にマッピングしたかどうかを決定することができる。スクリーンショットを比較する際に、キーボードマッピングテストプラットフォーム702は、そのローカルキーボードマッピングテーブルには誤りがないが、リモートデスクトップホストプラットフォーム703によって格納されるキーボードマッピングテーブルには誤りがあると決定することがある。1つ以上の例では、キーボードマッピングテストプラットフォーム702は、ローカルキーボードマッピングテーブルを、リモートデスクトップホストプラットフォーム703に格納されるキーボードマッピングテーブルと比較することができる。
ステップ813では、キーボードマッピングテストプラットフォーム702は、リモートデスクトップホストプラットフォーム703によって出力されるICA値をマーク付けするか、記録するかいずれかを行うことができる。ステップ812において、一致するキーボードシミュレーション出力をスクリーンショットが含んでいたと、キーボードマッピングテストプラットフォーム702が決定した場合、キーボードマッピングテストプラットフォーム702は、リモートデスクトップホストプラットフォーム703によって出力されるICA値をキーボードマッピングテーブルに記録することができる。例えば、キーボードマッピングテストプラットフォーム702は、ローカルデスクトップおよび仮想デスクトップにそれぞれ対応するグラフィカルユーザインタフェース1005および1010が一致する(例えば、キー入力が「a」であり、両方のインタフェースが「a」を表示する)と決定した後、97のICA値を含むようにキーボードマッピングテーブル1015に書き込むことができる。
一致するキーボードシミュレーション出力をスクリーンショットが含まなかったとキーボードマッピングテストプラットフォーム702が決定した場合、キーボードマッピングテストプラットフォーム702は、キーボードマッピングテーブルにエラーを示すことができる。例えば、キーボードマッピングテストプラットフォーム702は、図11Bに示される、キーボードマッピングテーブル1115に示されるように、ICA値を書き込むことができる。キーボードマッピングテストプラットフォーム702およびリモートデスクトップホストプラットフォーム703によるキーボードシミュレーション出力が一致していない(例えば、キー入力は「a」であり、ローカルデスクトップは「a」を出力するが、仮想デスクトップは「b」を出力する)と決定した後(図11Aのグラフィカルユーザインタフェース1105および1110によって示されるように)、出力されたICA値を含むのではなく、キーボードマッピングテストプラットフォーム702は、ICA値を「エラー」としてマーク付けすることができる。場合によっては、ICA値をエラーとしてマーク付けするのではなく、キーボードマッピングテストプラットフォーム702は、キーボードマッピングテーブル中のICA値を空白のままにすることができる。
ステップ814では、キーボードマッピングテーブルを更新した後、キーボードマッピングテストプラットフォーム702は、新しいキーボード入力をテストするためにテスト環境をリセットすることができる。1つ以上の例では、テスト環境をリセットする際に、キーボードマッピングテストプラットフォーム702は、キーボード入力をリセットすることができる(例えば、「b」などの新しいキーボード入力をテストするためにキーボードマッピングテストプラットフォーム702を準備する)。例えば、キーボードマッピングテストプラットフォーム702は、「a」のキーボード入力からテスト環境をリセットすることができることで、「b」のキーボード入力をテストすることができる(例えば、キーボードマッピングテストプラットフォーム702はキーボードマッピングテーブルの次の行をシミュレートするように進むことができる)。これらの例では、キーボードマッピングテストプラットフォーム702は、テスト環境の一部をリセットすることができる(例えば、オペレーティングシステム、キーボードなどを同じままにすることができる)。
ステップ815では、キーボードマッピングテストプラットフォーム702は、キーボードマッピングテーブルに含まれるすべてのキーボード入力がテストされたかどうかを決定することができる。例えば、キーボードマッピングテストプラットフォーム702は、キーボードマッピングテーブルを直線的に進み、各エントリをテストすることができる。キーボードマッピングテストプラットフォーム702がキーボードマッピングテーブル全体を進むと、キーボードマッピングテストプラットフォーム702は、キーボードマッピングテーブル内のすべてのキーボード入力がテストされたと決定することができる。1つ以上の例では、キーボードマッピングテストプラットフォーム702は、エントリにICA値またはエラー値が存在するという決定に基づいて、キーボードマッピングテストプラットフォーム702内のエントリがシミュレートされたかどうかを決定することができる。そうでない場合、キーボードマッピングテストプラットフォーム702は、追加のキーボード入力をシミュレートするためにステップ809に戻ることができる。キーボードマッピングテーブルに含まれるすべてのキーボード入力がテストされた場合、キーボードマッピングテストプラットフォームは、ステップ816に進むことができる。
ステップ816では、キーボードマッピングテストプラットフォーム702は、テスト環境を削除することができる。1つ以上の例では、テスト環境を削除する際に、キーボードマッピングテストプラットフォーム702は、リモートデスクトップホストプラットフォームによってホストされる仮想デスクトップへの接続を終了することができる。
ステップ817では、キーボードマッピングテストプラットフォーム702は、ステップ813で誤りがあるとマーク付けされたあらゆるキーボード入力について、キーボードマッピングテーブル内のICA値を更新することができる。キー入力の値がICAプロトコルで定義されている(例えば、ICAプロトコルデータベースに格納されている)とキーボードマッピングテストプラットフォーム702が決定した場合、キーボードマッピングテストプラットフォーム702は、誤りのない値を読み出し、それをキーボードマッピングテーブルで更新することができる。場合によっては、これらの更新は1つずつ発生することがある。他の例では、更新は単一のバッチ更新として発生する場合がある。キー値がICAプロトコルで定義されていないとキーボードマッピングテストプラットフォーム702が決定した場合、キーボードマッピングテストプラットフォーム702は、ICAプロトコルでキー値を定義し(例えば、ICAプロトコルデータベースでICA値を割り当て)、ICAプロトコルとキーボードマッピングテーブルとの両方を更新することができる。
ステップ818では、キーボードマッピングテストプラットフォーム702は、更新されたキーボードマッピングテーブルを格納することができる。1つ以上の例では、更新されたキーボードマッピングテーブルを格納する際に、キーボードマッピングテストプラットフォーム702は、既存のキーボードマッピングテーブルを上書きすることができる。他の例では、キーボードマッピングテストプラットフォーム702は、既存のキーボードマッピングテーブルを削除し、新しいものを保存することができる。1つ以上の例では、キーボードマッピングテストプラットフォーム702は、更新されたキーボードマッピングテーブルをキーボードマッピングテストデータベース712bに格納することができる。結果として、キーボードマッピングテストプラットフォーム702が、リモートデスクトップホストプラットフォーム703によってホストされる後続の仮想デスクトップにアクセスする場合、以前は誤りがあった、キーボードマッピングに誤りがなくなる。したがって、実際のキーボード入力を受け取ると、システムは、訂正されたキーボードマッピングテーブルを適用することができる。
上記のように、ステップ801~818が、主に単一のキー(例えば、「a」)に対応するキーボード入力に関して説明されているが、本明細書で説明される方法は、複数のキーストロークに関連するコマンド(例えば、ctrl+c、ctrl+vなど)にも適用することができる。
続いて、イベントシーケンスは終了することができ、キーボードマッピングテストプラットフォーム702は、仮想デスクトップにアクセスし続け、キーボード入力に対応する仮想デスクトップでのキーボードシミュレーション出力をもたらすことができる。さらに、キーボードマッピングテストプラットフォームは、新しい、または異なったテスト条件下でキーボード入力をテストすることができる(例えば、オペレーティングシステム、ブラウザ、およびキーボードの組み合わせを変更し、対応するキーボードマッピングを検証する)。したがって、複数のテストシナリオについて誤りのあるキーボードマッピングのすべてを決定する自動的な方法が決定される。さらに、エラー値に対応するコードを修正するのではなく、単にキーボードマッピングテーブルを維持することができる。したがって、エラー値の調整に対応する難易度および時間のコミットメントが軽減することができる。
図9は、1つ以上の例示的な実施の形態による、仮想デスクトップのための自動キーボードマッピングを実行するための例示的な方法を示す。図9を参照して、ステップ905では、少なくとも1つのプロセッサ、通信インタフェース、およびメモリを含むコンピューティングデバイスが、キーボードマッピングテーブルを作成することができる。ステップ905で行われる動作は、ステップ801に関して前述した動作と同様であってよい。ステップ910では、コンピューティングデバイスは、1つ以上の入力を受け取ることができる。ステップ910で行われる動作は、ステップ802に関して前述した動作と同様であってよい。ステップ915では、コンピューティングデバイスは、仮想デスクトップでキーボードマッピングを自動的にテストする、キーボードマッピングテスト自動化スクリプトを書き込むことができる。ステップ915で行われる動作は、ステップ803に関して前述した動作と同様であってよい。ステップ920では、コンピューティングデバイスは、ステップ915で生成されるキーボードマッピングテスト自動化スクリプトを開始することができる。ステップ920で行われる動作は、ステップ904に関して前述した動作と同様であってよい。ステップ925では、コンピューティングデバイスは、1つ以上のキーボード入力をテストする、テスト環境を作成することができる。ステップ925で行われる動作は、ステップ805に関して前述した動作と同様であってよい。ステップ930では、コンピューティングデバイスは、キーボードマッピングテスト自動化スクリプトを実行することによって、テスト環境でキーボード入力をシミュレートすることができる。キーボード入力をシミュレートすることにより、コンピューティングデバイスは、キーボード入力に対応する出力を生成することができる。ステップ930で行われる動作は、ステップ809~810に関して前述した動作と同様であってよい。ステップ935では、コンピューティングデバイスは、コンピューティングデバイスのディスプレイ上に表示されたローカルデスクトップおよび仮想デスクトップのスクリーンショットをキャプチャすることができる。ステップ935で行われる動作は、ステップ811に関して前述した動作と同様であってよい。ステップ940では、コンピューティングデバイスは、ステップ935でキャプチャされたスクリーンショットを比較することができる。ステップ940で行われる動作は、ステップ812に関して前述した動作と同様であってよい。ステップ945では、コンピューティングデバイスは、各スクリーンショットでの出力が一致するかどうかを決定することができる。出力が一致するとコンピューティングデバイスが決定した場合、コンピューティングデバイスは、ステップ950に進むことができる。出力が一致していないとコンピューティングデバイスが決定した場合、コンピューティングデバイスは、ステップ955に進むことができる。
ステップ950では、コンピューティングデバイスは、キーボードマッピングテーブルに誤りのないICA値を記録することができる。ステップ955では、コンピューティングデバイスは、キーボードマッピングテーブル中で誤りのある値をマーク付けすることができる。ステップ950~955で行われる動作は、ステップ813に関して前述した動作と同様であってよい。ステップ960では、コンピューティングデバイスは、テスト環境をリセットして、新しいキーボード入力をシミュレートするためにテスト環境を準備することができる。ステップ960で行われる動作は、ステップ814に関して前述した動作と同様であってよい。ステップ965では、コンピューティングデバイスは、キーボードマッピングテーブル内のすべてのキーボード入力が処理されたかどうかを決定することができる。キーボードマッピングテーブル内のいくつかのキーボード入力が処理されていない場合、コンピューティングデバイスはステップ930に戻ることができる。すべてのキーボード入力が処理された場合、コンピューティングデバイスはステップ970に進むことができる。ステップ965で行われる動作は、ステップ815に関して前述した動作と同様であってよい。
ステップ970では、コンピューティングデバイスは、テスト環境を削除することができる。ステップ970で行われる動作は、ステップ816に関して前述した動作と同様であってよい。ステップ975では、コンピューティングデバイスは、ステップ955でマーク付けされたエラー出力に対応するICA値を訂正することができ、更新されたキーボードマッピングテーブルを格納することができる。ステップ975で行われる動作は、ステップ817~818に関して前述した動作と同様であってよい。
構造的特徴および/または方法論的動作に固有の言語において主題を説明されてきたが、添付の特許請求の範囲において定義される主題は、上記説明された特定の特徴または動作に必ずしも限定されないことが理解されよう。むしろ、上記説明された特定の特徴および動作は、以下の特許請求の範囲の実施態様として説明される。