Écriture de programmes d’installation de classe et de Co-Installers
Notes
Les fonctionnalités décrites dans cette section ne sont pas prises en charge dans les packages de pilotes universels ou mobiles. Consultez Utilisation d’un fichier INF universel.
Cette section contient les instructions que vous devez suivre lorsque vous écrivez un co-programme d’installation :
Affichage d’une interface utilisateur
Enregistrement de l’état d’installation de l’appareil
Chargement de fichiers exécutables ou DLL
Démarrage d’autres processus ou services
Pour plus d’informations sur l’écriture d’un co-programme d’installation, consultez Écriture d’un co-programme d’installation.
Affichage d’une interface utilisateur
L’installation de l’appareil s’exécute principalement dans un service système (non interactif). Par conséquent, un utilisateur ne peut pas voir ou répondre à une interface utilisateur qui apparaît dans ce contexte. Toute boîte de dialogue fournie dans le co-programme d’installation pendant le traitement d’un code de fonction d’installation d’appareil (DIF) entraîne l’arrêt de la réponse de l’installation de l’appareil.
Dans la plupart des cas, les co-programmes d’installation ne doivent pas interagir avec l’utilisateur, sauf pendant le traitement d’une action terminer-installer. Les actions Terminer-installer s’exécutent dans un contexte interactif.
Note Les co-programmes d’installation ne doivent pas faire échouer un code DIF avec ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION, car cela entraîne l’échec de l’installation de l’appareil. Si l’installation de l’appareil nécessite une interaction utilisateur, les co-programmes d’installation doivent prendre en charge les actions de fin-installation.
Enregistrement de l’état d’installation de l’appareil
N’enregistrez pas l’état d’installation de l’appareil dans la bibliothèque de liaison dynamique (DLL) du co-programme d’installation . Étant donné que Windows décharge généralement la DLL après qu’un code DIF est géré par le programme d’installation, les informations d’état enregistrées dans la DLL ne sont pas conservées.
Pour conserver en toute sécurité l’état du programme d’installation de l’appareil, les programmes d’installation de classe ou les co-programmes d’installation doivent enregistrer les informations d’état en tant que propriétés dans la clé de pilote de l’appareil dans le Registre. Pour cela, procédez comme suit :
Pour récupérer un handle de Registre sur la clé de pilote d’un appareil instance, utilisez SetupDiOpenDevRegKey avec le paramètre KeyType défini sur DIREG_DRV.
Utilisez SetupDiGetDevicePropertyKeys (pour récupérer toutes les clés de propriété d’un appareil instance) ou SetupDiGetDeviceProperty (pour récupérer une clé de propriété d’appareil spécifiée instance).
Utilisez SetupDiSetDeviceProperty pour enregistrer l’appareil instance clé de propriété.
Chargement de fichiers exécutables ou DLL
Si votre co-programme d’installation tente de charger un fichier exécutable non signé ou une DLL sur une plateforme Windows 64 bits, les systèmes d’exploitation empêchent son chargement dans cet environnement sécurisé.
Pour charger en toute sécurité un fichier exécutable ou une DLL par un programme d’installation ou un co-programme d’installation de classe, nous vous recommandons vivement d’inclure le fichier exécutable ou la DLL dans votre package de pilotes signé numériquement. Pour plus d’informations sur la signature des packages de pilotes, consultez Signature de pilotes.
Note Les programmes d’installation de classes et les co-programmes d’installation ne doivent pas charger des modules DLL par des appels de fonction explicites, tels que LoadLibrary, ou en créant des dépendances de liaison.
Démarrage d’autres processus ou services
Pendant l’installation de l’appareil, Windows ne peut pas suivre d’autres processus et ne peut pas déterminer ce qu’ils font ou quand ils sont terminés. Par exemple, Windows peut démarrer ou arrêter l’appareil ou lancer un redémarrage du système pendant que le processus effectue une action critique.
Dans la plupart des cas, les co-programmes d’installation ne doivent pas démarrer d’autres processus ou services. Toutefois, les programmes d’installation peuvent démarrer d’autres processus en toute sécurité en appelant CreateProcess à partir d’une fonction ou d’une boîte de dialogue affichée via une action terminer-installer. Le programme d’installation ne doit pas laisser l’utilisateur continuer dans la boîte de dialogue ou la procédure tant que le processus créé n’a pas été arrêté.