首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电缆断开时的usbser.sys mdmcpq.inf问题

电缆断开时的usbser.sys mdmcpq.inf问题
EN

Stack Overflow用户
提问于 2018-07-31 20:33:47
回答 1查看 568关注 0票数 1

我使用PIC18F67J94设计了一个嵌入式系统,并使用了随机VID和PID。然后,我使用Zadig为硬件生成USB CDC驱动程序。它使用mdmcpq.inf和usbser.sys。以下是Zadig生成的.inf文件,其中对供应商名称进行了一些修改

代码语言:javascript
复制
[Strings]
SNMPMOD = "SNMP-Modbus Converter"
VendorName = "ABCD"
SourceName = "ABCD Install Disk"
SNMPMODID   = "VID_8474&PID_0005"
DeviceGUID = "{6097438F-67AB-4C8C-A8C5-AF92EE79D3DF}"
Service    = "USB COM Port"

[Version]
Signature   = "$Windows NT$"
Provider = "ABCD"
Class       = Ports
ClassGuid   = {4D36E978-E325-11CE-BFC1-08002BE10318}
CatalogFile = ABCD.cat
DriverVer   = 04/11/2018, 1.0.0.6

[ControlFlags]
ExcludeFromSelect=*

[Manufacturer]
%VendorName% = DeviceList,NTx86,NTamd64

[DeviceList.NTx86]
%SNMPMOD% = UsbSer_Install, USB\%SNMPMODID%

[DeviceList.NTamd64]
%SNMPMOD% = UsbSer_Install, USB\%SNMPMODID%

[UsbSer_Install]
include     = mdmcpq.inf
CopyFiles   = FakeModemCopyFileSection
AddReg      = UsbSer_Install.AddReg
AddProperty = UsbSer_AddProperty

[UsbSer_Install.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,usbser.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"

[UsbSer_Install.Services]
AddService = usbser,0x00000002,UsbSer_Service

[UsbSer_Service]
DisplayName   = %Service%
ServiceType   = 1
StartType     = 3
ErrorControl  = 1
ServiceBinary = %12%\usbser.sys
LoadOrderGroup = Base

[UsbSer_AddProperty]
GenericDriverInstalled,,,,1

[DestinationDirs]
DefaultDestDir = 12

[SourceDisksNames]
1 = %SourceName%

它提供了一个COM端口,并且工作正常,但是如果我在没有关闭COM端口的情况下移除该设备,然后重新连接该设备,则设备管理器会显示要连接的设备以及COM端口号,但是无法使用终端软件访问该com端口。

然后,我必须再次移除该设备,然后重新连接该设备,之后它将创建一个有效的com端口。

我也用过FTDI设备,还有多产的技术设备,它们都没有这些问题。

Prolific使用ser2pl.sys,而as FTDI有自己的.sys文件。

我想知道当设备断开时,是否有可能使窗口以某种方式关闭COM端口。

EN

回答 1

Stack Overflow用户

发布于 2018-08-01 02:52:01

据我所知,对于任何在Windows10之前的Windows10版本上使用usbser.sys的设备来说,这都是一个不可避免的问题。(你发布了关于你的驱动程序的详细信息,这很好,但我认为在这种情况下这并不重要。)

您可以使用WinObj程序来检查由诸如usbser.sys之类的驱动程序创建的COM端口对象,您将看到,在使用COM端口的程序关闭其句柄之前,驱动程序无法销毁该COM端口。因此,当在旧的COM端口关闭之前再次插入设备时,驱动程序无法创建具有正确名称的COM端口,因为旧的对象仍然存在。

他们实际上在Windows10重写usbser.sys时修复了这个问题,所以你可以直接升级到Windows10。如果我没记错的话,你要做的就是关闭COM端口的旧实例的句柄;你不再需要断开设备的连接。此外,Windows10附带了一个名为usbser.inf的微软驱动程序,因此您不必生成自己的驱动程序。

(顺便说一句,如果您打算将此设备发送给用户,我希望您购买自己的供应商ID。使用随机的供应商ID会导致冲突,如果用户同时拥有您的设备或其他设备,则会影响两者的功能。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51613510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档