コンピュータの設定でUACが有効になっているかを調べる方法を紹介します。
UACの設定は、レジストリの「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System」に保存されています。このキーにある「EnableLUA」の値が存在しないか0の時はUACが無効で、0以外(大抵は1)の時はUACが有効です。
この方法でUACが有効になっているか調べるメソッドの例を示します。
''' <summary> ''' UACが有効になっているかを調べる ''' </summary> ''' <returns>UACが有効になっている時はtrue。</returns> Public Shared Function IsUacEnabled() As Boolean 'キーを開く Dim regKey As Microsoft.Win32.RegistryKey = _ Microsoft.Win32.Registry.LocalMachine.OpenSubKey( _ "SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System") 'キーが見つからない時はUACが有効ではない If regKey Is Nothing Then Return False End If '値を読み取る Dim val As Integer = CInt(regKey.GetValue("EnableLUA", 0)) '0以外の時はUACが有効 Return val <> 0 End Function
/// <summary> /// UACが有効になっているかを調べる /// </summary> /// <returns>UACが有効になっている時はtrue。</returns> public static bool IsUacEnabled() { //キーを開く Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey( @"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"); //キーが見つからない時はUACが有効ではない if (regKey == null) return false; //値を読み取る int val = (int)regKey.GetValue("EnableLUA", 0); //0以外の時はUACが有効 return val != 0; }
レジストリの設定と現在のUACの状態が完全に一致するとは断定できません。例えば、設定を変更しても、再起動前でその設定が反映されていない状況もあり得ます。
現在UACが有効になっているかを調べるには、GetTokenInformation関数を使って現在のユーザーの昇格の状態を調べる方法があります。GetTokenInformationで取得したTOKEN_ELEVATION_TYPEがTokenElevationTypeFullかTokenElevationTypeLimitedであれば、ユーザーは分割されたトークンを使っているので、UACは有効になっています。TokenElevationTypeDefaultであれば、分割されたトークンは使われていないため、UACが無効になっているか、標準ユーザーかのどちらか(あるいは両方)です。
GetTokenInformationでTOKEN_ELEVATION_TYPEを取得するコードは「現在のユーザーが管理者か調べる」で紹介していますので、そちらをご覧ください。
以下に、「現在のユーザーが管理者か調べる」で紹介しているGetTokenElevationTypeメソッドを使ってUACが有効になっているか調べる例を示します。
Dim tet As TOKEN_ELEVATION_TYPE = GetTokenElevationType() If tet = TOKEN_ELEVATION_TYPE.TokenElevationTypeDefault Then Console.WriteLine("UACが無効になっているか、標準ユーザーです") Else Console.WriteLine("UACが有効になっています") End If
TOKEN_ELEVATION_TYPE tet = GetTokenElevationType(); if (tet == TOKEN_ELEVATION_TYPE.TokenElevationTypeDefault) { Console.WriteLine("UACが無効になっているか、標準ユーザーです"); } else { Console.WriteLine("UACが有効になっています"); }
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。