中堅プログラマーの備忘録

忘れっぽくなってきたので備忘録として・・・

UACが邪魔だったから、挙動確認してみるのと、レジストリから無効にしてみる

環境:Windows10

1.概要

デスクトップアプリケーションを作成していると
【UAC】が邪魔をして、想定していた結果が得られない、なんてことがあります。
そもそも【UAC】ってなんなの?ってとこからなんですが
【UAC】とは【User Account Control】の略で
ユーザーアカウント制御ということになります。
【Windows Vista】以降から登場した【UAC】ですが
【管理者ユーザー】というのは存在しなくなり
【管理者権限で実行できるユーザー】という位置づけに代わりました。
その為、何か操作をするたびに、管理者権限が必要な操作については
その操作本当にして大丈夫?といちいち確認を促されるようになりました。
承認するとじゃあ一時的に管理者になって操作を実行するね!と
権限の昇格が行われます。
これが【UAC】の簡単な説明になります。


非常にうっとうしいのでこれを無効にします。

2.【UAC】を無効にする方法

無効にする方法は簡単です。
【コントロールパネル】→【システムとセキュリティ】→【ユーザーアカウント制御設定の変更】
をクリックすると【ユーザーアカウント制御設定】のウィンドウが表示されるので
スライダーを一番下まで下げてあげると【UAC】は無効になります。
f:id:tsu--kun:20190712134007p:plain

3.【UAC】の動作

【ユーザーアカウント制御設定】のスライダーにはレベルが4段階あり、動作が異なります。
①常に通知する。
 セキュリティで保護されたデスクトップで同意を要求する。
 昇格時のプロンプト時にセキュリティで保護されたデスクトップに切り替える
②アプリがコンピューターに変更を加えようとする場合は通知しない(規定)
 windows以外のバイナリに対する同意を要求する
 昇格時のプロンプト時にセキュリティで保護されたデスクトップに切り替える
③アプリがコンピューターに変更を加えようとする場合は通知しない(デスクトップを暗転しない)
 windows以外のバイナリに対する同意を要求する
 昇格時のプロンプト時にセキュリティで保護されたデスクトップに切り替えない
④通知しない
 確認を要求しないで昇格する。

【セキュリティで保護されたデスクトップ】とは?
下図のようにポップアップ外がグレーで塗りつぶされ
一切の操作が出来なくなる状態です。
f:id:tsu--kun:20190712134022j:plain

4.該当するレジストリ

【ユーザーアカウント制御設定】の画面から【UAC】のレベルを変更しましたが
これがレジストリのどこに該当するのか調べてみました。
実際に変化があった箇所は
【HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System】
の下記の2つです。
【ConsentPromptBehaviorAdmin】
【PromptOnSecureDesktop】

値と動作について下表にまとめてみました。

ConsentPromptBehaviorAdmin PromptOnSecureDesktop
2:セキュリティで保護されたデスクトップで同意を要求する。 1:昇格時のプロンプト時にセキュリティで保護されたデスクトップに切り替える
5:windows以外のバイナリに対する同意を要求する 1:昇格時のプロンプト時にセキュリティで保護されたデスクトップに切り替える
5:windows以外のバイナリに対する同意を要求する 0:昇格時のプロンプト時にセキュリティで保護されたデスクトップに切り替えない
0:確認を要求しないで昇格する。 0:昇格時のプロンプト時にセキュリティで保護されたデスクトップに切り替えない

5.常に管理者で実行する

これまでは【UAC】を無効にする設定でしたが
ここでは常に管理者として実行する設定についてになります。

【HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System】
にある
【EnavleUA】の値を【0】に設定すると
常に管理者として実行されるようになります。

f:id:tsu--kun:20190712134036p:plain