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

标签 windows serial-port drivers

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

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

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

谢谢

最佳答案

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

关于windows - 从 Windows 驱动程序控制 COM 端口名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32958017/

相关文章:

c# - 接收打印作业并将其转发到 LAN 中的打印机的软件

android - 从非 Android 环境访问 SQLite 数据库

c# - AudioSwitcher API 更改输出设备

Java运行curl命令在Windows和Linux上是不同的

qt - Qt中串口连接或断开时如何发出信号?

java - Ubuntu : javac package gnu. io不存在

windows - 在没有虚拟化的情况下在 Windows 上运行 Docker

windows - Vista 控制台应用程序?

java - java中的串口读写

python - 无法从 Linux 虚拟机将 I2C 设备连接到 FT232H