WinAPI CreateFile获取COM9句柄返回FILE_TYPE_PIPE而非FILE_TYPE_CHAR问题
关于COM9端口文件类型为FILE_TYPE_PIPE的原因分析
这个问题我之前调试多串口适配器时也碰到过类似情况,结合你提到的Oxford芯片组和16C950 UART,大概率是这几个原因:
- 系统对高编号COM端口的兼容映射:Windows里COM1到COM8属于传统串行端口的默认范围,而COM9及以上的端口,部分老驱动(比如Oxford这类十多年前的芯片驱动)为了绕过早期系统对高编号COM口的限制,会用命名管道(Named Pipe)的方式做兼容处理。本质上它还是串口功能,但系统返回的文件类型会被标记为
FILE_TYPE_PIPE。 - 驱动程序的端口初始化差异:Oxford芯片的串口驱动可能对4个通道的注册逻辑不一致。比如驱动在初始化COM9时,误将其按管道设备类型注册,而其他端口用了标准的字符设备(
FILE_TYPE_CHAR)流程。这种细节上的疏漏在旧驱动里很常见,毕竟16C950 UART的驱动本身就比较陈旧,厂商可能没做全端口的统一适配。 - 系统残留的错误配置:如果COM9之前被虚拟串口软件、旧设备驱动占用过,系统注册表可能残留了错误的端口类型映射。哪怕你换了新适配器,系统还是沿用了之前的注册表项,导致
CreateFile返回的文件类型异常。可以去注册表HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM里检查,看看COM9对应的设备路径是否和其他端口不同。
验证与解决建议
- 先用
GetCommState、SetupComm这类串口专用API操作COM9,如果能正常设置波特率、奇偶校验等参数,说明只是文件类型标记异常,实际串口功能不受影响,完全可以正常使用。 - 卸载当前驱动,重新安装Oxford芯片组的最新版串口驱动,大概率能统一所有端口的文件类型。
内容的提问来源于stack exchange,提问作者Venom
相关产品推荐
相关产品推荐

