システムに割り当てられているすべての COM ポートを取得する場合は、COM Name Arbiter を使用できます。Windows I/O サブシステムは、レジストリの COM Name Arbiter キーに基づいて値を割り当てます。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter
このキーの COMDB 値 (REG_BINARY 型) には、Windows によって割り当てられた COM ポートを示すマスクが含まれています。このリストはリトル エンディアン形式でフォーマットされているため、最初のバイトは COM1 ~ COM8 を表し、2 番目の値は COM9 ~ COM16 などを表します。最初のバイトが 0x05 の場合、バイナリでは 00000101 であるため、COM1 と COM3 が割り当てられています。
USB から UART へのブリッジ デバイスを使用しているようです。そのため、これらの COM ポートの一部は割り当てられますが、スキャンを実行するときにシステムに接続されていない可能性があります。そのため、CreateFile()、成功の確認、CloseHandle() のシーケンスをすばやく実行して、列挙中に有効性を確認することをお勧めします。
または、実際に USB to UART Bridge を使用している場合、特定の VID と PID の COM ポートを取得したいだけであれば、デバイス固有のキーの下のレジストリに保存されている可能性があります。ただし、これはハードウェア ベンダーのドライバーと列挙シーケンスに依存します。