Como um aplicativo de instalação de dispositivo verifica se há instalações de dispositivo em andamento
O aplicativo de instalação do dispositivo deve determinar se outras atividades de instalação do dispositivo estão em andamento antes de executar suas instalações. Para fazer essa determinação, o aplicativo de instalação do dispositivo deve chamar CMP_WaitNoPendingInstallEvents, normalmente com um valor de tempo limite zero. Se o valor retornado dessa função indicar que outras atividades de instalação estão pendentes (por exemplo, o Assistente de Novo Hardware Encontrado pode estar ativo), o aplicativo de instalação do dispositivo deverá sair.
Para tornar o aplicativo de instalação do dispositivo compatível com plataformas que não dão suporte a CMP_WaitNoPendingInstallEvents, o aplicativo deve incluir o seguinte código:
BOOL
IsDeviceInstallInProgress (VOID)
{
HMODULE hModule;
CMP_WAITNOPENDINGINSTALLEVENTS_PROC pCMP_WaitNoPendingInstallEvents;
hModule = GetModuleHandle(TEXT("setupapi.dll"));
if(!hModule)
{
// Should never happen since we're linked to SetupAPI, but...
return FALSE;
}
pCMP_WaitNoPendingInstallEvents =
(CMP_WAITNOPENDINGINSTALLEVENTS_PROC)GetProcAddress(hModule,
"CMP_WaitNoPendingInstallEvents");
if(!pCMP_WaitNoPendingInstallEvents)
{
// We're running on a release of the operating system that doesn't supply this function.
// Trust the operating system to suppress AutoRun when appropriate.
return FALSE;
}
return (pCMP_WaitNoPendingInstallEvents(0) == WAIT_TIMEOUT);
}
int
__cdecl
_tmain(IN int argc, IN PTCHAR argv[])
{
if(IsDeviceInstallInProgress()) {
//
// We don't want to start right now. Instead, our
// device co-installer will invoke this application
// (if necessary) during finish-install processing.
//
return -1;
}
.
.
}
O uso desse código baseia-se na premissa de que, se uma plataforma não der suporte a CMP_WaitNoPendingInstallEvents, a plataforma não iniciará a Execução Automática se as atividades de instalação estiverem em andamento.
Para obter um exemplo de uso desse código, consulte o pacote de instalação da torradeira no subdiretório src\general\toaster do WDK (Windows Driver Kit).