裝置安裝應用程式如何檢查進行中的裝置安裝
您的 裝置安裝應用程式 應該先判斷其他裝置安裝活動是否正在進行中,再執行其安裝。 若要做出此判斷,裝置安裝應用程式應該呼叫 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 安裝套件。