Как программно определить, включен ли UAC в Windows 8 с использованием 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;
}

Эта функция всегда возвращает, что UAC включен при использовании из Windows 8.
Другие методы, которые я видел, также терпят неудачу:

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);
}

Есть идеи?

4

Решение

Кажется, что отключение UAC в Windows-8 отличается от Windows-7. Сдвиг панели вниз на экране «Изменение настроек контроля учетных записей» работает по-разному в Windows-8. Это вообще не отключает UAC.
Следующие ССЫЛКА НА САЙТ говорит:
Чтобы действительно отключить UAC (в Windows-8), вам нужно изменить значение EnableLUA в реестре по адресу HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System на значение 0 и перезагрузиться, но это не поддерживается состояние ОС и будет блокировать современные приложения — так что не делайте этого.

[Редактировать]: этот сайт утверждает, что можно отключить UAC в Windows 8, не создавая проблем для приложений MarketPlace, используя групповые политики:
http://www.petenetlive.com/KB/Article/0000687.htm#.UOnBsm_FWrs

Очень удивительно … кажется, мне придется изменить многие части моей программы для поддержки UAC 🙁

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]