Windows8 UAC無効時の昇格判定について
-
Monday, August 20, 2012 1:57 AM
OS: Windows8 RP または RTM
管理者権限で実行されているか(シールドアイコンを表示する必要があるか)を、IsAdminProcess()を使用して調べています。
Windows7では、UACを無効にしている時にIsAdminProcess()が true を返してくれるのですが、
Windows8では、UACを無効にしている時にIsAdminProcess()が false を返してきます。
念のためCheckTokenMembership()関数を使って調べる方法も試してみましたが、結果は同じでした。
Windows8にて、UACが無効であること(管理者権限昇格の必要が無いこと)を検知する方法について
何か情報をお持ちの方がおりましたら、ご教示いただけると幸いです。
All Replies
-
Monday, August 20, 2012 3:07 AM
問題点とは関係ない話ですが、UX デザインコンセプトに
UAC が部分的に有効になっている場合、または完全に無効になっている場合、昇格 UI が表示されなく ても、タスクがシステム レベルの変更を伴うものであり、昇格が必要であることを示すために、 UAC シールドは表示されます。昇格が必要なタスクに対して常に UAC シールドを表示することによって、 UI を常にシンプルで予測可能な状態にできます。
とありますので、シールドアイコンを非表示にしちゃダメなんではないでしょうか。
-
Monday, August 20, 2012 4:44 AM
K. Takaoka様
ご回答ありがとうございます。
デザインコンセプト上では常に表示させるべきではあったのですね…。
しかし、シールドアイコンに限らず、弊社アプリケーションにて管理者権限で実行されているかどうかで処理分岐を行っている箇所があるため、UAC無効状態の検知を行いたいと考えています。
(これもそういう意味では問題があるかもしれませんが)
- Edited by Wtr_0610 Monday, August 20, 2012 4:46 AM
-
Monday, August 20, 2012 5:00 AM
Win8 の評価や確認を行う時間も環境もないのですが、たとえば
http://code.msdn.microsoft.com/windowsdesktop/CSUACSelfElevation-644673d3
このあたりのサンプルを実行しても、正常に検出できていない状況でしょうか?
( Win8 環境で、UAC は無効にしているがログインしているのが管理者ではない、なんてこともないですよね)
- Edited by K. Takaoka Monday, August 20, 2012 5:02 AM
-
Monday, August 20, 2012 6:21 AM
上記サンプルを実行してみました。
Windows7では、UACオフの状態で起動すると、昇格されている時と同じ結果(Self-elevateボタンにシールドが付いていない状態)が出力されましたが、
Windows8では、UACオフの状態で起動すると、昇格されていない時と同じ結果(Self-elevateボタンにシールドが付いている状態)が出力されました。
やはり、検知できていないようです…。
(Win8でログインしているユーザーが管理者であることは確認しております)
-
Monday, August 20, 2012 2:19 PMModerator
UAC 無効化ってどのように設定されました?
手元の環境では、ユーザーアカウントの制御の設定の変更で一番下にしても、完全に無効になっていないように見受けられました。
コマンドプロンプトをそのまま実行することと、管理者として実行することで挙動の差があったことからです。
(echo > C:\test.txt でファイルが作成できるか、whoami /groups で出力に差があるか)私の再現方法が悪いのかなぁ…。
- Edited by AzuleanMVP, Moderator Monday, August 20, 2012 2:19 PM
-
Monday, August 20, 2012 2:30 PMModerator
コントロールパネルではなく、レジストリから設定しないといけないのかな?
Disable UAC completely
http://www.eightforums.com/general-discussion/2434-disable-uac-completely.htmlレジストリから変更した場合、普通にプロセスを起動するだけで管理者特権を行使できることを手元で確認しています。
逆に、コントロールパネルでトラックバーを一番下に下げる程度では、通知・確認がなくなるだけで、管理者特権になっていません。本当に、UAC を無効化できているかどうか、一度確認してみてください。
C:\ ルートフォルダーでファイルを作るとか、whoami /groups で Administrators が有効と表示されるかとか。- Marked As Answer by Wtr_0610 Tuesday, August 21, 2012 2:00 AM
-
Tuesday, August 21, 2012 1:59 AM
Azulean様
ご回答ありがとうございます。
コントロールパネルでUACレベルを一番下に下げる = UACの無効化 と勘違いしていました…(Windows7ではできていたので)。
実際にレジストリを変更してみたところ、UAC無効時の挙動になりました。
Windows8ではレジストリを変更する方法以外でUACを無効化できなさそうですかね…。
とりあえず、仕様通りの動きであるということは分かりました。
-
Thursday, August 23, 2012 6:39 AM
Windows 8では、Modern (Metro) style appsのためにLUA (Least-previlaged User Account)はコントロールパネルからは無効にできなくなりました。
LUAを無効にすると、Modern style appsが起動しませんので、事実上LUAはレジストリ変更でも無効にできません。
Modern style appsのアクセス制御がIntegrity Levelsに依存しているためだと思います。
- Marked As Answer by Wtr_0610 Thursday, August 23, 2012 12:21 PM

