[英]How to programmatically detect whether UAC is enabled in Windows 8 using C++?
在 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);
}
有任何想法吗?
在 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 :(
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.