Je maintiens une application qui utilise la fonction win32 EnumPorts() pour aider à déterminer l'ensemble des ports série installés sur l'ordinateur. J'ai vu des cas sur certains ordinateurs où l'appel pour obtenir cette information échoue avec un code GetLastError() de 1722 (le serveur RPC n'est pas disponible). Je suppose que cela a quelque chose à voir avec les paramètres du registre ou un service requis désactivé, mais ma recherche a été jusqu'ici plutôt infructueuse. Est-ce que quelqu'un d'autre a rencontré ce problème?EnumPorts() renvoie une erreur étrange sur certaines machines
En réponse aux commentaires d'Euro Micelli. J'essaie spécifiquement de remplir une liste de sélection qui permettra à l'utilisateur de choisir une liste de sélection disponible. Pour commencer, je me suis basé exclusivement sur EnumPorts() pour me fournir une liste de noms de port série potentiels. Il s'est avéré peu sûr, cependant dans plusieurs sens: Il n'a pas toujours fourni l'ensemble complet des noms de port et, comme je l'ai vu récemment, il peut ne pas fonctionner complètement quand le "service de RPC est indisponible". Pourquoi RPC est nécessaire pour savoir quels ports sont disponibles sur la machine locale est complètement au-delà de moi, mais il est là. Ce dernier problème était la goutte d'eau finale. Pour autant que je me fie entièrement à la liste des noms fournis, je filtre ces noms à l'aide de la fonction GetDefaultCommConfig() pour déterminer la nature exacte de chacun des noms que j'ai trouvés. Dans mon expérience, la liste de noms fournie par la clé de registre mentionnée précédemment a été la méthode la plus fiable pour obtenir les noms de port. En fait, je peux voir la clé mise à jour que je désactive les pilotes de port dans le gestionnaire de périphériques de l'appareil. Dans les expériences normales, je suis d'accord avec l'évaluation selon laquelle s'appuyer sur une clé particulière est lourde de périls. Dans ce cas, cependant, M $ n'a jamais fourni un mécanisme décent pour évaluer les noms des ports disponibles.
Je dois préciser que j'ai déjà remplacé l'appel à EnumPorts() par un algorithme qui analyse la clé de registre: HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM pour les noms de port série. Cela devrait résoudre le problème une fois que mon logiciel est publié. Ce que je suis après, c'est des pointeurs qui peuvent être donnés aux clients qui utilisent le paquet libéré à l'heure actuelle.
J'ai essayé cela en vain. Le problème semble être que EnumPorts() n'est pas capable de se connecter à la machine locale (je suppose que c'est la raison pour laquelle le serveur RPC est pertinent) –