SetupDiEnumDriverInfo renvoie des résultats différents sous Windows 7 et Windows 8/10

Je débogue une application qui doit récupérer des informations sur tous les pilotes de lecteur de carte à puce installés sur un système Windows.

Le code ci-dessous fonctionne sur Windows 7 (64 bits):

QSet getSmartCardDriverModuleNames() { QSet moduleNames; // the GUID for the smart card reader device setup class wchar_t deviceClassGuidSsortingng[] = L"{50dd5230-ba8a-11d1-bf5d-0000f805f530}"; GUID deviceClass; CLSIDFromSsortingng(deviceClassGuidSsortingng, &deviceClass); HDEVINFO deviceInfoSet = SetupDiGetClassDevs(&deviceClass, NULL, NULL, 0); if (deviceInfoSet == INVALID_HANDLE_VALUE) { return moduleNames; } SP_DEVINFO_DATA deviceInfoData; deviceInfoData.cbSize = sizeof(deviceInfoData); for (DWORD deviceIndex = 0; SetupDiEnumDeviceInfo(deviceInfoSet, deviceIndex, &deviceInfoData); deviceIndex++) { if (SetupDiBuildDriverInfoList(deviceInfoSet, &deviceInfoData, SPDIT_COMPATDRIVER)) { SP_DRVINFO_DATA_W driverInfoData; driverInfoData.cbSize = sizeof(driverInfoData); for (DWORD driverIndex = 0; SetupDiEnumDriverInfo(deviceInfoSet, &deviceInfoData, SPDIT_COMPATDRIVER, driverIndex, &driverInfoData); driverIndex++) { // Omitted: get service name and add to moduleNames. } SetupDiDestroyDriverInfoList(deviceInfoSet, &deviceInfoData, SPDIT_COMPATDRIVER); } } SetupDiDestroyDeviceInfoList(deviceInfoSet); return moduleNames; } 

Ce code détecte correctement les pilotes installés sous Windows 7, mais ne trouve aucun pilote sur Windows 8 ou Windows 10 (tous deux sur 64 bits), même si certains pilotes sont installés.

Il s’avère (en ajoutant un code de journalisation et de débogage supplémentaire) que sous Windows 8 et 10, le premier appel à SetupDiEnumDriverInfo échoue. Dans ce cas, en ajoutant un appel à GetLastError() j’obtiens ERROR_NO_MORE_ITEMS , qui est le comportement normal attendu lorsque la fin de la liste est atteinte (voir la documentation ).

Donc, aucune erreur n’est détectée, mais le résultat est vide.

Dans la documentation de l’API Windows, je n’ai trouvé aucun changement de Windows 7 à Windows 8, 10, donc aucune adaptation au code ci-dessus ne devrait être nécessaire.

Ai-je oublié quelque chose? Avez-vous une idée de ce que je devrais vérifier ensuite?