簡體   English   中英

如何使用 C++ 以編程方式檢測是否在 Windows 8 中啟用了 UAC?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM