Freigeben über


So überprüft eine Geräteinstallationsanwendung auf laufende Geräteinstallationen

Ihre Geräteinstallationsanwendung sollte ermitteln, ob andere Geräteinstallationsaktivitäten ausgeführt werden, bevor sie ihre Installationen ausführt. Um diese Bestimmung zu treffen, sollte die Geräteinstallationsanwendung CMP_WaitNoPendingInstallEvents aufrufen, in der Regel mit einem Timeoutwert von null. Wenn der Rückgabewert dieser Funktion angibt, dass andere Installationsaktivitäten ausstehen (z. B. kann der Assistent zum Finden neuer Hardware aktiv sein), sollte die Geräteinstallationsanwendung beendet werden.

Damit Ihre Geräteinstallationsanwendung mit Plattformen kompatibel ist, die CMP_WaitNoPendingInstallEvents nicht unterstützen, sollte die Anwendung den folgenden Code enthalten:

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

Die Verwendung dieses Codes basiert auf der Prämisse, dass die Plattform autoRun nicht startet, wenn eine Plattform CMP_WaitNoPendingInstallEvents nicht unterstützt, wenn Installationsaktivitäten ausgeführt werden.

Eine Beispielverwendung dieses Codes finden Sie im Toasterinstallationspaket unter dem Unterverzeichnis src\general\toaster des Windows Driver Kit (WDK).