Habilitar e desabilitar a execução automática
Há muitas situações em que a Execução Automática pode precisar ser temporariamente ou persistentemente desabilitada. Por exemplo, a Execução Automática pode interferir na operação de um aplicativo em execução e precisa ser desabilitada durante a duração. O sistema fornece várias maneiras de desabilitar a Execução Automática.
- Suprimir a execução automática programaticamente
- Usando o Registro para desabilitar a Execução Automática
- Executar automaticamente para outros tipos de mídia de armazenamento
Suprimir a execução automática programaticamente
Há uma variedade de situações em que a Execução Automática pode precisar ser suprimida programaticamente. Dois exemplos são:
- Seu aplicativo tem um programa de instalação que exige que o usuário insira outro disco que possa conter um arquivo Autorun.inf.
- Durante a operação do aplicativo, talvez o usuário precise inserir outro disco que possa conter um arquivo Autorun.inf.
Em ambos os casos, normalmente você não desejará iniciar outro aplicativo enquanto o original estiver em andamento.
Os usuários podem suprimir manualmente a Execução Automática mantendo pressionada a tecla SHIFT quando inserem o CD-ROM. No entanto, geralmente é preferível lidar com essa operação programaticamente em vez de depender do usuário.
Com sistemas que têm o Shell versão 4.70 e posterior, o Windows envia uma mensagem "QueryCancelAutoPlay" para a janela em primeiro plano. Seu aplicativo pode responder a essa mensagem para suprimir a Execução Automática. Essa abordagem é usada por utilitários do sistema, como a caixa de diálogo Abrir comum para desabilitar a Execução Automática.
Os fragmentos de código a seguir ilustram como configurar e lidar com essa mensagem. Seu aplicativo deve estar em execução na janela em primeiro plano. Primeiro, registre "QueryCancelAutoPlay" como uma mensagem do Windows:
uMessage = RegisterWindowMessage(TEXT("QueryCancelAutoPlay"));
A janela do aplicativo deve estar em primeiro plano para receber essa mensagem. O manipulador de mensagens deve retornar TRUE para cancelar a Execução Automática e FALSE para habilitá-la. O fragmento de código a seguir ilustra como usar essa mensagem para desabilitar a Execução Automática.
UINT g_uQueryCancelAutoPlay = 0;
LRESULT WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
...
default:
if (!g_uQueryCancelAutoPlay)
{
g_uQueryCancelAutoPlay = RegisterWindowMessage(TEXT("QueryCancelAutoPlay"));
}
if (uMsg && uMsg == g_uQueryCancelAutoPlay)
{
return TRUE; // Cancel AutoRun
}
}
}
Se o aplicativo estiver usando uma caixa de diálogo e precisar responder a uma mensagem "QueryCancelAutoPlay", ele não poderá simplesmente retornar TRUE ou FALSE. Em vez disso, chame SetWindowLong com nIndex definido como DWL_MSGRESULT. Defina o parâmetro dwNewLong comoTRUE para cancelar a Execução Automática e FALSE para habilitá-lo. Por exemplo, o procedimento da caixa de diálogo de exemplo a seguir cancela a Execução Automática quando recebe uma mensagem "QueryCancelAutoPlay".
UINT g_uQueryCancelAutoPlay = 0;
BOOL DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
...
default:
if (!g_uQueryCancelAutoPlay)
{
g_uQueryCancelAutoPlay = RegisterWindowMessage(TEXT("QueryCancelAutoPlay"));
}
if (uMsg == g_uQueryCancelAutoPlay)
{
SetWindowLong(hDlg, DWL_MSGRESULT, TRUE);
return 1;
}
}
Usando o Registro para desabilitar a Execução Automática
Há dois valores do Registro que podem ser usados para desabilitar persistentemente a Execução Automática: NoDriveAutoRun e NoDriveTypeAutoRun. O primeiro valor desabilita AutoRun para letras de unidade especificadas e o segundo desabilita a Execução Automática para uma classe de unidades. Se um desses valores estiver definido para desabilitar a Execução Automática para um dispositivo específico, ele será desabilitado.
Observação
Os valores NoDriveAutoRun e NoDriveTypeAutoRun só devem ser modificados pelos administradores do sistema para alterar o valor de todo o sistema para fins administrativos ou de teste. Os aplicativos não devem modificar esses valores, pois não há como restaurá-los de forma confiável para seus valores originais.
O valor NoDriveAutoRun desabilita AutoRun para letras de unidade especificadas. É um valor de dados REG_DWORD, encontrado na seguinte chave:
HKEY_CURRENT_USER
Software
Microsoft
Windows
CurrentVersion
Policies
Explorer
O primeiro bit do valor corresponde à unidade A:, a segunda a B:, e assim por diante. Para desabilitar a Execução Automática para uma ou mais letras de unidade, defina os bits correspondentes. Por exemplo, para desabilitar as unidades A: e C: , defina NoDriveAutoRun como 0x00000005
.
O valor NoDriveTypeAutoRun desabilita AutoRun para uma classe de unidades. É um valor de dados REG_DWORD ou de 4 bytes REG_BINARY, encontrado sob a mesma chave.
HKEY_CURRENT_USER
Software
Microsoft
Windows
CurrentVersion
Policies
Explorer
Ao definir os bits do primeiro byte desse valor, diferentes unidades podem ser excluídas de trabalhar com AutoRun.
A tabela a seguir fornece as constantes bits e bitmask, que podem ser definidas no primeiro byte de NoDriveTypeAutoRun para desabilitar a Execução Automática para um tipo de unidade específico. Você deve reiniciar o Windows Explorer antes que as alterações entrem em vigor.
Número do Bit | Constante bitmask | Descrição |
---|---|---|
0x04 | DRIVE_REMOVEABLE | O disco pode ser removido da unidade (como um disquete). |
0x08 | DRIVE_FIXED | O disco não pode ser removido da unidade (um disco rígido). |
0x10 | DRIVE_REMOTE | Unidade de rede. |
0x20 | DRIVE_CDROM | Unidade de CD-ROM. |
0x40 | DRIVE_RAMDISK | Disco de RAM. |
Executar automaticamente para outros tipos de mídia de armazenamento
A Execução Automática destina-se principalmente à distribuição pública de aplicativos em CD-ROM e DVD-ROM, e seu uso é desencorajado para outras mídias de armazenamento. No entanto, geralmente é útil habilitar a Execução Automática em outros tipos de mídia de armazenamento removível. Normalmente, esse recurso é usado para simplificar a depuração de arquivos AutoRun.inf. A Execução Automática só funciona em dispositivos de armazenamento removíveis quando os seguintes critérios são atendidos:
- O dispositivo deve ter drivers compatíveis com AutoRun. Para ser compatível com AutoRun, um driver deve notificar o sistema de que um disco foi inserido enviando uma mensagem WM_DEVICECHANGE .
- O diretório raiz da mídia inserida deve conter um arquivo Autorun.inf.
- O dispositivo não deve ter a Execução Automática desabilitada por meio do registro.
- O aplicativo em primeiro plano não suprimiu a Execução Automática.
Observação
Esse recurso não deve ser usado para distribuir aplicativos em mídia removível. Como a implementação da Execução Automática em mídia removível fornece uma maneira fácil de espalhar vírus do computador, os usuários devem suspeitar de qualquer disquete distribuído publicamente que contenha um arquivo Autorun.inf.
Normalmente, a Execução Automática é iniciada automaticamente, mas também pode ser iniciada manualmente. Se o dispositivo atender aos critérios listados acima, o menu de atalho da letra da unidade incluirá um comando AutoPlay . Para executar a Execução Automática manualmente, clique com o botão direito do mouse no ícone da unidade e selecione Reprodução Automática no menu de atalho ou clique duas vezes no ícone da unidade. Se os drivers não forem compatíveis com AutoRun, o menu de atalho não terá um item de Reprodução Automática e a Execução Automática não poderá ser iniciada.
Drivers compatíveis com AutoRun são fornecidos com algumas unidades de disco removíveis, bem como alguns outros tipos de mídia removível, como cartões CompactFlash. A Execução Automática também funciona com unidades de rede mapeadas para uma letra de unidade com o Windows Explorer ou montadas com o Console de Gerenciamento da Microsoft (MMC). Assim como acontece com o hardware montado, uma unidade de rede montada deve ter um arquivo Autorun.inf em seu diretório raiz e não deve ser desabilitada por meio do Registro.