2013/07/23

WHS2011 ダッシュボードにアクセスするとエラーになる現象~mstscax.dllのバージョン違い


Technetフォーラムに質問された現象を再現すべく検証した内容をメモ。
検証はやっぱり時間がかかりますね・・・疲れた・・・

現象

WHS2011のコネクタをインストールし、ダッシュボードにログインしようとすると下記エラーが表示され、ログインが失敗します。
リモート デスクトップ サービス ActiveX コントロールのバージョンがクライアント シェルのバージョンと一致しません
2013-07-21_135159
上記OKボタンをクリックすると、次のエラーメッセージが表示されます。
リモート コンピューターに接続できませんでした。
接続を再試行してください。問題が解決しない場合は、リモート コンピューターの所有者またはネットワーク管理者に問い合わせてください。
2013-07-21_135213

原因と検証結果

先のエラーメッセージに書いてある通りならば、mstscax.dllのバージョンが異なるのが原因です。
仮定の段階で「はたして、本当にバージョンが違うのだろうか?」と疑問に思ったので、下記に示す手順で検証してみました。
  1. Windows 7 Home Basic SP1 32bitを新規インストール
  2. Windows 7 Home Basic SP1 32bitのmstscax.dllをバックアップし、Windows Vista Business SP2 32bitのmstscax.dllをコピー&ペースト(強引にバージョンを変更)
    dllの移植は「Windows TrustedInstallerが管理するDLLをリネーム・削除する方法」の通り行っています。
  3. WHS2011 コネクタをインストール
  4. WHS2011 ダッシュボードにログイン
2番目ですが、Hyper-V上、および、実機にインストールした各OSのDLLバージョンを確認したところ、OSによって異なっていました。
  • Windows Vista Biz SP2 32bit – ver 6.0.6002.18804
  • Windows 7 Home Basic SP1 32bit – ver 6.1.7601.18079
  • Windows 8 Pro 64bit – ver 6.2.9200.16547
2013-07-21_110432
検証手順を行った結果、4番目のダッシュボードにログインするところで本現象となるエラーメッセージが表示されました。
2013-07-21_135159

対処法

Windows 7の対処法は下記の通りになります。
  1. 管理者権限でコマンドプロンプトを起動
  2. システム・ファイル・チェッカー ツールを使用し、不整合ファイルを調査・修復
    下記コマンドを実行し、完了まで待機
    >sfc /scannow
  3. 完了後、mstscax.dllのバージョンが本来のバージョンと同じになっていれば完了
実際に修復してみたところ、破損ファイルが見つかり正常に修復されました。
2013-07-21_163332
sfcコマンドの結果はc:\windows\logs\CBS\CBS.logに記録されています。
2013-07-21_163648
実際に修復した結果ログは下記の通りです。

2013-07-21 16:21:11, Info                  CSI    0000013d [SR] Verify complete
2013-07-21 16:21:11, Info                  CSI    0000013e [SR] Verifying 100 (0x00000064) components
2013-07-21 16:21:11, Info                  CSI    0000013f [SR] Beginning Verify and Repair transaction
2013-07-21 16:21:26, Info                  CSI    00000140 Hashes for file member \??\C:\Windows\System32\mstscax.dll do not match actual file [l:22{11}]"mstscax.dll" :
   Found: {l:32 b:RpScInj6cXCaYbsnifM0RrbLHOT3q+ws8M0GhpUwIfo=} Expected: {l:32 b:2q774bTY3RcCe/WfJya53v52B4E6TM2rD0YatPzn4kY=}
2013-07-21 16:21:26, Info                  CSI    00000141 [SR] Repairing corrupted file [ml:520{260},l:46{23}]"\??\C:\Windows\System32"\[l:22{11}]"mstscax.dll" from store
2013-07-21 16:21:27, Info                  CSI    00000142 Ignoring duplicate ownership for directory [l:108{54}]"\??\C:\Program Files\Common Files\Microsoft Shared\Ink" in component Microsoft-Windows-TabletPC-Platform-COMRuntime, Version = 6.1.7601.17803, pA = PROCESSOR_ARCHITECTURE_INTEL (0), Culture neutral, VersionScope = 1 nonSxS, PublicKeyToken = {l:8 b:31bf3856ad364e35}, Type neutral, TypeName neutral, PublicKey neutral

2013-07-21 16:21:27, Info                  CSI    00000143 Repair results created:
POQ 56 starts:
      0: Move File: Source = [l:192{96}]"\SystemRoot\WinSxS\Temp\PendingRenames\a5ec61e9e285ce0173190000c40fd00f._0000000000000000.cdf-ms", Destination = [l:104{52}]"\SystemRoot\WinSxS\FileMaps\_0000000000000000.cdf-ms"
     1: Move File: Source = [l:162{81}]"\SystemRoot\WinSxS\Temp\PendingRenames\ca1262e9e285ce0174190000c40fd00f.$$.cdf-ms", Destination = [l:74{37}]"\SystemRoot\WinSxS\FileMaps\$$.cdf-ms"
     2: Move File: Source = [l:214{107}]"\SystemRoot\WinSxS\Temp\PendingRenames\aa2a72e9e285ce0175190000c40fd00f.$$_system32_21f9a9c4a2f8b514.cdf-ms", Destination = [l:126{63}]"\SystemRoot\WinSxS\FileMaps\$$_system32_21f9a9c4a2f8b514.cdf-ms"
     3: Hard Link File: Source = [l:258{129}]"\SystemRoot\WinSxS\x86_microsoft-windows-t..s-clientactivexcore_31bf3856ad364e35_6.1.7601.18079_none_31b9734c24169dbf\mstscax.dll", Destination = [l:70{35}]"\??\C:\Windows\System32\mstscax.dll"
     4: Move File: Source = [l:204{102}]"\SystemRoot\WinSxS\Temp\PendingRenames\09cb84e9e285ce0176190000c40fd00f.$$_inf_3f581daba4c8c835.cdf-ms", Destination = [l:116{58}]"\SystemRoot\WinSxS\FileMaps\$$_inf_3f581daba4c8c835.cdf-ms"
    ~途中割愛してます~
    26: Set Key Value: Key = [l:168{84}]"\Registry\MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\Sysprep\Specialize", Value = [l:76{38}]"{b286306d-abb3-90a6-0218-900956130400}", Type = REG_SZ (1), Data = {l:116 b:43003a005c00570069006e0064006f00770073005c00530079007300740065006d00330032005c00730065007400750070005c007400730073007900730070007200650070002e0064006c006c002c00520043004d00530079007300500072006500700052006500730074006f00720065000000}
     27: Set Key Value: Key = [l:16
2013-07-21 16:21:27, Info                  CSI    8{84}]"\Registry\MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\Sysprep\Specialize", Value = [l:76{38}]"{24169dbf-734c-31b9-2e23-229f6b9bef89}", Type = REG_SZ (1), Data = {l:116 b:43003a005c00570069006e0064006f00770073005c00530079007300740065006d00330032005c00730065007400750070005c007400730073007900730070007200650070002e0064006c006c002c00520064007000530079007300500072006500700052006500730074006f00720065000000}
     28: Set Key Value: Key = [l:168{84}]"\Registry\MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\Sysprep\Generalize", Value = [l:76{38}]"{24169dbf-734c-31b9-86d6-c722da22bf5b}", Type = REG_SZ (1), Data = {l:122 b:43003a005c00570069006e0064006f00770073005c00530079007300740065006d00330032005c00730065007400750070005c007400730073007900730070007200650070002e0064006c006c002c005200640070005300790073005000720065007000470065006e006500720061006c0069007a0065000000}

POQ 56 ends.

今回の内容ですが、WHS2011を使い続けて2年ほどになりますが、初めての現象でした。
system32配下のDLLをいくつかみた限り、DLLのセキュリティ設定は[TrustedInstaller]アカウントにのみフルコントロールが付与されています。
権限奪取されて困る[System]アカウントは[読み取りと実行]&[読み取り]のみ許可されています。
Windows のアップグレードを繰り返したらこうなるのかな・・・
余談:mstscax.dllファイルがない状態だとどうなるか?
ちょっと意地悪をしてみました。
mstscax.dllをリネームし、OS上からファイルがない状態だとどうなるのか?
ダッシュボードにログインするとエラーになり、ファイルがないよ!とエラーメッセージを出してくれています。当然ですよね・・・
この状況も">sfc /scannow"を実行するとmstscax.dllが復元されました。
2013-07-21_105651
2013-07-21_105702
スポンサーリンク

スポンサーリンク