Статус UAC без чтения реестра - PullRequest
2 голосов
/ 22 декабря 2009

Существует простой способ прочитать реестр и получить оттуда статус UAC. Единственная проблема заключается в том, что если вы не являетесь администратором или UAC включен, вы не можете прочитать этот конкретный ключ.

Есть ли способ (API и т. Д.) Для получения статуса UAC точно без необходимости чтения реестра?

Пример кода всегда приветствуется. Спасибо!

Jess

EDIT: Я начинаю щедрость. ПОЖАЛУЙСТА, ПОЖАЛУЙСТА, если вы собираетесь ответить, не говорите мне, как я не должен заботиться о статусе UAC и о том, что код должен быть независимым от UAC и как Microsoft хороша.

Ответы [ 5 ]

3 голосов
/ 05 января 2010

Хорошо, построим ответ на то, что ssg / comments уже сказал:

http://www.softblog.com/2008-02/vista-tools/

Проверяет как высоту, так и статус UAC. Сначала как

Как я могу определить, работает ли мой процесс с повышенными правами UAC или нет?

уже упоминает, он проверит ElevationStatus. После этого это пытается запустить подпроцесс с повышенным статусом, который потерпит неудачу если стандартный пользователь вошел в систему, определяет статус UAC.

И нет, он не использует реестр.

3 голосов
/ 22 декабря 2009

Из интернета:

HANDLE tokenHandle; 
OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &tokenHandle); 

DWORD tokenInformationBufferLength = 0; 
TOKEN_ELEVATION_TYPE tokenElevation;
GetTokenInformation(tokenHandle, TokenElevationType, &tokenElevation, sizeof(tokenElevation), &tokenInformationBufferLength); 
1 голос
/ 28 декабря 2009

Что я сделал для решения этой проблемы: если у меня были права администратора в соответствии с вызовом API, я считал значение реестра (UAC предоставляет ложную проверку прав администратора) и если у меня не было прав администратора, я попытался создать новое введите HKEY_LOCAL_MACHINE \ Software. Если это удалось, UAC был включен, и я удалил ключ.

1 голос
/ 22 декабря 2009

Не совсем, куда вы смотрите, я полагаю ... но если чтение из реестра возвращает ошибку доступа к ключу, это фактически ответ, который вы ищете - UAC включен.

0 голосов
/ 03 января 2010

Во-первых, вы действительно не хотите искать способ «обойти» функции безопасности операционной системы. Даже если вы найдете решение, которое работает прямо сейчас, Microsoft может (и делает) изменять эти функции с помощью Центра обновления Windows и в будущем сломает ваше приложение. Борьба с функциями безопасности - тяжелая битва, и она будет постоянной головной болью для вас. Хотелось бы услышать больше ваших вопросов о StackOverflow :), скорее всего, это не тот путь, по которому вы хотите идти.

Тем не менее, я думаю, вы ошибаетесь. Если ваш менеджер не хочет, чтобы вы решили проблему, тогда ваш менеджер принял проблему. Просто пометьте все приложение как «должно работать в режиме администратора» и покончите с этим. Пользователи получат одно предупреждение при запуске приложения, а затем приложение будет запущено для них. Вот ссылка, чтобы показать вам, как установить эту опцию .

Конечно, если вы не обладаете правами администратора на своем компьютере, вам, в основном, не повезло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...