Executando com privilégios de administrador
A primeira etapa para estabelecer em qual tipo de conta seu aplicativo precisa ser executado é examinar quais recursos o aplicativo usará e quais APIs privilegiadas ele chamará. Você pode achar que o aplicativo ou partes grandes dele não exigem privilégios de administrador. Escrever Código Seguro, de Michael Howard e David LeBlanc oferece uma excelente descrição de como realizar essa avaliação e é altamente recomendável. (Esse recurso pode não estar disponível em alguns idiomas e países.)
Você pode fornecer os privilégios que seu aplicativo precisa com menos exposição a ataques mal-intencionados usando uma das seguintes abordagens:
- Execute em uma conta com menos privilégios. Uma maneira de fazer isso é usar PrivilegeCheck para determinar quais privilégios estão habilitados em um token. Se os privilégios disponíveis não forem adequados para a operação atual, você poderá desabilitar esse código e solicitar que o usuário faça logon em uma conta com privilégios de administrador.
- Divida em funções de aplicativo separadas que exigem permissões de administrador. Você pode fornecer ao usuário um atalho que executa o comando RunAs. Para obter instruções detalhadas sobre como configurar o atalho, pesquise "runas" na Ajuda. Programaticamente, você pode configurar o comando RunAs na chave do Registro de Chave appId para seu aplicativo.
- Autentique o usuário chamando CredUIPromptForCredentials (GUI) ou CredUICmdLinePromptForCredentials (linha de comando) para obter o nome de usuário e a senha. Para obter um exemplo, consulte Solicitando credenciais ao usuário.
- Represente o usuário. Um processo que começa em uma conta altamente privilegiada, como o Sistema, pode representar uma conta de usuário chamando ImpersonateLoggedOnUser ou funções de Representação semelhantes, reduzindo assim o nível de privilégio. No entanto, se uma chamada para RevertToSelf for injetada no thread, o processo retornará aos privilégios originais do Sistema.
Se você determinou que seu aplicativo deve ser executado em uma conta com privilégios de administrador e que uma senha de administrador deve ser armazenada no sistema de software, consulte Manipulando senhas para métodos de fazer isso com segurança.