Bagikan melalui


Cara Aplikasi Penginstalan Perangkat memeriksa penginstalan perangkat yang sedang berlangsung

Aplikasi penginstalan perangkat Anda harus menentukan apakah aktivitas penginstalan perangkat lain sedang berlangsung sebelum melakukan penginstalannya. Untuk membuat penentuan ini, aplikasi penginstalan perangkat harus memanggil CMP_WaitNoPendingInstallEvents, biasanya dengan nilai waktu habis nol. Jika nilai pengembalian dari fungsi ini menunjukkan aktivitas penginstalan lain tertunda (misalnya, Wizard Perangkat Keras Baru ditemukan mungkin aktif), aplikasi penginstalan perangkat harus keluar.

Untuk membuat aplikasi penginstalan perangkat Anda kompatibel dengan platform yang tidak mendukung CMP_WaitNoPendingInstallEvents, aplikasi harus menyertakan kode berikut:

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

Penggunaan kode ini didasarkan pada premis bahwa jika platform tidak mendukung CMP_WaitNoPendingInstallEvents, platform tidak memulai AutoRun jika aktivitas penginstalan sedang berlangsung.

Untuk contoh penggunaan kode ini, lihat paket penginstalan pemanggang di bawah subdirektori src\general\toaster Windows Driver Kit (WDK).