
Dentre os muitos recursos que o Windows Vista apresentou como abordagem às preocupações quanto à segurança, o UAC (Controle de Conta do Usuário) é um dos mais significativos. Com ele, até mesmo os usuários administradores executam a maioria dos aplicativos com privilégio padrão, embora tenham "potencial de elevação" para tarefas administrativas específicas e funções de aplicativo.
Depois de usar o Windows Vista durante muitos meses, elevar uma tarefa ou aplicativo conforme o necessário se tornou algo comum. No entanto, também enfrentei várias deficiências ao tentar elevar alguns tipos de tarefa no Windows Vista, e isso se tornou frustrante.
Então, com o espírito do antigo Windows PowerToys, criei alguns PowerToys de elevação de script para superar essas limitações. É possível encontrar todos os PowerToys dos quais falaremos em technetmagazine.com/code07.aspx. E você pode ler sobre como o UAC funciona no artigo "Realize o sonho não-administrador com o controle de conta do usuário" de novembro de 2006 de Alex Heaton (consulte a barra lateral "Recursos adicionais").
PowerToy do comando de elevação
O primeiro aborrecimento era que não havia método para elevar um aplicativo a partir da linha de comando ou da caixa de diálogo Executar. E depois de fazer pesquisas dentro da Microsoft, encontrei um script de exemplo de John Stephens (um engenheiro de design de software da Microsoft) que fornecia as informações de que eu precisava.
Acontece que, se você passar o verbo "runas" para a API ShellExecute ou seu equivalente COM, o método ShellExecute de Shell.Application, o aplicativo pedirá a elevação (consulte a barra lateral para obter detalhes). Isso permitiu que eu criasse o primeiro PowerToy de elevação – o PowerToy do comando de elevação.
Essa ferramenta (que consiste nos arquivos ElevateCommand.inf, elevate.cmd e elevate.vbs) adiciona um comando de elevação ao sistema. Ele permite que você inicie aplicativos que pedem a elevação a partir da linha de comando, de um script, ou da caixa de diálogo Executar. Por exemplo, o seguinte comando abre Win.ini com o Bloco de Notas (após solicitar a elevação):
elevate notepad c:\Windows\Win.ini
Ao usar o comando de elevação com o WSH (Windows Script Host), o Windows PowerShell ou outros scripts, você precisa especificar o executável de host do script (como wscript, cscript ou powershell) como sendo o aplicativo. Para executar um vbs, por exemplo, você usaria:
elevate wscript “C:\windows\system32\
slmgr.vbs” –dli
O texto da ajuda explica isso. Use elevate com -? ou sem parâmetros para ver o texto de ajuda.
"Executar como Administrador" para scripts
A outra coisa irritante era que não havia nenhuma opção do menu de contexto "Executar como Administrador" (quando você clica com o botão direito do mouse no arquivo dentro do Explorer) para a maioria dos tipos de script do Windows. A única exceção eram os scripts do shell de comando (com as extensões de arquivo .bat e .cmd). Então, eu me propus a investigar isso.
Muitas opções do menu de contexto para tipos de arquivo são controladas por meio das chaves de comando do tipo de "objeto" na seção HKEY_CLASSES_ROOT do Registro (consulte Verbos e associações de arquivo na barra lateral para obter detalhes). Acontece que, se essa chave de comando tiver o nome runas, o comando invocado solicitará a elevação. Isso me permitiu criar os seguintes PowerToys:
PowerToy do aplicativo HTML de elevação (ElevateHTA.inf)
PowerToy do Windows PowerShell Script de elevação (ElevatePowerShellScript.inf)
PowerToy de script do WSH de elevação (ElevateWSHScript.inf, elevate.cmd, elevate.vbs)
Esses PowerToys adicionam uma entrada Executar como Administrador ao menu de contexto do Explorer (conforme mostra a Figura 1) para os tipos de arquivo de HTA, Windows PowerShell e Windows Script Host, respectivamente. ElevateWSHScript.inf também adiciona uma entrada de menu Executar como Administrador com Prompt de Comando. (Leia a observação em ElevatePowerShellScript.inf antes de instalá-lo.)

Figura 1: Opções do menu de contexto "Executar como Administrador"
Elevando outros tipos de arquivo
A técnica do comando runas pode ser aplicada a praticamente qualquer tipo de arquivo. Por exemplo, o Windows Installer no Windows Vista foi projetado para "fazer a coisa certa" quando a elevação for necessária à instalação de um pacote.
No entanto, alguns pacotes mal elaborados (em que, por exemplo, as ações personalizadas não são marcadas apropriadamente) não serão instalados corretamente com o UAC ativado, a menos que eles sejam instalados usando msiexec.exe a partir de um prompt de comando elevado.
Para permitir que isso seja feito diretamente no Explorer, eu criei ElevateMSI.inf. Essa ferramenta clona as ações padrão dos pacotes (.msi) e patches (.msp) do Windows Installer para adicionar uma opção de menu de contexto Instalar como Administrador para pacotes e Aplicar Patch como Administrador para patches.
Prompt CMD e do PowerShell aqui como administrador
Um dos PowerToys mais conhecidos do Windows é o incrível Prompt de comando (ou CMD) aqui. Com esse PowerToy instalado, é possível clicar com o botão direito do mouse em uma pasta ou unidade no Windows Explorer e selecionar Prompt CMD Aqui no menu de contexto. Isso abre um prompt de comando com a pasta selecionada como sendo o diretório atual.
Por ser tão prático, eu uso esse PowerToy várias vezes ao dia. Como estava tentando aprender a usar o Windows PowerShell, eu me vi desejando que ele tivesse a mesma funcionalidade. Então, eu criei o PowerToy de prompt aqui do PowerShell (consulte "Um PowerToy antigo está de volta" na barra lateral).
Mas mesmo isso não foi o suficiente: várias vezes eu quis que o prompt do shell fosse aberto com privilégios elevados. Isso acarretou dois PowerToys finais: "Prompt CMD aqui como administrador" (CmdHereAsAdmin.inf) e "Prompt do PowerShell aqui como administrador" (PowerShellHereAsAdmin.inf, elevate.cmd, elevate .vbs) conforme mostra a Figura 2. Ambos os PowerToys funcionam da mesma forma que seus concorrentes não elevados (incluídos aqui para download para a sua comodidade).

Figura 2: Prompts com privilégio elevado
Instalação e implementação
Para instalar esses PowerToys, clique com o botão direito do mouse em um arquivo INF, selecione Instalar e aprove a elevação. Para desinstalar, use a seleção Programas e Recursos do Painel de Controle.
Caso você se perca em meio aos arquivos INF e se pergunte por que três PowerToys instalam elevate.cmd e elevate.vbs em locais diferentes, eu explico. A maioria dos PowerToys são implementados com a inclusão de uma subchave runas na chave HKEY_CLASSES_ROOT\objecttype\Shell para o tipo de objeto no Registro.
No entanto, para alguns PowerToys havia tipos de objeto que eu gostaria que tivessem duas entradas no menu de contexto que causassem a elevação ("Prompt CMD aqui como administrador" e "Prompt do PowerShell aqui como administrador" para os tipos de objeto Unidade e Diretório; "Executar como Administrador" e "Executar como Administrador com Prompt de Comando" para todos os tipos de objeto WSH).
Como só pode haver uma única chave runas para cada tipo de objeto, eu tive que implementar a segunda ação chamando o comando de elevação. Mas como queria que cada INF fosse instalado e desinstalado independentemente, eu tive que colocar as cópias associadas elevate.cmd e elevate.vbs em locais diferentes. (É possível incrementar os contadores de uso do arquivo a partir de um arquivo INF bruto. Sim, os instaladores MSI ficariam melhores, mas eu queria que eles pudessem ser criados e modificados com um editor de texto.) Um efeito colateral disso é que apenas as entradas do menu de contexto implementadas usando a chave runas exibirão um escudo no menu.
Resumo
Espero que essas ferramentas lhe sejam úteis e melhorem a sua experiência em relação ao UAC. Talvez elas inspirem você a criar os seus próprios PowerToys. (Para aqueles que usam outras linguagens de script como Perl ou Python no Windows Vista, também deve ser fácil criar um PowerToy "de script de elevação" para elas.) Assim como acontece com todos os PowerToys, essas ferramentas não têm suporte, sendo "de uso por sua própria conta e risco". De qualquer forma, divirta-se com a elevação!
Download dos PowerToys de elevação
Fonte: Microsoft TechNet