Compartilhar via


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.