Instructions relatives à l’utilisation de SetupAPI
Voici des instructions pour utiliser les fonctions d’installation générales (SetupXxx) et les fonctions d’installation d’appareil (SetupDiXxx) fournies par SetupAPI :
Ne supposez jamais que le contenu du fichier d’installation est exempt d’erreurs ou qu’un fichier d’installation que vous avez fourni n’a pas été modifié de manière malveillante. Par conséquent, validez toujours toutes les informations reçues des fonctions SetupAPI. Vérifiez que les chaînes sont de longueur valide, que les mémoires tampons sont de taille valide et que les valeurs d’index se trouvent dans une plage valide.
Lorsque vous écrivez des applications d’installation pour des installations sur Microsoft Windows XP et des systèmes ultérieurs, vous pouvez appeler SetupVerifyInfFile (décrit dans la documentation du Kit de développement logiciel (SDK) Windows), qui vérifie qu’un fichier INF signé numériquement n’a pas été modifié.
Testez toujours la valeur de retour de chaque fonction SetupAPI. Si la fonction échoue, votre code doit appeler GetLastError pour obtenir un code d’erreur qui identifie l’échec. Les codes d’erreur retournés peuvent être définis dans Winerror.h ou Setupapi.h. Avant d’appeler FormatMessage avec FORMAT_MESSAGE_FROM_SYSTEM pour créer un affichage de texte, utilisez toujours la macro HRESULT_FROM_SETUPAPI (définie dans Winerror.h) pour convertir la valeur de retour en valeur HRESULT. Si une fonction SetupAPI retourne correctement, votre code ne doit pas appeler GetLastError. (Les fonctions GetLastError et FormatMessage , ainsi que les codes d’erreur système, sont décrites dans la documentation du Kit de développement logiciel (SDK) Windows.)
Si une fonction SetupAPI retourne un handle, votre code doit case activée pour une valeur de retour de INVALID_HANDLE_VALUE. Ces fonctions ne retournent pas NULL.
Tenez compte de la différence suivante entre les fonctions SetupDiXxx et SetupXxx qui permettent à un appelant d’interroger la taille requise d’une mémoire tampon :
Si l’appelant d’une fonction SetupDiXxx effectue une telle requête, GetLastError retourne toujours ERROR_INSUFFICIENT_BUFFER.
Si l’appelant d’une fonction SetupXxx effectue une telle requête, GetLastError retourne NO_ERROR si aucune longueur de mémoire tampon n’a été spécifiée ou ERROR_INSUFFICIENT_BUFFER si une mémoire tampon trop petite a été spécifiée.