在Win32 C++上获得Windows UAC级Windows 8/8.1

在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 )

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

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

我尝试了以下代码:

    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的现行政策是什么。你能更好地解释你实际上想做什么吗?类似的来源: