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 并重新启动,但是这不是操作系统的受支持状态,并且会阻止现代应用程序 - 所以不要这样做。

[编辑]:该网站声称可以使用组策略在 Windows 8 上关闭 UAC 而不会为 MarketPlace 应用程序造成问题: http ://www.petenetlive.com/KB/Article/0000687.htm#.UOnBsm_FWrs

非常令人惊讶...似乎我将不得不更改程序的许多部分以支持 UAC :(

于 2012-12-24T13:59:29.640 回答