Проверьте, есть ли у другого процесса права администратора в .NET - PullRequest
4 голосов
/ 14 января 2011

Я ищу способ проверить, есть ли у удаленного процесса права администратора из моего (полностью управляемого) кода. Можно с уверенностью предположить, что мой код будет выполняться с правами администратора, поэтому мне все равно, насколько инвазивен этот метод для достижения моей цели, однако я ищу полностью управляемый способ, который должен быть совместим с XP SP3 x86 all путь до win7 x64.

Заранее спасибо!

Редактировать : чтобы прояснить, я говорю о процессе, запущенном на той же машине, независимо от пользователя, который его запустил. Я хочу убедиться, что удостоверение, связанное с процессом, принадлежит группе «Администраторы» или что основной поток имеет полные привилегии, особенно в отношении наследования дескрипторов, открытых процессами с повышенными правами, и записи в хранилище без каких-либо ограничений, кроме тех, которые применяются к процессам порождается с опцией «Запуск от имени администратора».

Ответы [ 4 ]

6 голосов
/ 14 января 2011

OpenProcess(PROCESS_QUERY_[LIMITED_]INFORMATION) + OpenProcessToken(TOKEN_DUPLICATE) для получения токена, затем DuplicateTokenEx(TOKEN_QUERY,SecurityImpersonation,TokenImpersonation) для получения токена олицетворения, затем передайте этот токен и SID от CreateWellKnownSid(WinBuiltinAdministratorsSid) до CheckTokenMembership.

Чтобы иметь возможность открывать (почти) каждый процесс для доступа PROCESS_QUERY_INFORMATION, вам необходимо работать от имени администратора и с привилегиями отладки . В Vista и более поздних версиях вы можете использовать PROCESS_QUERY_LIMITED_INFORMATION.

Пример кода доступен в этом ответе .

1 голос
/ 24 ноября 2018

Я создал Process.Extensions.dll расширение с использованием решения, предложенного Андерсом

https://stackoverflow.com/a/53460693/3855622

1 голос
/ 15 января 2011

Чтобы проверить, запущен ли процесс с пользователем из административной группы, вы должны использовать способ, описанный Андерсом.Чтобы проверить уровень целостности в Vista или Windows 7, используйте GetTokenInformation с указанием TokenIntegrityLevel класса токена для получения TOKEN_MANDATORY_LABEL структуры, которая содержит SID, связанный с обязательным уровнем целостности токена.

1 голос
/ 14 января 2011

Вы можете использовать GetTokenInformation или IsUserAnAdmin Вызовы API.

...