Winapi Windows 10的USB串行接口问题

Winapi Windows 10的USB串行接口问题,winapi,serial-port,windows-10,drivers,inf,Winapi,Serial Port,Windows 10,Drivers,Inf,我使用的是一个嵌入式设备(在其上运行的裸机程序),它通过USB连接,并在连接的主机PC上显示为串行接口。这在所有经过测试的Linux变体和Win 7之前的所有Windows上都能完美地工作。不幸的是,Windows 10存在更大的问题:COM端口无法轻松打开(意味着需要多次重试),有时现有连接会停止工作 有趣的是:COM端口的打开包括对SetCommState()和GetCommState()的调用,其中SetCommState()失败——也包括当它与从GetCommState()返回的完全相同

我使用的是一个嵌入式设备(在其上运行的裸机程序),它通过USB连接,并在连接的主机PC上显示为串行接口。这在所有经过测试的Linux变体和Win 7之前的所有Windows上都能完美地工作。不幸的是,Windows 10存在更大的问题:COM端口无法轻松打开(意味着需要多次重试),有时现有连接会停止工作

有趣的是:COM端口的打开包括对SetCommState()和GetCommState()的调用,其中SetCommState()失败——也包括当它与从GetCommState()返回的完全相同的参数一起使用时。重复此过程数次即可成功,最迟在重试10次后SetCommState()起作用

在主机PC上使用INF文件,该文件只声明自己的VID/PID(适用于嵌入式设备),然后指向Windows内部驱动程序usbser.sys:

[Version]
Signature="$Windows NT$"
Class=Ports
ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
Provider=%MFGNAME%
LayoutFile=layout.inf
DriverVer=08/17/2001,5.1.2600.0

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

[DestinationDirs]
DefaultDestDir=12

[SourceDisksFiles]

[SourceDisksNames]

;------------------------------------------------------------------------------
;  Windows 32-bit 2000/XP/Vista/Win7 Sections
;------------------------------------------------------------------------------

[DeviceList.NTx86]
%DESCRIPTION%=DriverInstall, USB\VID_1CBE&PID_0002

[DriverInstall]
CopyFiles=DriverCopyFiles
AddReg=DriverInstall.AddReg

[DriverCopyFiles]
usbser.sys,,,0x20

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

[DriverInstall.Services]
AddService=usbser, 0x00000002, DriverService

[DriverService]
DisplayName=%SERVICE%
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%12%\usbser.sys

;------------------------------------------------------------------------------
;  Windows 64-bit Vista/Win7 Sections
;------------------------------------------------------------------------------

[DeviceList.NTamd64]
%DESCRIPTION%=DriverInstall.NTamd64, USB\VID_1CBE&PID_0002

[DriverInstall.NTamd64]
CopyFiles=DriverCopyFiles.NTamd64
AddReg=DriverInstall.NTamd64.AddReg

[DriverCopyFiles.NTamd64]
usbser.sys,,,0x20

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

[DriverInstall.NTamd64.Services]
AddService=usbser, 0x00000002, DriverService.NTamd64

[DriverService.NTamd64]
DisplayName=%SERVICE%
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%12%\usbser.sys

;------------------------------------------------------------------------------
;  String Definitions
;------------------------------------------------------------------------------

[Strings]
MFGNAME     = "Texas Instruments Incorporated"
DESCRIPTION = "StarterWare USB serial port"
SERVICE     = "StarterWare USB CDC serial port"

那么:Windows 10中是否有与串行驱动程序/串行接口/INF驱动程序定义文件相关的重要更改?或者这是MS的USB串行驱动程序中的一个错误?

设置最后一个错误代码,当它失败时。你得到了什么?失败的代码在哪里?必修的。毕竟,代码中可能存在错误。IInspectable:SetCommState()返回一个错误,抱怨参数无效。如前所述,最简单的例子是GetCommState(),然后使用GetCommState()返回的参数执行SetCommState()——重复调用此序列需要2..3次尝试(意味着SetCommState()最终接受它之前抱怨的参数),因此,可能驱动程序有问题,从
GetCommState()
返回的
DCB
结构使用相同的
XonChar
XoffChar
。当传回
SetCommState()
时,它会失败。这确实是太少的信息,但返回无效参数错误代码的API很难反驳。参数错误是有道理的。IInspectable:请看我上面的帖子,没有特殊的驱动程序,我使用的是默认Windows附带的驱动程序!usbser.sys是由Microsoft提供的!“嵌入式设备”肯定会运行一个驱动程序,或者至少在其电路中实现USB逻辑。除非我误解了你的设置。设置上次失败时的错误代码。你得到了什么?失败的代码在哪里?必修的。毕竟,代码中可能存在错误。IInspectable:SetCommState()返回一个错误,抱怨参数无效。如前所述,最简单的例子是GetCommState(),然后使用GetCommState()返回的参数执行SetCommState()——重复调用此序列需要2..3次尝试(意味着SetCommState()最终接受它之前抱怨的参数),因此,可能驱动程序有问题,从
GetCommState()
返回的
DCB
结构使用相同的
XonChar
XoffChar
。当传回
SetCommState()
时,它会失败。这确实是太少的信息,但返回无效参数错误代码的API很难反驳。参数错误是有道理的。IInspectable:请看我上面的帖子,没有特殊的驱动程序,我使用的是默认Windows附带的驱动程序!usbser.sys是由Microsoft提供的!“嵌入式设备”肯定会运行一个驱动程序,或者至少在其电路中实现USB逻辑。除非我误解了你的设置。