Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Todas as versões do Windows suportam uma chave de registo, RunOnce, que pode ser utilizada para especificar comandos que o sistema irá executar uma vez e, em seguida, eliminar. A criação de chaves de registro RunOnce pode ser feita a partir de um pacote de driver.
Observação
A criação de uma chave de registo RunOnce para algo que não sejam dispositivos SWENUM exclusivamente de software não é compatível com o isolamento do pacote de driver e não pode ser efetuada através de um driver do Windows.
No Windows 8 e Windows 8.1, as entradas RunOnce para a instalação de dispositivos SWENUM que são apenas de software são processadas durante a instalação do dispositivo. Outras entradas RunOnce são adicionadas à chave RunOnce . Esses ajustes são aplicados na próxima vez que o sistema processa a chave RunOnce. A instalação do dispositivo não força o sistema a processar entradas RunOnce .
No Windows 7 e versões anteriores, imediatamente após a instalação de um dispositivo, o Windows executa o comando armazenado sob a tecla RunOnce e, em seguida, remove a chave. Além disso, cada vez que o sistema é iniciado, ele executa o comando armazenado sob a chave RunOnce e, em seguida, remove a chave. Portanto, se você colocar um comando sob a tecla RunOnce , não poderá prever facilmente quando ele será executado.
Imediatamente após a instalação de um dispositivo, o Windows executa o comando armazenado sob a tecla RunOnce e, em seguida, remove a chave. Além disso, cada vez que o sistema é iniciado, ele executa o comando armazenado sob a chave RunOnce e, em seguida, remove a chave. Portanto, se você colocar um comando sob a tecla RunOnce , não poderá prever facilmente quando ele será executado.
Para instalações de dispositivos, as chaves do Registro RunOnce podem ser criadas usando add-registry-sections, que são especificadas por meio de diretivas INF AddReg. Cada add-registry-section tem a seguinte sintaxe:
reg-root, [subkey], [value-entry-name], [flags], [value]
Os valores da raiz do registo (reg-root) e as subchaves para a chave de registo RunOnce são os seguintes:
HKLM, "Software\Microsoft\Windows\CurrentVersion\RunOnce"
A cadeia de caracteres value-entry-name é omitida de uma entrada do Registro RunOnce . O tipo da entrada, que é indicado pelo valor Flags , deve ser REG_SZ (valor Flags de 0x00000000) ou REG_EXPAND_SZ (valor Flags de 0x00010000). Para uma entrada do tipo REG_SZ (o padrão), o valor Flags pode ser omitido.
O parâmetro value em uma chave RunOnce especifica o comando a ser executado. Este parâmetro é uma cadeia de caracteres entre aspas que tem o seguinte formato:
Rundll32[.exe] DllName,EntryPoint[Arguments]
Por padrão, uma chave RunOnce é excluída depois que o comando especificado é executado. Você pode prefixar um parâmetro de valor de chave RunOnce com um ponto de exclamação (!) para adiar a exclusão da chave até que o comando seja executado com êxito. Sem o prefixo do ponto de exclamação, se o comando especificado falhar, a chave RunOnce ainda será excluída e o comando não será executado na próxima vez que o sistema for iniciado.
Além disso, por padrão, as teclas RunOnce são ignoradas quando o sistema é iniciado no modo de segurança. O parâmetro value das teclas RunOnce pode ser prefixado com um asterisco (*) para forçar a execução do comando mesmo no Modo de Segurança.
Considere as seguintes diretrizes ao criar uma entrada de cadeia de caracteres de valor :
Rundll32 pode aparecer com ou sem a extensão de nome de ficheiro .exe.
DllName é o caminho completo de uma DLL ou imagem executável. Com exceção de uma vírgula terminativa obrigatória, a expressão não deve conter vírgulas. Se nenhuma extensão de nome de arquivo for fornecida, a extensão padrão será .dll.
EntryPoint é o nome do ponto de entrada dentro da DLL indicada por DllName.
Argumentos é uma subcadeia de caracteres opcional que contém quaisquer argumentos que devem ser passados para a DLL especificada.
Exatamente um espaço deve separar a cadeia de caracteres EntryPoint da subcadeia de caracteres Argumentos .
O exemplo de código a seguir mostra a entrada add-registry-section que armazena um comando e seus argumentos sob a chave RunOnce :
;; WDMAud swenum install
HKLM,%RunOnce%,"WDM_WDMAUD",,\
"rundll32.exe streamci.dll,StreamingDeviceSetup %WDM_WDMAUD.DeviceId%,%KSNAME_Filter%,%KSCATEGORY_WDMAUD%,%17%\WDMAUDIO.inf,WDM_WDMAUD.Interface.Install"
[Strings]
RunOnce = "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"
WDM_WDMAUD.DeviceId = "{CD171DE3-69E5-11D2-B56D-0000F8754380}"
KSNAME_Filter = "{9B365890-165F-11D0-A195-0020AFD156E4}"
KSCATEGORY_WDMAUD = "{3E227E76-690D-11D2-8161-0000F8775BF1}"
As seguintes regras se aplicam quando você usa chaves do Registro RunOnce para instalações de dispositivos:
Essas chaves do Registro devem ser usadas somente para instalações de dispositivos somente de software enumerados pelo SWENUM, o enumerador de dispositivos de software.
As teclas RunOnce devem consistir apenas em chamadas para Rundll32.exe. Caso contrário, o WHQL não assinará digitalmente o pacote de driver.
O código a ser executado não deve solicitar a entrada do usuário.
As instalações do lado do servidor são executadas em um contexto de sistema. Por esse motivo, você deve ter certeza de que o código a ser executado não contém vulnerabilidades de segurança e que as permissões de arquivo impedem que o código seja modificado maliciosamente.
A partir do Windows Vista, o sistema não executará os comandos especificados pelas teclas RunOnce se um usuário sem privilégios de administrador estiver conectado ao sistema. Isso pode levar a instalações incompletas ou corrompidas após uma reinicialização do sistema.
Antes de o aplicativo de instalação do dispositivo criar as entradas RunOnce , ele informa ao usuário atual que um usuário que tem privilégios de administrador deve fazer logon após uma reinicialização do sistema.
Para obter mais informações, consulte Desenvolvendo aplicativos executados no logon no Windows Vista.