UAC или привилегии юзера

Простейшие вопросы в области инженерной разработки
Ответить
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

UAC или привилегии юзера

Сообщение jane_wild »

Собственно вопрос прост до безобразия. Суть вот в чем. Как узнать с какими привилегиями запущена xxx*exe программа? Идея такая: Если юзер залогинился в Windows как администратор, то активировать кнопку входа в меню конфигурации, если как простой пользователь, то disable (либо вообще спрятать) кнопочку. Нечего ему там делать. :wink: Видела такое на .NET
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: UAC или привилегии юзера

Сообщение Vitekkz88 »

jane_wild, про API-шную функцию такого плана не знаю. Знаю, что можно получить список имён учетных записей и текущую учетную запись с помощью API-шной функции. Но хард-код Вас вряд ли заинтересует. Поменяли имя админской записи - придётся менять условие проверки по имени.
Можно попробовать средствами LabVIEW это сделать. Например создать папку и настроить права таким образом, чтоб записывать туда мог только пользователь с правами администратора. Если при попытке записи получаем ошибку - значит у пользователя недостаточно привилегий для записи файла в указанную папку.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Artem.spb

Activity Автор
professor
professor
Сообщения: 3391
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: UAC или привилегии юзера

Сообщение Artem.spb »

Если заморочиться с парсингом, то так:
admin.png
из недосттатков: надо отслеживать язык. На русской винде вместо admin.. будет админ...
но если приложение для одного компа, то какая разница.
Аватара пользователя
ladik

Silver
developer
developer
Сообщения: 275
Зарегистрирован: 18 ноя 2014, 11:45
Награды: 1
Версия LabVIEW: 2015, 2019
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 3 раза
Контактная информация:

Re: UAC или привилегии юзера

Сообщение ladik »

Попробуйте так:
LV2011 Example
LV2011 Example
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

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: UAC или привилегии юзера

Сообщение dadreamer »

Способы, работающие через WinAPI:
1. IsUserAnAdmin - простейшая функция; считается устаревшей, но до сих пор работает.
2. GetTokenInformation: https://stackoverflow.com/questions/804 ... ive-rights
3. CheckTokenMembership: http://www.cyberforum.ru/win-api/thread1981756.html
4. есть и другие, но мне уже лень гуглить :wink:
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

Re: UAC или привилегии юзера

Сообщение jane_wild »

Выбрала этот вариант. Работает замечательно.
ladik писал(а):Попробуйте так:
Вложение Example.png больше недоступно
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
Сначала хотела использовать IsUserAnAdmin не получилось. Видимо что то не так делала. Для Call Library Function Node указала путь C:\Windows\System32 Далее выбрала упомянутую функцию, указала возвращаемый параметр как Signed 32-bit Integer (boolean там нет :) )
Shell32.png
Ну и после вызова проверяла на "больше чем ноль" В скомпилированом файле возвращает всегда false.
Admin.png
Admin.png (2.51 КБ) 5786 просмотров
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: UAC или привилегии юзера

Сообщение Vitekkz88 »

jane_wild, а вы попробуйте LabVIEW запускать в явном виде от имени администратора. ПКМ - > запуск от имени администратора.
Скорее всего политика безопасности на Вашем ПК настроена не так,как Вам требуется. А почему не использовать вариант с WHOAMI? У меня сработало нормально. Правда я не знаю, всегда ли SID группы администраторов является постоянным на разных семействах Windows. Я, например, на Win 10 проверял и всё гут :crazy:
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
ladik

Silver
developer
developer
Сообщения: 275
Зарегистрирован: 18 ноя 2014, 11:45
Награды: 1
Версия LabVIEW: 2015, 2019
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 3 раза
Контактная информация:

Re: UAC или привилегии юзера

Сообщение ladik »

Vitekkz88, вот что говорит Microsoft:
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.
https://technet.microsoft.com/ru-ru/lib ... s.11).aspx.

Плюс на Win10 Вы уже проверили.
Дорогу осилит идущий.
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: UAC или привилегии юзера

Сообщение Vitekkz88 »

ladik, ну и замечательно! :super: Я бы этот метод и использовал. Вполне себе годная реализация. Куда проще, чем с созданием файла в админской папке. И куда приятней, нежели чем капашиться в .dll .
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: UAC или привилегии юзера

Сообщение dadreamer »

jane_wild писал(а):Для Call Library Function Node указала путь C:\Windows\System32
Для системных библиотек не нужно указывать полный путь. Нужно просто ввести shell32.dll, :labview: сам найдёт указанную библиотеку.
jane_wild писал(а):Далее выбрала упомянутую функцию, указала возвращаемый параметр как Signed 32-bit Integer (boolean там нет :) )
Это верно. Только CLFN должен быть жёлтого цвета (Run in any thread).
jane_wild писал(а):Ну и после вызова проверяла на "больше чем ноль" В скомпилированом файле возвращает всегда false.
Если у вас включен UAC, то нужно явно повышать привилегии пользователя, даже если он состоит в группе "Администраторы". Нажмите ПКМ -> Запуск от имени администратора. Если же UAC в режиме "никогда не уведомлять", но стоит политика на одобрение администратором (по умолчанию активирована), то экзешник всегда будет запускаться с пониженными правами, даже если выберете запуск от администратора. Чтобы экзешник по умолчанию запускался с повышенными правами (elevated), нужно кроме UAC отключить и вот эту опцию: Пуск -> Выполнить -> gpedit.msc -> Конфигурация Windows -> Параметры безопасности -> Локальные политики -> Параметры безопасности -> Контроль учётных записей: все администраторы работают в режиме одобрения администратором (выставить в "Отключен" и перезагрузить компьютер).
Примечание: начиная с Windows 8.1 эта политика не отключается автоматом при переводе UAC в режим "никогда не уведомлять", то есть, её нужно отключать вручную.
Хотя, конечно, нужно понимать, что работа из-под полноценного администратора небезопасна, поскольку всем приложениям разрешён полный доступ к системе.

В общем, следуя вышеописанной логике функция IsUserAnAdmin работает исправно (проверил на Win 8.1, думаю, на 10-ке будет то же самое).

Кстати говоря, можно сделать так, чтобы экзешник всегда просил elevation (запрос на повышение прав). Для этого в :labview: в параметрах билда нужно импортировать вот такой манифест:

Код: Выделить всё

<?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 .
Там же ничего сложного, тем более для продвинутого пользователя :labview: :wink: Зато работает побыстрее прочих методов. Хотя в конкретном случае скорость не важна. Но всё же.
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: UAC или привилегии юзера

Сообщение Vitekkz88 »

dadreamer, та я понимаю. На десятке всё работает, кстати. Запустил из админки и получил единичку с выхода функции. Запустил с ограниченными правами, нолик получил. Но чтоб получить 1 делал как раз выше описанные манипуляции, воооот:-)
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: UAC или привилегии юзера

Сообщение dadreamer »

Vitekkz88, я это к чему всё написал - просто тот путь, что выбрала jane_wild, получается маленько "в обход" политик винды. Не зря же все проги запускаются с минимумом прав. Тогда смысл вообще привязывать ту кнопку к группе, куда относится текущий юзер?.. Логичнее тогда сделать отдельный механизм авторизации.

Ну и до кучи, способ с анализом группы не сработает, когда юзер запустит экзешник в elevated-режиме (мало ли, админ позволит или ещё что).
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: UAC или привилегии юзера

Сообщение Vitekkz88 »

dadreamer, кстати да, вот на счёт запуска исполняемого файла верно замечено. Надо проверить, как себя это ведёт, я не пробовал. Однако в своё время на славу мозг парил как убрать сообщение, которое появляется когда запускаешь от имени администратора(через свойства ставил запуск от имени админа, затем по двойному клику запускаешь прогу и сообщение типа. Данная программа может или хочет и т.д.)
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Ответить

Вернуться в «Для чайников»