首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Win32 C++上获取Windows UAC级别Windows8/8.1

在Win32 C++上获取Windows UAC级别Windows8/8.1
EN

Stack Overflow用户
提问于 2014-05-13 21:34:24
回答 2查看 1.1K关注 0票数 0

我正在制作不能成为Windows8和8.1的常规服务的OpenCL服务。所以我需要作为一个应用程序启动。

我的应用程序是否需要将另一个应用程序唤醒为管理员,取决于具体情况。但我无法在Windows 8/8.1上获得UAC级别

我试过这段代码:

代码语言:javascript
运行
复制
    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,但从IsUacEnabled函数的返回值中,我始终获得TRUE。有人知道如何获得系统uac级别吗?

EN

回答 2

Stack Overflow用户

发布于 2014-05-13 21:52:41

这是一个链接器设置。

您需要在“链接器/清单文件”中将"UAC执行级别“设置为"requireAdministrator”。您可以在此处查看VisualStudio的硬拷贝:

Hardcopy: requireAdministrator settings in Visual Studio

然后在应用程序启动时,程序将以管理员权限运行。

票数 0
EN

Stack Overflow用户

发布于 2014-05-13 22:00:48

此代码获取调用应用程序的当前高程级别:

代码语言:javascript
运行
复制
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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23632755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档