Co-Installer-Vorgang

Hinweis

Die in diesem Abschnitt beschriebenen Features werden nicht unterstützt, und Treiberpakete, die sie enthalten, erhalten keine Microsoft-Signatur mehr. Weitere Informationen finden Sie unter Verwenden einer universellen INF-Datei.

Co-Installer werden von SetupAPI aufgerufen, wie in der folgenden Abbildung dargestellt.

Diagramm zur Veranschaulichung der Beteiligung von Co-Installern an der Geräteinstallation.

Die nicht abgeschirmten Felder stellen die Komponenten dar, die das Betriebssystem für die vom System bereitgestellten Gerätesetupklassen bereitstellt. Die schattierten Felder stellen die Komponenten dar, die Sie bereitstellen können. Wenn Sie eine benutzerdefinierte Geräteeinrichtungsklasse erstellen, können Sie auch einen Klasseninstallationsprogramm bereitstellen. Sie müssen jedoch selten eine neue Gerätesetupklasse erstellen, da fast jedes Gerät einer der vom System bereitgestellten Gerätesetupklassen zugeordnet werden kann. Weitere Informationen zu Windows-Komponenten finden Sie unter Übersicht über die Geräteinstallation.

Co-Installer können für ein bestimmtes Gerät (gerätespezifisches Co-Installer) oder für eine Gerätesetupklasse (Klassen-Co-Installer) bereitgestellt werden. SetupAPI ruft einen gerätespezifischen Co-Installer nur bei der Installation des Geräts auf, für das der Co-Installer registriert ist. Das Betriebssystem und die Anbieter können 0 oder mehr gerätespezifische Co-Installer für ein Gerät registrieren. SetupAPI ruft einen Klassen-Co-Installer auf, wenn ein Gerät der Gerätesetupklasse installiert wird, für das der Co-Installer registriert ist. Das Betriebssystem und die Anbieter können mindestens ein Klassen-Co-Installationsprogramm für eine Gerätesetupklasse registrieren. Darüber hinaus kann ein Klassen-Co-Installer für eine oder mehrere Setupklassen registriert werden.

Windows- und benutzerdefinierte Geräteinstallationsanwendungen installieren Geräte, indem SetupDiCallClassInstaller mit Geräteinstallationsfunktionscodes (DIF-Codes) aufgerufen wird.

Während der Einrichtung des GUI-Modus ruft das Betriebssystem SetupDiCallClassInstaller mit DIF-Codes auf, um nicht-PnP-Geräte zu erkennen, die im System vorhanden sind. Ein IHV stellt in der Regel ein Co-Installationsprogramm bereit, um diese Aktion für Nicht-PnP-Geräte auszuführen, die vom IHV freigegeben werden.

Für jede DIF-Anforderung ruft SetupDiCallClassInstaller alle Klassen-Co-Installer auf, die für die Setupklasse des Geräts registriert sind, alle Geräte-Co-Installer, die für das jeweilige Gerät registriert sind, und dann den Klasseninstaller, der vom System für die Setupklasse des Geräts bereitgestellt wird, sofern vorhanden.

Benutzerdefinierte Geräteinstallationsanwendungen müssen SetupDiCallClassInstaller aufrufen, anstatt direkt einen Co-Installer oder ein Klasseninstallationsprogramm aufzurufen. Diese Funktion stellt sicher, dass alle registrierten Co-Installer ordnungsgemäß aufgerufen werden.

Klassen-Co-Installer werden in der Regel vor der Geräteinstallation registriert, und gerätespezifische Co-Installer werden als Teil der Installation des Geräts registriert. Klassen-Co-Installer werden daher in der Regel der Co-Installer-Liste hinzugefügt, wenn sie zum ersten Mal erstellt wird, und werden für alle DIF-Anforderungen während der Geräteinstallation aufgerufen.

Das Betriebssystem fügt gerätespezifische Co-Installer zur Co-Installer-Liste hinzu, nachdem eine DIF_REGISTER_COINSTALLERS Anforderung für das Gerät abgeschlossen wurde (oder SetupDiRegisterCoDeviceInstallers aufgerufen wurde). Gerätespezifische Co-Installer nehmen nicht an den folgenden DIF-Anforderungen teil:

DIF_ALLOW_INSTALL

DIF_INSTALLDEVICEFILES

DIF_SELECTBESTCOMPATDRV

Nur ein Klassen-Co-Installer (kein gerätespezifischer Co-Installer) kann auf die folgenden DIF-Anforderungen reagieren:

DIF_DETECT

DIF_FIRSTTIMESETUP

DIF_NEWDEVICEWIZARD_PRESELECT

DIF_NEWDEVICEWIZARD_SELECT

DIF_NEWDEVICEWIZARD_PREANALYZE

DIF_NEWDEVICEWIZARD_POSTANALYZE

Ein Geräte-Co-Installer ist in diesen Kontexten nicht geeignet, da ein bestimmtes Gerät noch nicht identifiziert wurde oder sich in dieser frühen Phase der Installation befindet oder die Geräte-Co-Installer noch nicht registriert wurden.

Die folgende Abbildung zeigt die Reihenfolge, in der SetupDiCallClassInstaller Co-Installer und einen Klasseninstallationsprogramm aufruft, nachdem gerätespezifische Co-Installer registriert wurden.

Diagramm des Aufrufens von Co-Installern für dif-Anforderungsverarbeitung und Nachverarbeitung.

Im Beispiel, das in der vorherigen Abbildung dargestellt ist, werden zwei Klassen-Co-Installer für die Setupklasse dieses Geräts registriert, und ein gerätespezifischer Co-Installer wird für das Gerät registriert. Die folgenden Schritte entsprechen den eingekreisten Zahlen in der vorherigen Abbildung:

  1. SetupDiCallClassInstaller ruft den ersten Klassen-Co-Installer auf und gibt einen DIF-Code an, der die verarbeitete Installationsanforderung angibt (in diesem Beispiel DIF_INSTALLDEVICE). Der Co-Installer hat die Möglichkeit, an der Installationsanforderung teilzunehmen. In diesem Beispiel gibt der erste registrierte Klassenkoinstaller NO_ERROR zurück.

  2. SetupDiCallClassInstaller wiederum ruft alle zusätzlichen registrierten Klassen-Co-Installer auf. In diesem Beispiel gibt der zweite Klassenkoinstaller ERROR_DI_POSTPROCESSING_REQUIRED zurück, der anfordert, dass der Co-Installer später für die Nachverarbeitung aufgerufen wird.

  3. SetupDiCallClassInstaller ruft alle registrierten gerätespezifischen Co-Installer auf.

  4. Nachdem alle registrierten Co-Installer aufgerufen wurden, ruft SetupDiCallClassInstaller den vom System bereitgestellten Klasseninstaller auf, sofern es einen für die Setupklasse des Geräts gibt. In diesem Beispiel gibt der Klasseninstaller ERROR_DI_DO_DEFAULT zurück, ein typischer Rückgabewert für Klasseninstallationsprogramme.

  5. SetupDiCallClassInstaller ruft den Standardhandler für die Installationsanforderung auf, sofern vorhanden. DIF_INSTALLDEVICE verfügt über den Standardhandler SetupDiInstallDevice, der Teil von SetupAPI ist.

  6. SetupDiCallClassInstaller ruft alle Co-Installer auf, die die Nachverarbeitung angefordert haben. In diesem Beispiel hat der zweite Klassen-Co-Installer die Nachverarbeitung angefordert.

Die Nachverarbeitung des Co-Installers ähnelt Den IoCompletion-Routinen des Treibers, mit der Ausnahme, dass der Co-Installer ein zweites Mal an seinem einzelnen Einstiegspunkt aufgerufen wird. Wenn SetupDiCallClassInstaller einen Co-Installer für die Nachverarbeitung aufruft, wird PostProcessing auf TRUE und InstallResult auf den entsprechenden Wert im Context-Parameter festgelegt. In diesem Beispiel : Kontext. InstallResult ist NO_ERROR, da der Standardhandler erfolgreich ausgeführt wurde.

Für die Nachverarbeitung ruft SetupDiCallClassInstaller Co-Installer in umgekehrter Reihenfolge auf. Wenn alle Co-Installer in der vorherigen Abbildung ERROR_DI_POSTPROCESSING_REQUIRED zurückgegeben hätten, würde SetupDiCallClassInstaller zuerst Device_Coinstaller_1 für die Nachverarbeitung aufrufen, gefolgt von Class_Coinstaller_2 und dann Class_Coinstaller_1. Klasseninstaller fordern keine Nachverarbeitung an. nur Co-Installer.

Ein Co-Installer, der die Nachverarbeitung anfordert, wird auch dann aufgerufen, wenn ein vorheriger Co-Installer die Installationsanforderung nicht erfolgreich war.