Condividi tramite


Come un'applicazione di installazione del dispositivo verifica la presenza di installazioni di dispositivi in corso

L'applicazione di installazione del dispositivo deve determinare se altre attività di installazione del dispositivo sono in corso prima di eseguire le installazioni. Per effettuare questa determinazione, l'applicazione di installazione del dispositivo deve chiamare CMP_WaitNoPendingInstallEvents, in genere con un valore di timeout zero. Se il valore restituito da questa funzione indica che altre attività di installazione sono in sospeso (ad esempio, la Creazione guidata hardware trovato potrebbe essere attiva), l'applicazione di installazione del dispositivo deve uscire.

Per rendere compatibile l'applicazione di installazione del dispositivo con piattaforme che non supportano CMP_WaitNoPendingInstallEvents, l'applicazione deve includere il codice seguente:

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;
    }
    .
    .
}

L'uso di questo codice si basa sul presupposto che se una piattaforma non supporta CMP_WaitNoPendingInstallEvents, la piattaforma non avvia l'esecuzione automatica se le attività di installazione sono in corso.

Per un utilizzo di esempio di questo codice, vedere il pacchetto di installazione del tostapane nella sottodirectory src\general\tostapane del Driver Kit di Windows (WDK).