在Win32 C++上获得Windows UAC级Windows 8/8.1
我正在制作的OpenCL服务不能作为Windows 8和8.1的常规服务。 所以我需要作为一个应用程序启动 我的应用程序是否需要唤醒另一个应用程序,取决于具体情况。 但我无法在Windows 8/8.1上获得UAC级别 我尝试了以下代码:在Win32 C++上获得Windows UAC级Windows 8/8.1,c++,windows,winapi,windows-8.1,uac,C++,Windows,Winapi,Windows 8.1,Uac,我正在制作的OpenCL服务不能作为Windows 8和8.1的常规服务。 所以我需要作为一个应用程序启动 我的应用程序是否需要唤醒另一个应用程序,取决于具体情况。 但我无法在Windows 8/8.1上获得UAC级别 我尝试了以下代码: BOOL IsUacEnabled() { return checkSecurityKey(_T("EnableLUA")); } BOOL checkSecurityKey( TCHAR *lpchKey )
BOOL IsUacEnabled() {
return checkSecurityKey(_T("EnableLUA"));
}
BOOL checkSecurityKey( TCHAR *lpchKey )
{
LPCTSTR pszSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System");
LPCTSTR pszValue = lpchKey;
DWORD dwType = 0;
DWORD dwValue = 0;
DWORD dwValueSize = sizeof( DWORD );
//KEY_QUERY_VALUE
if ( ERROR_SUCCESS != SHGetValue( HKEY_LOCAL_MACHINE, pszSubKey, lpchKey,
&dwType, &dwValue, &dwValueSize) )
{
return FALSE;
}
return dwValue != 0;
}
但尽管我将uac级别禁用为0,但从isuaceEnabled函数的返回中始终得到了TRUE。
有人知道如何获取系统uac级别吗?好吧,这是一个链接器设置 您需要在链接器/清单文件中将UAC执行级别设置为requireAdministrator。您可以在此处查看VisualStudio的硬拷贝:
然后在应用程序启动时,程序将以管理员权限运行。此代码获取调用应用程序的当前提升级别:
if (IsWindowsVistaOrGreater())
{ HANDLE hToken;
BOOL bOK = OpenProcessToken(GetCurrentProcess(), TOKEN_READ, &hToken);
DWORD infoLen;
bOK = GetTokenInformation(hToken,
TokenElevationType, // type of info to retrieve
&elevationType, // receives return value
sizeof(elevationType),
&infoLen); // receives returned length
}
没有必要询问任何人。。。只需以管理员身份执行应用程序,然后无论是否启用,都会显示UAC。。。你为什么这么麻烦???你不需要知道UAC的现行政策是什么。你能更好地解释你实际上想做什么吗?类似的来源: