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

4
我正在为Windows(7/8)编写一个多端口串行卡的驱动程序堆栈。此卡有两个端口,因此驱动程序堆栈包括一个总线驱动程序,该驱动程序创建两个PDO,每个端口一个,并且在INVALIDATE总线关系以启动PNP序列,从而加载端口驱动程序。当创建符号链接以允许应用程序访问时,端口驱动程序会在注册表中查找PortName字符串。我猜测MS CoInstaller正在分配名称。这些端口被赋予通常的COMn编号,通常是COM3和COM4。
一切似乎都很顺利,除了我找不到控制哪个端口获得哪个名称的方法——这些端口具有不同的实例ID(0x40和0x41)和不同的UINumber(0和8)。在某些(也许大多数)安装中,0x40=COM3,0x41=COM4的映射,但在其他安装中,关系则相反。
有人能建议下是什么控制端口命名吗?如果需要,我没有自己的coinstaller,但可以轻松添加特定于设备的coinstaller。
谢谢

我只是猜测,也许如果你只让第一个PNP扫描找到一个端口,等待该端口驱动程序加载完成,然后再次使总线关系无效以查找第二个端口,这样可能会起作用。 (但即使这样可以解决问题,我非常希望有人能提供更优雅的解决方案!) - Harry Johnston
1个回答

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不可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接