Lignes directrices pour 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 sans erreur ou qu’un fichier d’installation que vous avez fourni a pu être 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.

  • Lors de l’écriture d’applications d’installation pour les installations sur des systèmes Microsoft Windows XP et 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 vérifier si la valeur de retour est 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’obtenir 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 taille du tampon n’a été spécifiée ou ERROR_INSUFFICIENT_BUFFER si un tampon trop petit a été spécifié.