【问题标题】:Controlling COM port names from Windows driver从 Windows 驱动程序控制 COM 端口名称
【发布时间】:2015-10-05 21:15:29
【问题描述】:

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

除了我无法找到一种方法来控制哪个端口被赋予哪个名称之外,一切似乎都运行良好 - 端口具有不同的实例 ID(0x40 和 0x41)和不同的 UINumber(0 和 8)。在某些(可能是大多数)安装中,存在 0x40=COM3 和 0x41=COM4 的映射,但在其他安装中,这种关系是相反的。

谁能建议什么控制端口命名?我没有自己的共同安装程序,但如果需要,我可以轻松添加特定于设备的安装程序。

谢谢

【问题讨论】:

  • 我只是在猜测,但如果您只让第一个 PNP 扫描找到一个端口,等到该端口驱动程序完成加载,然后再次使总线关系无效以找到第二个端口,也许它会起作用一? (但即使可行,我也非常希望其他人有更优雅的解决方案!)

标签: windows serial-port drivers


【解决方案1】:

这不是一个完整的答案,但它确实回答了 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 不可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    相关资源
    最近更新 更多