Я пытаюсь отключить локальный компьютер через веб-службу, размещенную в IIS.
У меня есть IIS AppPool под названием "Foobar", поэтому его полной строкой будет «IIS AppPool\Foobar». Этот пул приложений в настоящее время работает под именем "LocalSystem".
Когда я выключаю компьютер, вызывая bool ExitWindowsEx(int flags, int reason);
(например, ExitWindowsEx(EWX_SHUTDOWN, 0)
) в коде ASP.NET, Windows дает мне
Код системной ошибки 1314 (0x522) - требуемая привилегия не удерживается клиентом
Однако, если я изменяю идентификатор Foobar IIS AppPool на пользователя ОС администратора вместо LocalSystem, он позволяет мне выключить компьютер из веб-службы. Но я не хочу работать под учетной записью администратора ОС (да, я знаю, что SYSTEM также имеет высокие привилегии, но она не позволяет мне выключать компьютер).
Вопрос: Как я могу сделать так, чтобы я мог успешно вызывать ExitWindowsEx из встроенной учетной записи LocalSystem (или даже из встроенного ApplicationPoolIdentity) вместо использования идентификатора пользователя ОС?
Я пытался:
Редактирование локальной политики. В локальной политике безопасности как SYSTEM, так и «IIS APPPOOL\Foobar» могут "Завершение работы системы" и "Принудительное завершение работы из удаленной системы".
Используя ntrights
ntrights -u "IIS AppPool\Foobar" +r SeRemoteShutdownPrivilege
и ntrights -u "IIS AppPool\Foobar" +r SeShutdownPrivilege
Ни одна ошибка 1314 не исчезнет.