Я пытаюсь отключить локальный компьютер через веб-службу, размещенную в 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) вместо использования идентификатора пользователя ОС?

Я пытался:

  1. Редактирование локальной политики. В локальной политике безопасности как SYSTEM, так и «IIS APPPOOL\Foobar» могут "Завершение работы системы" и "Принудительное завершение работы из удаленной системы".

  2. Используя ntrights

    ntrights -u "IIS AppPool\Foobar" +r SeRemoteShutdownPrivilege

и ntrights -u "IIS AppPool\Foobar" +r SeShutdownPrivilege

Ни одна ошибка 1314 не исчезнет.

0