从Windows驱动程序控制COM端口名称

时间:2015-10-05 21:15:29

标签: windows serial-port drivers

我正在为Windows(7/8)编写一个用于多端口串行卡的驱动程序堆栈。该卡有两个端口,因此驱动程序堆栈包含一个总线驱动程序,它创建两个PDO,每个端口一个,然后INVALIDATE总线关系以启动PNP序列,从而导致端口驱动程序被加载。在创建符号链接以允许应用程序访问时,端口驱动程序在注册表中查找PortName字符串。我猜MS CoInstaller正在分配名称。端口给出通常的COMn编号,通常是COM3和COM4。

所有似乎都运行良好,除了我找不到一种方法来控制给出哪个端口名称 - 端口具有不同的实例ID(0x40和0x41)和不同的UINumbers(0和8)。在一些(可能是大多数)安装上,有一个0x40 = COM3和0x41 = COM4的映射,但在其他安装上,关系是相反的。

任何人都可以建议控制端口命名的内容吗?我没有自己的coinstaller,但如果需要,可以轻松添加特定于设备的一个。

由于

1 个答案:

答案 0 :(得分:0)

这不是一个完整的答案,但它确实回答了Windows如何选择新的com端口名称的问题:

根据this,Windows注册表包含正在使用的COM端口名称的位图:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter\ComDB

例如,附近的Windows 7系统有

ComDB"=hex:fc,ff,ff,03,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,00,00,00,00,00,00,00,00

第一个字节(fc)表示COM1COM2 可以分配,COM3COM8不可用。