Страница 1 из 1

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

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

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

Добавлено: 15 ноя 2017, 05:25
Vitekkz88
jane_wild, про API-шную функцию такого плана не знаю. Знаю, что можно получить список имён учетных записей и текущую учетную запись с помощью API-шной функции. Но хард-код Вас вряд ли заинтересует. Поменяли имя админской записи - придётся менять условие проверки по имени.
Можно попробовать средствами LabVIEW это сделать. Например создать папку и настроить права таким образом, чтоб записывать туда мог только пользователь с правами администратора. Если при попытке записи получаем ошибку - значит у пользователя недостаточно привилегий для записи файла в указанную папку.

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

Добавлено: 15 ноя 2017, 09:11
Artem.spb
Если заморочиться с парсингом, то так:
admin.png
из недосттатков: надо отслеживать язык. На русской винде вместо admin.. будет админ...
но если приложение для одного компа, то какая разница.

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

Добавлено: 15 ноя 2017, 12:03
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

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

Добавлено: 15 ноя 2017, 14:56
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:

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

Добавлено: 16 ноя 2017, 00:08
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 КБ) 5794 просмотра

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

Добавлено: 16 ноя 2017, 05:20
Vitekkz88
jane_wild, а вы попробуйте LabVIEW запускать в явном виде от имени администратора. ПКМ - > запуск от имени администратора.
Скорее всего политика безопасности на Вашем ПК настроена не так,как Вам требуется. А почему не использовать вариант с WHOAMI? У меня сработало нормально. Правда я не знаю, всегда ли SID группы администраторов является постоянным на разных семействах Windows. Я, например, на Win 10 проверял и всё гут :crazy:

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

Добавлено: 16 ноя 2017, 09:31
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 Вы уже проверили.

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

Добавлено: 16 ноя 2017, 10:04
Vitekkz88
ladik, ну и замечательно! :super: Я бы этот метод и использовал. Вполне себе годная реализация. Куда проще, чем с созданием файла в админской папке. И куда приятней, нежели чем капашиться в .dll .

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

Добавлено: 16 ноя 2017, 13:12
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: Зато работает побыстрее прочих методов. Хотя в конкретном случае скорость не важна. Но всё же.

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

Добавлено: 16 ноя 2017, 15:15
Vitekkz88
dadreamer, та я понимаю. На десятке всё работает, кстати. Запустил из админки и получил единичку с выхода функции. Запустил с ограниченными правами, нолик получил. Но чтоб получить 1 делал как раз выше описанные манипуляции, воооот:-)

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

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

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

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

Добавлено: 16 ноя 2017, 17:22
Vitekkz88
dadreamer, кстати да, вот на счёт запуска исполняемого файла верно замечено. Надо проверить, как себя это ведёт, я не пробовал. Однако в своё время на славу мозг парил как убрать сообщение, которое появляется когда запускаешь от имени администратора(через свойства ставил запуск от имени админа, затем по двойному клику запускаешь прогу и сообщение типа. Данная программа может или хочет и т.д.)