Listagem de portas seriais (COM) no Windows?

Eu estou procurando uma maneira robusta de listar as portas serial (COM) disponíveis em uma máquina Windows. Háeste post sobre o uso do WMI, mas gostaria de algo menos específico do .NET - eu quero obter a lista de portas em um programa de Python ou C ++, sem o .NET.

Atualmente conheço outras duas abordagens:

Lendo as informações noHARDWARE\\DEVICEMAP\\SERIALCOMM Chave do registro. Isso parece uma ótima opção, mas érobusto? Eu não consigo encontrar uma garantia on-line ou no MSDN que esta célula do registro, na verdade, sempre mantém a lista completa de portas disponíveis.

Tryint para ligarCreateFile emCOMN com N um número de 1 a alguma coisa. Isso não é bom o suficiente, porque algumas portas COM não são nomeadas COMN. Por exemplo, algumas portas virtuais criadas são chamadas CSNA0, CSNB0 e assim por diante, então eu não confiaria nesse método.

Quaisquer outros métodos / ideias / experiências para compartilhar?

Editar: A propósito, aqui está uma implementação Python simples de ler os nomes de portas do registro:

import _winreg as winreg
import itertools


def enumerate_serial_ports():
    """ Uses the Win32 registry to return a iterator of serial 
        (COM) ports existing on this computer.


    """
    path = 'HARDWARE\\DEVICEMAP\\SERIALCOMM'
    try:
        key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, path)
    except WindowsError:
        raise IterationError

    for i in itertools.count():
        try:
            val = winreg.EnumValue(key, i)
            yield (str(val[1]), str(val[0]))
        except EnvironmentError:
            break

questionAnswers(8)

yourAnswerToTheQuestion