共用方式為


裝置安裝應用程式如何檢查進行中的裝置安裝

您的 裝置安裝應用程式 應該先判斷其他裝置安裝活動是否正在進行中,再執行其安裝。 若要做出此判斷,裝置安裝應用程式應該呼叫 CMP_WaitNoPendingInstallEvents,通常是零逾時值。 如果此函式的傳回值指出其他安裝活動擱置 (,例如[找到的新硬體精靈] 可能作用中) ,則裝置安裝應用程式應該會結束。

若要讓 裝置安裝應用程式 與不支援 CMP_WaitNoPendingInstallEvents的平臺相容,應用程式應包含下列程式代碼:

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

使用此程式代碼是以內部部署為基礎,如果平臺不支援 CMP_WaitNoPendingInstallEvents,則如果安裝活動正在進行中,則平臺不會啟動 AutoRun。

如需此程式代碼的範例使用方式,請參閱 Windows Driver Kit (WDK) src\general\toaster 子目錄下的 toaster 安裝套件。