Информация об изменениях

Сообщение Re: Детект прав админа у пользователя от 28.03.2024 16:43

Изменено 28.03.2024 16:46 Pavel Dvorkin

Re: Детект прав админа у пользователя
Здравствуйте, VladD2, Вы писали:

VD>В продукте есть функционал по обновлению стороннего софта. Для большинства обновлений требуются права администратора. В этом случае пользователю выдается стандартный виндовый диалог ввода учетки и пароля.


VD>Стоит задача понять, что пользователь имеет права локального админа (и стало быть способен произвести обновление софта).


VD>Желательно сделать проверку без привлечения лишних (особенно сторонних) либ.


VD>Как проще всего это сделать?


VD>На входе есть имя учетки (включая домен или имя компа) и пароль.


LogonUser взять здесь и получить safeTokenHandle

https://learn.microsoft.com/ru-ru/dotnet/api/system.security.principal.windowsimpersonationcontext?view=netframework-4.8.1&viewFallbackFrom=net-8.0

Потом сделать WindowsIdentity по нему

https://learn.microsoft.com/ru-ru/dotnet/api/system.security.principal.windowsidentity.-ctor?view=net-8.0#system-security-principal-windowsidentity-ctor(system-intptr)

А потом по нему получить WindowsPrincipal и проверить роль

https://stackoverflow.com/questions/3600322/check-if-the-current-user-is-administrator

Как-то примерно так
Re: Детект прав админа у пользователя
Здравствуйте, VladD2, Вы писали:

VD>В продукте есть функционал по обновлению стороннего софта. Для большинства обновлений требуются права администратора. В этом случае пользователю выдается стандартный виндовый диалог ввода учетки и пароля.


VD>Стоит задача понять, что пользователь имеет права локального админа (и стало быть способен произвести обновление софта).


VD>Желательно сделать проверку без привлечения лишних (особенно сторонних) либ.


VD>Как проще всего это сделать?


VD>На входе есть имя учетки (включая домен или имя компа) и пароль.


LogonUser взять здесь и получить safeTokenHandle

https://learn.microsoft.com/ru-ru/dotnet/api/system.security.principal.windowsimpersonationcontext?view=netframework-4.8.1&viewFallbackFrom=net-8.0

Потом сделать WindowsIdentity по нему

https://learn.microsoft.com/ru-ru/dotnet/api/system.security.principal.windowsidentity.-ctor?view=net-8.0#system-security-principal-windowsidentity-ctor(system-intptr)

А потом по нему получить WindowsPrincipal и проверить роль

https://stackoverflow.com/questions/3600322/check-if-the-current-user-is-administrator

После всех действий в WinAPI надо закрыть handle — CloseHandle на safeTokenHandle.

Как-то примерно так