UAC или привилегии юзера
- jane_wild
- master
- Сообщения: 459
- Зарегистрирован: 30 июн 2016, 02:11
- Версия LabVIEW: 2020
- Благодарил (а): 83 раза
- Поблагодарили: 15 раз
- Контактная информация:
UAC или привилегии юзера
Собственно вопрос прост до безобразия. Суть вот в чем. Как узнать с какими привилегиями запущена xxx*exe программа? Идея такая: Если юзер залогинился в Windows как администратор, то активировать кнопку входа в меню конфигурации, если как простой пользователь, то disable (либо вообще спрятать) кнопочку. Нечего ему там делать. Видела такое на .NET
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: UAC или привилегии юзера
jane_wild, про API-шную функцию такого плана не знаю. Знаю, что можно получить список имён учетных записей и текущую учетную запись с помощью API-шной функции. Но хард-код Вас вряд ли заинтересует. Поменяли имя админской записи - придётся менять условие проверки по имени.
Можно попробовать средствами LabVIEW это сделать. Например создать папку и настроить права таким образом, чтоб записывать туда мог только пользователь с правами администратора. Если при попытке записи получаем ошибку - значит у пользователя недостаточно привилегий для записи файла в указанную папку.
Можно попробовать средствами LabVIEW это сделать. Например создать папку и настроить права таким образом, чтоб записывать туда мог только пользователь с правами администратора. Если при попытке записи получаем ошибку - значит у пользователя недостаточно привилегий для записи файла в указанную папку.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
- professor
- Сообщения: 3404
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 175 раз
- Контактная информация:
Re: UAC или привилегии юзера
Если заморочиться с парсингом, то так:
но если приложение для одного компа, то какая разница.
из недосттатков: надо отслеживать язык. На русской винде вместо admin.. будет админ...но если приложение для одного компа, то какая разница.
-
ladik
- developer
- Сообщения: 275
- Зарегистрирован: 18 ноя 2014, 11:45
- Награды: 1
- Версия LabVIEW: 2015, 2019
- Откуда: Екатеринбург
- Благодарил (а): 4 раза
- Поблагодарили: 3 раза
- Контактная информация:
Re: UAC или привилегии юзера
Попробуйте так:
SID S-1-5-32-544 сообщает о том, что пользователь состоит в группе "Администраторы". [2]
1. https://technet.microsoft.com/ru-ru/lib ... s.10).aspx
2. https://support.microsoft.com/ru-ru/hel ... ng-systems
WHOAMI - Displays user, group and privileges information for the user who is currently logged on to the local system. [1]
SID S-1-5-32-544 сообщает о том, что пользователь состоит в группе "Администраторы". [2]
1. https://technet.microsoft.com/ru-ru/lib ... s.10).aspx
2. https://support.microsoft.com/ru-ru/hel ... ng-systems
Дорогу осилит идущий.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: UAC или привилегии юзера
Способы, работающие через WinAPI:
1. IsUserAnAdmin - простейшая функция; считается устаревшей, но до сих пор работает.
2. GetTokenInformation: https://stackoverflow.com/questions/804 ... ive-rights
3. CheckTokenMembership: http://www.cyberforum.ru/win-api/thread1981756.html
4. есть и другие, но мне уже лень гуглить
1. IsUserAnAdmin - простейшая функция; считается устаревшей, но до сих пор работает.
2. GetTokenInformation: https://stackoverflow.com/questions/804 ... ive-rights
3. CheckTokenMembership: http://www.cyberforum.ru/win-api/thread1981756.html
4. есть и другие, но мне уже лень гуглить
- jane_wild
- master
- Сообщения: 459
- Зарегистрирован: 30 июн 2016, 02:11
- Версия LabVIEW: 2020
- Благодарил (а): 83 раза
- Поблагодарили: 15 раз
- Контактная информация:
Re: UAC или привилегии юзера
Выбрала этот вариант. Работает замечательно.
Сначала хотела использовать IsUserAnAdmin не получилось. Видимо что то не так делала. Для Call Library Function Node указала путь C:\Windows\System32 Далее выбрала упомянутую функцию, указала возвращаемый параметр как Signed 32-bit Integer (boolean там нет :) ) Ну и после вызова проверяла на "больше чем ноль" В скомпилированом файле возвращает всегда false.ladik писал(а):Попробуйте так:WHOAMI - Displays user, group and privileges information for the user who is currently logged on to the local system. [1]
SID S-1-5-32-544 сообщает о том, что пользователь состоит в группе "Администраторы". [2]
1. https://technet.microsoft.com/ru-ru/lib ... s.10).aspx
2. https://support.microsoft.com/ru-ru/hel ... ng-systems
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: UAC или привилегии юзера
jane_wild, а вы попробуйте LabVIEW запускать в явном виде от имени администратора. ПКМ - > запуск от имени администратора.
Скорее всего политика безопасности на Вашем ПК настроена не так,как Вам требуется. А почему не использовать вариант с WHOAMI? У меня сработало нормально. Правда я не знаю, всегда ли SID группы администраторов является постоянным на разных семействах Windows. Я, например, на Win 10 проверял и всё гут
Скорее всего политика безопасности на Вашем ПК настроена не так,как Вам требуется. А почему не использовать вариант с WHOAMI? У меня сработало нормально. Правда я не знаю, всегда ли SID группы администраторов является постоянным на разных семействах Windows. Я, например, на Win 10 проверял и всё гут
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
ladik
- developer
- Сообщения: 275
- Зарегистрирован: 18 ноя 2014, 11:45
- Награды: 1
- Версия LabVIEW: 2015, 2019
- Откуда: Екатеринбург
- Благодарил (а): 4 раза
- Поблагодарили: 3 раза
- Контактная информация:
Re: UAC или привилегии юзера
Vitekkz88, вот что говорит Microsoft:
Плюс на Win10 Вы уже проверили.
https://technet.microsoft.com/ru-ru/lib ... s.11).aspx.Applies To: Windows Server 2003, Windows Vista, Windows XP, Windows Server 2008, Windows 7, Windows Server 2003 R2, Windows Server 2008 R2, Windows Server 2000, Windows Server 2012, Windows 8.
Плюс на Win10 Вы уже проверили.
Дорогу осилит идущий.
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: UAC или привилегии юзера
ladik, ну и замечательно! Я бы этот метод и использовал. Вполне себе годная реализация. Куда проще, чем с созданием файла в админской папке. И куда приятней, нежели чем капашиться в .dll .
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: UAC или привилегии юзера
Для системных библиотек не нужно указывать полный путь. Нужно просто ввести shell32.dll, сам найдёт указанную библиотеку.jane_wild писал(а):Для Call Library Function Node указала путь C:\Windows\System32
Это верно. Только CLFN должен быть жёлтого цвета (Run in any thread).jane_wild писал(а):Далее выбрала упомянутую функцию, указала возвращаемый параметр как Signed 32-bit Integer (boolean там нет :) )
Если у вас включен UAC, то нужно явно повышать привилегии пользователя, даже если он состоит в группе "Администраторы". Нажмите ПКМ -> Запуск от имени администратора. Если же UAC в режиме "никогда не уведомлять", но стоит политика на одобрение администратором (по умолчанию активирована), то экзешник всегда будет запускаться с пониженными правами, даже если выберете запуск от администратора. Чтобы экзешник по умолчанию запускался с повышенными правами (elevated), нужно кроме UAC отключить и вот эту опцию: Пуск -> Выполнить -> gpedit.msc -> Конфигурация Windows -> Параметры безопасности -> Локальные политики -> Параметры безопасности -> Контроль учётных записей: все администраторы работают в режиме одобрения администратором (выставить в "Отключен" и перезагрузить компьютер).jane_wild писал(а):Ну и после вызова проверяла на "больше чем ноль" В скомпилированом файле возвращает всегда false.
Примечание: начиная с Windows 8.1 эта политика не отключается автоматом при переводе UAC в режим "никогда не уведомлять", то есть, её нужно отключать вручную.
Хотя, конечно, нужно понимать, что работа из-под полноценного администратора небезопасна, поскольку всем приложениям разрешён полный доступ к системе.
В общем, следуя вышеописанной логике функция IsUserAnAdmin работает исправно (проверил на Win 8.1, думаю, на 10-ке будет то же самое).
Кстати говоря, можно сделать так, чтобы экзешник всегда просил elevation (запрос на повышение прав). Для этого в в параметрах билда нужно импортировать вот такой манифест:
Код: Выделить всё
<?xml version="1.0" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.1.1.1" processorArchitecture="*" name="Здесь_имя_вашей_программы.exe" type="win32"/>
<description>elevate execution level</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Там же ничего сложного, тем более для продвинутого пользователя Зато работает побыстрее прочих методов. Хотя в конкретном случае скорость не важна. Но всё же.Vitekkz88 писал(а):И куда приятней, нежели чем капашиться в .dll .
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: UAC или привилегии юзера
dadreamer, та я понимаю. На десятке всё работает, кстати. Запустил из админки и получил единичку с выхода функции. Запустил с ограниченными правами, нолик получил. Но чтоб получить 1 делал как раз выше описанные манипуляции, воооот:-)
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: UAC или привилегии юзера
Vitekkz88, я это к чему всё написал - просто тот путь, что выбрала jane_wild, получается маленько "в обход" политик винды. Не зря же все проги запускаются с минимумом прав. Тогда смысл вообще привязывать ту кнопку к группе, куда относится текущий юзер?.. Логичнее тогда сделать отдельный механизм авторизации.
Ну и до кучи, способ с анализом группы не сработает, когда юзер запустит экзешник в elevated-режиме (мало ли, админ позволит или ещё что).
Ну и до кучи, способ с анализом группы не сработает, когда юзер запустит экзешник в elevated-режиме (мало ли, админ позволит или ещё что).
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: UAC или привилегии юзера
dadreamer, кстати да, вот на счёт запуска исполняемого файла верно замечено. Надо проверить, как себя это ведёт, я не пробовал. Однако в своё время на славу мозг парил как убрать сообщение, которое появляется когда запускаешь от имени администратора(через свойства ставил запуск от имени админа, затем по двойному клику запускаешь прогу и сообщение типа. Данная программа может или хочет и т.д.)
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын