検索
連載

トラブルシューター泣かせのWindowsの仕様変更──忘れられた互換性機能?山市良のうぃんどうず日記(89)(1/2 ページ)

マイクロソフトはWindowsの新しいバージョンをリリースする際に、他のプラットフォームよりは互換性の維持に力を入れていると思います。しかし、それは新しいバージョンが出るのに合わせて、バージョンアップすればという条件付きの場合があります。途中のバージョンをスキップすると、動作しない原因を追跡するのが難しくなります。古い互換性機能の中には、新しいOSでテストされていないこともあるような、ないような……。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「山市良のうぃんどうず日記」のインデックス

連載目次

“セッション0の分離”の影響緩和のために導入されたUI0Detectサービス

 Windows XPやWindows Server 2003/2003 R2では、ローカルコンソールからログオンするユーザーは、システムサービスが実行されるのと同じ「セッション0」にログオンしていました。

 しかし、これは“セキュリティ上よろしくない”ということで、Windows Vistaでは「セッション0の分離」が行われ、「システムサービスはセッション0専用」「ユーザーはセッション1以降を使用する」ようになりました。セッション0の分離は、Windowsサービスがユーザーのデスクトップと対話するオプション(デスクトップとの対話をサービスに許可)に影響しました。ユーザーはセッション0に対話的にログオンしないようになったからです。

 この影響を緩和するため、Windows Vistaでは互換性機能として「Interactive Services Detection(対話型サービスの検出、UI0Detect)」サービスが導入され、セッション0で実行されるサービスがセッション1以降のセッションのユーザーと、引き続き対話することを可能にしました。ただし、セキュリティ上、この機能は可能な限り使用するべきではありません。

 Windows Sysinternalsの「PsExec」ユーティリティーは、セッション0内で任意のプログラムを実行し、そのプログラムと対話することを可能にする「-i 0」オプションを提供しています。

 例えば、このオプションを使って、次のコマンドラインを実行すると、セッション0内でシステムアカウントの権限でコマンドプロンプトを実行し、そのコマンドプロンプトと対話することができます(画面1)。

psexec -s -i 0 cmd.exe


画面1
画面1 Windows SysinternalsのPsExecユーティリティーを使用して、Windows 7のセッション0内で「Cmd.exe」を実行したところ

 PsExecは「PSEXEC」という名前のWindowsサービスを一時的に作成してシステムに登録し、セッション0のプログラムがユーザーと対話するためにUI0Detectサービスを利用します。準備ができると「対話型サービスの検出」ダイアログボックスが出現するので、「メッセージの表示」をクリックすると、ユーザーはセッション0内のプログラムと対話することができます(画面2)。

画面2
画面2 セッション0内の「Cmd.exe」と対話している様子。「Query Session」コマンドの出力結果がセッション0(ID)に接続していることを示している

セッション0と対話できる「psexec -i 0」がWindows 10では使えない?

 ある日のこと、Windows 10バージョン1607のトラブルシューティングのために、PsExecユーティリティーの「-i 0」」オプションを利用しようとしました(そのときは「Cmd.exeで」はない別のプログラムを実行するため)。しかし、何度実行しても「対話型サービスの検出」ダイアログボックスが表示されません。セッション0内でプログラムは実行されるのですが([Ctrl]+[C]キーで終了することもできる)、そのプログラムと対話することができないのです(画面3)。

画面3
画面3 Windows 7では利用できたPsExecユーティリティーのテクニックがWindows 10では機能しない?

 「イベントビューアー」で状況を確認すると、「システム」ログに「Interactive Services Detectionサービスは、次のエラーで終了しました:ファンクションが間違っています」という説明のイベントID「7023」のエラーが、PsExecの実行と同じタイミングで、同じ回数だけ記録されていました(画面4)。

画面4
画面4 UI0Detectサービスのエラーがイベントログに記録されていた

 試しに、管理ツールの「サービス」を開いて、UI0Detectサービスを手動で開始してみたところ、同じエラー(ファンクションが間違っています)でサービスの開始に失敗しました(画面5)。

画面5
画面5 Windows 10でUI0Detectサービスを起動できない?

Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
ページトップに戻る