Misc.

2010/01/15

KB961741 と KB961742 で、VDI + RemoteApp も可能になる (その5) - Inside Windows Virtual PC

間が空きましたが、今回は、以下の投稿の続きです。Windows XP SP3 + KB961742 でできるはずの Windows XP 上のアプリケーションへの RemoteApp 接続で発生する“このリモート コンピューターは RemoteApp をサポートしていません。サポートが必要な場合は、システム管理者に問い合わせてください。”というエラーを回避する方法が無いかどうか“まだ”試行錯誤中ですが、XP モードの内部的な仕組みについて理解が深まってきたのでまとめておきます。

KB961741 と KB961742 で、VDI + RemoteApp も可能になる (その1)
KB961741 と KB961742 で、VDI + RemoteApp も可能になる (その2)
KB961741 と KB961742 で、VDI + RemoteApp も可能になる (その3)
KB961741 と KB961742 で、VDI + RemoteApp も可能になる (その4)


XPモードの仕組みというと、誤解を招くかもしれません。正確には、Windows Virtual PC そのものの仕組みです。Windows Virtual PC では、仮想マシンの実行モードとして、次の3つのモード(正式な名称ではありません) が用意されています。基本モードでは、任意の 32 ビット OS を実行できます。統合モードと仮想アプリケーション モードは、ゲスト OS に統合コンポーネントがインストールされている必要があります。そのため、Windows Virtual PC がサポートするゲスト OS でのみ利用できます。仮想アプリケーション モードは、統合コンポーネントに加えて、RemoteApp のサポートが必要です。Windows 7 Enterprise および Ultimate は、標準で RemoteApp をサポートしています。Windows Vista Enterprise/Ultimate SP1 以降は KB961741、Windows XP Professional SP3 は KB961742 の更新を適用することで、RemoteApp のサポートが追加されます。
  • 基本モード (統合機能が無効)
  • 統合モード (統合機能が有効)
  • 仮想アプリケーション モード (統合機能が有効)
基本モード (統合機能が無効)

基本モードは、統合コンポーネントを必要としません。そのため、任意の 32 ビット OS を実行できます(インストールできれば)。Linux ゲストも動かすことができます。このモードでは、仮想マシンがエミュレートするビデオ カード (S3 Trio 32/64)に対するディスプレイ信号が、仮想マシンのウィンドウ (VMWindow.exe) に表示されます。ゲスト OS に統合コンポーネントがインストールされている場合は、仮想マシンの[ツール]メニューから[統合機能を無効にする]または[統合機能を有効にする]を使用して、基本モードと統合モードを入れ替えることができます。また、統合コンポーネントがインストールされている場合、統合機能の有効/無効に関係なく、マウス統合と時刻同期は有効です。
 
基本モードの仮想マシン (ゲスト OS は、Windows XP Mode の OS イメージ)
基本モードの表示の仕組み
統合モード (統合機能が有効)

統合モードの仮想マシンは、ヘッドレスのコンピューターのようなものです。つまり、モニタ、キーボード、マウスが付いていないコンピューターです。そのため、スタートアップ時に統合機能を有効にするように設定した仮想マシンは、起動画面が表示されません。ちなみに、仮想マシンの BIOS セットアップ ユーティリティにアクセスするためには、基本モードに切り替えて (統合機能を無効にして) 再起動する必要があります。

統合モードの仮想マシンは、 ゲスト OS の起動が完了すると、保存されている資格情報を使用して自動ログオンされ、デスクトップが表示されます。このデスクトップ表示、およびキーボード/マウスの入出力には、リモート デスクトップ接続のテクノロジが利用されています。下のスクリーンショットを見てください。ログオン中の XPMUser が rdp-tcp#42 という RDP セッションで接続されていることがわかります。とは言っても、ホスト OS からネットワーク経由で直接 RDP (3389/tcp) 接続しているわけではありません。netstat -b の出力を見ると、統合コンポーネントに含まれるローカルの Virtual Machine Service (vmsrvc.exe) が RDP クライアントとなって、ローカルのリモート デスクトップに RDP 接続しています。ゲスト OS の vmsrvc.exe は、ホスト OS  の Virtual PC ホスト プロセス (vpc.exe) と名前付きパイプのような仕組みで高速にやり取りされます。その通信路となるのが、Virtual PC バス (VPCBus) です。

統合モードの仮想マシン




















統合モードの表示の仕組み (リモート デスクトップのテクノロジを利用)

統合モードを利用するためには、ゲスト OS がリモート デスクトップ接続をサポートしている必要があります。そのため、Windows Virtual PC のサポート ゲスト OS には、リモート デスクトップ接続をサポートしない、Windows 7 Home 以下、Windows Vista Home 以下、Windows XP Home Edition は含まれていません。

リモート デスクトップ接続が利用できないと、統合機能を有効にできない


仮想アプリケーション モード (統合機能が有効)

ホスト OS のデスクトップに、仮想マシンのアプリケーション ウィンドウを統合する仮想アプリケーション モードは、RemoteApp のテクノロジを利用しています。RemoteApp セッションでは、既定のシェルである Explorer.exe (HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell の値) の代わりに、RemoteApp 専用のシェルである Rdpshell.exe が起動され、そのシェル上でアプリケーションが実行されます。また、ホスト OS の側では、VMWindow.exe ではなく、VMSal.exe が使用されます。RemoteApp で実行可能なアプリケーションのリストは、Windows Server 2008 および Windows Server 2008 R2 の RemoteApp と同じレジストリ (HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TsAppAllowList) で管理されます。Windows Server 2008 および Windows Server 2008 R2 では、RemoteApp マネージャーを使用して管理者がリストを作成しますが、Windows Virtual PC の統合コンポーネントがその作業を自動化してくれています。

仮想アプリケーション モードの仮想マシン

仮想アプリケーション モードの表示の仕組み (RemoteApp のテクノロジを利用)


仮想アプリケーション モードが利用可能なのは、RemoteApp をサポートする次のゲスト OS に限定されます。
  • Windows 7 Enterprise
  • Windows 7 Ultimate
  • Windows Vista Enterprise SP1 以降+ KB961741
  • Windows Vista Ultimate SP1 以降+ KB961741
  • Windows XP Professional SP3 + KB961742
 もう 1 つのモード...

一連の投稿のテーマである VDI + RemoteApp は、仮想アプリケーション モードによく似ていますが、もっと単純です。以下のように、リモート デスクトップ接続クライアント (mstsc.exe) を使用して、ネットワーク経由で RemoteApp のアプリケーションに接続するため、仮想化テクノロジの種類やゲスト コンポーネントの有無は関係ありません。仮想マシンでなく、物理コンピューターのアプリケーションに対して接続することもできます。

RemoteApp で直接アプリケーションに接続する















VDI の仮想デスクトップで、Windows 7 Enterprise (Ultimate はライセンス的に無理があります) の仮想マシンを展開する場合は、標準の機能だけで、VDI + RemoteApp の環境を実現できます。
Windows Vista Enterprise の仮想マシンを展開する場合は、ゲスト OS に KB961741 を追加することでサポートされます。この 2 つが実現可能なことは、KB961741 と KB961742 で、VDI + RemoteApp も可能になる (その1) と (その2) で説明しました。問題は、Windows XP Professional SP3 ゲストの場合です。

Windows XP SP3 +KB961741 に RemoteApp 接続すると...

 
 
 
 
 
 
 
 
 
 
 
 
 
このエラーは、RemoteApp を構成していない Windows XP、KB961741 を適用していない Windows XP でも同じように表示されます。RemoteApp に対応していない Windows Server 2003 のターミナル サービスに RemoteApp 接続しようとしたときも同じエラーです。ネットワーク パケットのキャプチャーや OS の監査機能で監視したところ、どうやら、ログオン認証の前の段階で、クライアント側から切断しているようです。ターミナル サービス接続クライアント (mstsc.exe) 側の問題、というか仕様のようにみえてきました。Windows XP や Windows Server 2003 R2 以前は、RemoteApp をサポートしているはずがないとして、さっさとあきらめているように見えます (エラーが表示されるのが早すぎる)。

[2010/02/19] XP における RemoteApp の接続エラーの回避方法はこちらから。
KB961741 と KB961742 で、VDI + RemoteApp も可能になる (その6)