我正在为需要检测新连接的端口并返回其 VID/PID 值的 Windows(XP 和更高版本)编写设备检测功能。但是,我完全不知道 Windows 上的 COM 端口是如何派生和记录的。查看系统注册表,Windows 似乎存储了一些信息,例如 VID、PID 和端口 ID(即 COM1 COM26)。该端口是该设备独有的吗?或者多个条目可以具有相同的端口 ID?
此外,如果有人知道有关 Windows COM 端口的优秀且完整的教程,将不胜感激。谢谢!!
如果您想获取系统上已分配的所有 COM 端口,那么您可以使用 COM Name Arbiter。Windows I/O 子系统将根据注册表中的 COM 名称仲裁器键分配值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM 名称仲裁器
此键中的 COMDB 值是 REG_BINARY 类型,包含显示 Windows 已分配哪些 COM 端口的掩码。此列表以小端方式格式化,因此第一个字节代表 COM1 到 COM8,第二个值代表 COM9 到 COM16,依此类推。如果第一个字节是 0x05,二进制是 00000101,那么 COM1 和 COM3 已经被赋值。
听起来您正在使用 USB 到 UART 桥接设备,因此虽然将分配其中一些 COM 端口,但在执行扫描时它们可能未插入系统。因此,您可能需要快速执行 CreateFile()、检查成功、CloseHandle() 序列来检查枚举期间的有效性。
或者,如果您确实在使用 USB 到 UART 桥接器,如果您只想获取特定 VID 和 PID 的 COM 端口,则它可能存储在注册表中的设备特定键下。然而,这将取决于您的硬件供应商的驱动程序和枚举顺序。