Estou tentando desligar o computador local por meio do serviço da Web hospedado pelo IIS.
Eu tenho um AppPool do IIS chamado "Foobar", portanto, sua string completa seria "IIS AppPool \ Foobar". Este pool de aplicativos atualmente é executado sob a identidade "LocalSystem".
Quando encerro o computador chamando bool ExitWindowsEx(int flags, int reason);
(por exemplo, ExitWindowsEx(EWX_SHUTDOWN, 0)
) no código ASP.NET, o Windows me dá
System Error Code 1314 (0x522) - A required privilege is not held by the client
No entanto, se eu alterar a Identidade do AppPool IIS do Foobar para um usuário do sistema operacional do administrador em vez do LocalSystem, ele me permite desligar o computador do serviço da Web. Mas eu não quero correr com uma conta do sistema operacional do administrador (sim, eu sei que o SYSTEM também é altamente privilegiado, mas não me deixa desligar o computador).
Pergunta: Como posso fazer isso para que eu possa chamar ExitWindowsEx com sucesso do LocalSystem da conta interna (ou até mesmo do ApplicationPoolIdentity Interno), em vez de usar uma identidade de usuário do SO?
Eu tentei:
Editando a política local: Na Diretiva de Segurança Local, o SYSTEM e o "IIS APPPOOL \ Foobar" podem "Encerrar o sistema" e "Forçar o desligamento de um sistema remoto"
Usando ntrights
ntrights -u "IIS AppPool\Foobar" +r SeRemoteShutdownPrivilege
e ntrights -u "IIS AppPool\Foobar" +r SeShutdownPrivilege
Nem o erro 1314 desaparece.
Tags windows-10 shutdown privileges c# iis