4

Windows XP / Windows 7 では、レジストリをチェックして UAC が有効になっているかどうかを確認できましたが、このトリックは Windows 8 では機能しません。

BOOL FileOps::IsUacEnabled()
{
    LPCTSTR pszSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System");
    LPCTSTR pszValueOn = _T("EnableLUA");
    DWORD dwType = 0;
    DWORD dwValue = 0;
    DWORD dwValueSize = sizeof( DWORD );

    if ( ERROR_SUCCESS != SHGetValue( HKEY_LOCAL_MACHINE, pszSubKey, pszValueOn, 
        &dwType, &dwValue, &dwValueSize) )
    {
            return FALSE;
    }

    return dwValue != 0;
}

この関数は、Windows 8 から使用すると、UAC が有効になっていることを常に返します。私が見た他の方法も同様に失敗します。

HANDLE hToken; 
TOKEN_ELEVATION_TYPE elevationType; 
DWORD dwSize;

OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken); 
GetTokenInformation(hToken, TokenElevationType, &elevationType, sizeof(elevationType), &dwSize);

bool bUAC_Enabled = false;

switch (elevationType) { 
case TokenElevationTypeDefault: 

  wprintf(TEXT("\nTokenElevationTypeDefault - User is not using a split token.\n")); 
  break; 
case TokenElevationTypeFull: 

  wprintf(TEXT("\nTokenElevationTypeFull - User has a split token, and the process is running elevated.\n")); 
  break; 
case TokenElevationTypeLimited: 

  wprintf(TEXT("\nTokenElevationTypeLimited - User has a split token, but the process is not running elevated.\n")); 
  break; 
}

if (hToken) { 
CloseHandle(hToken); 
} 

何か案は?

4

1 に答える 1

1

Windows-8 で UAC をオフにするのは、Windows-7 とは異なるようです。「ユーザー アカウント制御設定の変更」画面でバーを下にスライドすると、Windows-8 では機能が異なります。UAC をまったく無効にするわけではありません。次のリンクは次のように述べています: UAC を実際に無効にするには (Windows-8 の場合)、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System のレジストリの EnableLUA 値を 0 に変更して再起動する必要がありますが、これは OS のサポートされている状態ではなく、最新のアプリケーションをブロックするため、これを行わないでください。

[編集]: このサイトでは、グループ ポリシーを使用して、MarketPlace アプリに問題を発生させずに Windows 8 で UAC をオフにできると主張しています: http://www.petenetlive.com/KB/Article/0000687.htm#.UOnBsm_FWrs

非常に驚くべきことです... UACをサポートするには、プログラムの多くの部分を変更する必要があるようです:(

于 2012-12-24T13:59:29.640 に答える