Я работаю над системой, в которой различные службы Windows работают на разных компьютерах в частной сети. На любом из компьютеров в сети могут быть запущены клиентские приложения, взаимодействующие с этими службами удаленно. В рамках нашего пакета у нас есть функциональные возможности, которые позволяют пользователям видеть, возникают ли проблемы с какими-либо службами в сети, и перезапускать любые из них, которые отключены.
Чтобы заставить это работать, мы использовали имперсонацию пользователя и класс Service Controller: мы просим пользователей предоставить имя пользователя и пароль учетной записи администратора на компьютере, на котором размещена отключенная служба, выдайте себя за этого администратора, а затем перезапустите службу с помощью ServiceController. Это работает в большинстве ситуаций, но мы не можем выдавать себя за администраторов на некоторых наших серверах. Насколько я понимаю, для работы олицетворения пользователя олицетворяемые учетные записи должны находиться на локальном компьютере или входить в группу Active Directory, но рассматриваемые серверы имеют только локальные учетные записи для себя.
Я заметил, что у метода LogonUser
, который запускает олицетворение, есть много параметров, и начал играть с ними, чтобы посмотреть, решит ли какой-нибудь из них мою проблему. Когда я попытался установить для параметра LogonType значение «Новые учетные данные» (9), я увидел странное (но потенциально полезное) поведение:
- Я могу перезапустить службы на серверах, с которыми раньше не мог работать
- Если я попытаюсь перезапустить отключенную службу и укажу неверный пароль, служба все равно будет перезапущена.
Почему я вижу такое поведение? Если причины для этого веские, я мог бы использовать эту настройку, чтобы полностью избавиться от запроса пользователей на вход в систему.