none
Windows8 UAC無効時の昇格判定について

    質問

  • OS: Windows8 RP または RTM

    管理者権限で実行されているか(シールドアイコンを表示する必要があるか)を、IsAdminProcess()を使用して調べています。

    Windows7では、UACを無効にしている時にIsAdminProcess()が true を返してくれるのですが、

    Windows8では、UACを無効にしている時にIsAdminProcess()が false を返してきます。

    念のためCheckTokenMembership()関数を使って調べる方法も試してみましたが、結果は同じでした。

    Windows8にて、UACが無効であること(管理者権限昇格の必要が無いこと)を検知する方法について

    何か情報をお持ちの方がおりましたら、ご教示いただけると幸いです。

    2012年8月20日 1:57

回答

  • 問題点とは関係ない話ですが、UX デザインコンセプトに

    UAC  が部分的に有効になっている場合、または完全に無効になっている場合、昇格  UI  が表示されなく
    ても、タスクがシステム   レベルの変更を伴うものであり、昇格が必要であることを示すために、 UAC
    シールドは表示されます。昇格が必要なタスクに対して常に  UAC  シールドを表示することによって、 UI
    を常にシンプルで予測可能な状態にできます。

    とありますので、シールドアイコンを非表示にしちゃダメなんではないでしょうか。

    2012年8月20日 3:07
  • コントロールパネルではなく、レジストリから設定しないといけないのかな?

    Disable UAC completely
    http://www.eightforums.com/general-discussion/2434-disable-uac-completely.html

    レジストリから変更した場合、普通にプロセスを起動するだけで管理者特権を行使できることを手元で確認しています。
    逆に、コントロールパネルでトラックバーを一番下に下げる程度では、通知・確認がなくなるだけで、管理者特権になっていません。

    本当に、UAC を無効化できているかどうか、一度確認してみてください。
    C:\ ルートフォルダーでファイルを作るとか、whoami /groups で Administrators が有効と表示されるかとか。

    • 回答としてマーク Wtr_0610 2012年8月21日 2:00
    2012年8月20日 14:30
    モデレータ
  • Windows 8では、Modern (Metro) style appsのためにLUA (Least-previlaged User Account)はコントロールパネルからは無効にできなくなりました。

    LUAを無効にすると、Modern style appsが起動しませんので、事実上LUAはレジストリ変更でも無効にできません。

    Modern style appsのアクセス制御がIntegrity Levelsに依存しているためだと思います。

    • 回答としてマーク Wtr_0610 2012年8月23日 12:21
    2012年8月23日 6:39

すべての返信

  • 問題点とは関係ない話ですが、UX デザインコンセプトに

    UAC  が部分的に有効になっている場合、または完全に無効になっている場合、昇格  UI  が表示されなく
    ても、タスクがシステム   レベルの変更を伴うものであり、昇格が必要であることを示すために、 UAC
    シールドは表示されます。昇格が必要なタスクに対して常に  UAC  シールドを表示することによって、 UI
    を常にシンプルで予測可能な状態にできます。

    とありますので、シールドアイコンを非表示にしちゃダメなんではないでしょうか。

    2012年8月20日 3:07
  • K. Takaoka様

    ご回答ありがとうございます。

    デザインコンセプト上では常に表示させるべきではあったのですね…。

    しかし、シールドアイコンに限らず、弊社アプリケーションにて管理者権限で実行されているかどうかで処理分岐を行っている箇所があるため、UAC無効状態の検知を行いたいと考えています。

    (これもそういう意味では問題があるかもしれませんが)


    • 編集済み Wtr_0610 2012年8月20日 4:46
    2012年8月20日 4:44
  • Win8 の評価や確認を行う時間も環境もないのですが、たとえば

    http://code.msdn.microsoft.com/windowsdesktop/CSUACSelfElevation-644673d3

    このあたりのサンプルを実行しても、正常に検出できていない状況でしょうか?

    ( Win8 環境で、UAC は無効にしているがログインしているのが管理者ではない、なんてこともないですよね)

    2012年8月20日 5:00
  • 上記サンプルを実行してみました。

    Windows7では、UACオフの状態で起動すると、昇格されている時と同じ結果(Self-elevateボタンにシールドが付いていない状態)が出力されましたが、

    Windows8では、UACオフの状態で起動すると、昇格されていない時と同じ結果(Self-elevateボタンにシールドが付いている状態)が出力されました。

    やはり、検知できていないようです…。

    (Win8でログインしているユーザーが管理者であることは確認しております)

    2012年8月20日 6:21
  • UAC 無効化ってどのように設定されました?

    手元の環境では、ユーザーアカウントの制御の設定の変更で一番下にしても、完全に無効になっていないように見受けられました。
    コマンドプロンプトをそのまま実行することと、管理者として実行することで挙動の差があったことからです。
    (echo > C:\test.txt でファイルが作成できるか、whoami /groups で出力に差があるか)

    私の再現方法が悪いのかなぁ…。

    2012年8月20日 14:19
    モデレータ
  • コントロールパネルではなく、レジストリから設定しないといけないのかな?

    Disable UAC completely
    http://www.eightforums.com/general-discussion/2434-disable-uac-completely.html

    レジストリから変更した場合、普通にプロセスを起動するだけで管理者特権を行使できることを手元で確認しています。
    逆に、コントロールパネルでトラックバーを一番下に下げる程度では、通知・確認がなくなるだけで、管理者特権になっていません。

    本当に、UAC を無効化できているかどうか、一度確認してみてください。
    C:\ ルートフォルダーでファイルを作るとか、whoami /groups で Administrators が有効と表示されるかとか。

    • 回答としてマーク Wtr_0610 2012年8月21日 2:00
    2012年8月20日 14:30
    モデレータ
  • Azulean様

    ご回答ありがとうございます。

    コントロールパネルでUACレベルを一番下に下げる = UACの無効化 と勘違いしていました…(Windows7ではできていたので)。

    実際にレジストリを変更してみたところ、UAC無効時の挙動になりました。

    Windows8ではレジストリを変更する方法以外でUACを無効化できなさそうですかね…。

    とりあえず、仕様通りの動きであるということは分かりました。

    2012年8月21日 1:59
  • Windows 8では、Modern (Metro) style appsのためにLUA (Least-previlaged User Account)はコントロールパネルからは無効にできなくなりました。

    LUAを無効にすると、Modern style appsが起動しませんので、事実上LUAはレジストリ変更でも無効にできません。

    Modern style appsのアクセス制御がIntegrity Levelsに依存しているためだと思います。

    • 回答としてマーク Wtr_0610 2012年8月23日 12:21
    2012年8月23日 6:39