Opération de co-programme d’installation
Notes
Les fonctionnalités décrites dans cette section ne sont pas prises en charge et les packages de pilotes qui les contiennent ne recevront plus de signature Microsoft. Consultez Utilisation d’un fichier INF universel.
Les co-programmes d’installation sont appelés par SetupAPI, comme illustré dans la figure suivante.
Les zones non éclipsées représentent les composants que le système d’exploitation fournit pour les classes d’installation d’appareils fournies par le système. Les zones ombrées représentent les composants que vous pouvez fournir. Si vous créez une classe d’installation d’appareil personnalisée, vous pouvez également fournir un programme d’installation de classe. Toutefois, vous avez rarement besoin de créer une classe d’installation d’appareil, car presque tous les appareils peuvent être associés à l’une des classes d’installation d’appareil fournies par le système. Pour plus d’informations sur les composants Windows, consultez Vue d’ensemble de l’installation des appareils.
Des co-programmes d’installation peuvent être fournis pour un appareil spécifique (co-programme d’installation spécifique à l’appareil) ou pour une classe d’installation d’appareil (co-programme d’installation de classe). SetupAPI appelle un co-programme d’installation spécifique à l’appareil uniquement lors de l’installation de l’appareil pour lequel le co-programme d’installation est inscrit. Le système d’exploitation et les fournisseurs peuvent inscrire un ou plusieurs co-programmes d’installation spécifiques à un appareil pour un appareil. SetupAPI appelle un co-programme d’installation de classe lors de l’installation d’un appareil de la classe d’installation d’appareil pour laquelle le co-programme d’installation est inscrit. Le système d’exploitation et les fournisseurs peuvent inscrire un ou plusieurs co-programmes d’installation de classe pour une classe d’installation d’appareil. En outre, un co-programme d’installation de classe peut être inscrit pour une ou plusieurs classes d’installation.
Les applications d’installation d’appareils Windows et personnalisées installent des appareils en appelant SetupDiCallClassInstaller avec les codes de fonction d’installation de l’appareil (codes DIF).
Pendant l’installation du mode GUI, le système d’exploitation appelle SetupDiCallClassInstaller avec des codes DIF pour détecter les appareils non PnP présents dans le système. Un IHV fournit généralement un co-programme d’installation pour effectuer cette action pour les appareils non PnP que l’IHV libère.
Pour chaque demande DIF, SetupDiCallClassInstaller appelle tous les co-programmes d’installation de classe inscrits pour la classe d’installation de l’appareil, tous les co-programmes d’installation d’appareil inscrits pour l’appareil spécifique, puis le programme d’installation de classe fourni par le système pour la classe d’installation de l’appareil, le cas échéant.
Les applications d’installation d’appareils personnalisées doivent appeler SetupDiCallClassInstaller plutôt que d’appeler un co-programme d’installation ou un programme d’installation de classe directement. Cette fonction garantit que tous les co-programmes d’installation inscrits sont appelés de manière appropriée.
Les co-programmes d’installation de classe sont généralement enregistrés avant l’installation de l’appareil, et les co-programmes d’installation spécifiques à l’appareil sont inscrits dans le cadre de l’installation de l’appareil. Les co-programmes d’installation de classe sont donc généralement ajoutés à la liste de co-programmes d’installation lors de sa première génération et sont appelés pour toutes les demandes DIF pendant l’installation de l’appareil.
Le système d’exploitation ajoute des co-programmes d’installation spécifiques à l’appareil à la liste des co-programmes d’installation après qu’une demande de DIF_REGISTER_COINSTALLERS a été effectuée pour l’appareil (ou que SetupDiRegisterCoDeviceInstallers a été appelé). Les co-programmes d’installation spécifiques à l’appareil ne participent pas aux demandes DIF suivantes :
Seul un co-programme d’installation de classe (pas un co-programme d’installation spécifique à l’appareil) peut répondre aux demandes DIF suivantes :
DIF_NEWDEVICEWIZARD_PREANALYZE
DIF_NEWDEVICEWIZARD_POSTANALYZE
Un co-programme d’installation d’appareil n’est pas approprié dans ces contextes, soit parce qu’un appareil particulier n’a pas encore été identifié, soit à ce stade précoce de l’installation, soit parce que les co-programmes d’installation d’appareil n’ont pas encore été enregistrés.
La figure suivante montre l’ordre dans lequel SetupDiCallClassInstaller appelle les co-programmes d’installation et un programme d’installation de classe après l’inscription de co-programmes d’installation spécifiques à l’appareil.
Dans l’exemple illustré par la figure précédente, deux co-programmes d’installation de classe sont inscrits pour la classe d’installation de cet appareil et un co-programme d’installation spécifique à l’appareil est inscrit pour l’appareil. Les étapes suivantes correspondent aux nombres cerclé de la figure précédente :
SetupDiCallClassInstaller appelle le co-programme d’installation de première classe, en spécifiant un code DIF qui indique la demande d’installation en cours de traitement (DIF_INSTALLDEVICE, dans cet exemple). Le co-programme d’installation a la possibilité de participer à la demande d’installation. Dans cet exemple, le premier co-programme d’installation de classe inscrit retourne NO_ERROR.
SetupDiCallClassInstaller, à son tour, appelle tous les co-programmes d’installation de classe inscrits supplémentaires. Dans cet exemple, le co-programme d’installation de deuxième classe retourne ERROR_DI_POSTPROCESSING_REQUIRED, qui demande que le co-programme d’installation soit appelé ultérieurement pour le posttraitement.
SetupDiCallClassInstaller appelle tous les co-programmes d’installation spécifiques à l’appareil inscrits.
Une fois que tous les co-programmes d’installation inscrits ont été appelés, SetupDiCallClassInstaller appelle le programme d’installation de classe fourni par le système, s’il en existe un pour la classe d’installation de l’appareil. Dans cet exemple, le programme d’installation de classe retourne ERROR_DI_DO_DEFAULT, qui est une valeur de retour classique pour les programmes d’installation de classe.
SetupDiCallClassInstaller appelle le gestionnaire par défaut de la demande d’installation, le cas échéant. DIF_INSTALLDEVICE a un gestionnaire par défaut, SetupDiInstallDevice, qui fait partie de SetupAPI.
SetupDiCallClassInstaller appelle tous les co-programmes d’installation qui ont demandé un post-traitement. Dans cet exemple, le co-programme d’installation de deuxième classe a demandé un post-traitement.
Le post-traitement du co-programme d’installation est similaire aux routines IoCompletion du pilote, sauf que le co-programme d’installation est appelé une deuxième fois à son point d’entrée unique. Lorsque SetupDiCallClassInstaller appelle un co-programme d’installation pour le post-traitement, il définit PostProcessing sur TRUE et InstallResult sur la valeur appropriée dans le paramètre Context . Dans cet exemple, Contexte. InstallResult est NO_ERROR, car le gestionnaire par défaut s’est exécuté correctement.
Pour le post-traitement, SetupDiCallClassInstaller appelle les co-programmes d’installation dans l’ordre inverse. Si tous les co-programmes d’installation de la figure précédente avaient retourné ERROR_DI_POSTPROCESSING_REQUIRED, SetupDiCallClassInstaller appelait d’abord Device_Coinstaller_1 pour le post-traitement, puis Class_Coinstaller_2, puis Class_Coinstaller_1. Les programmes d’installation de classe ne demandent pas de posttraitement ; seuls les co-programmes d’installation le font.
Un co-programme d’installation qui demande un posttraitement est appelé même si un co-programme d’installation précédent a échoué à la demande d’installation.