创建虚拟COM端口

时间:2014-11-20 11:46:58

标签: c++ winapi device-driver

我必须创建虚拟com端口,通过它我可以与机器上的其他com端口进行通信,它是设备驱动程序开发的一部分吗?或者只是我们可以用c ++编写。

任何人都可以帮助我 提前谢谢。

2 个答案:

答案 0 :(得分:10)

您必须编写驱动程序,因此您需要安装WDK(以前称为DDK)。但是你很幸运,因为Windows Driver Kit Samples Pack包含一个虚拟串口样本。

您似乎想要一个'translater'与设备通信,为什么不简单地编写一个过滤器驱动程序并实现一些额外的IOControls?

如果您真的想从驱动程序中访问其他端口(我已经执行过一次),您应该查找以下功能:

  • IoGetDeviceObjectPointer / ObDereferenceObject(用于打开/关闭端口)
  • IoBuildDeviceIoControlRequest / IoCallDriver(用于发送IOCTL以更改端口设置)
  • IoBuildSynchronousFsdRequest / IoCallDriver(用于撰写/阅读数据)

您需要的结构/ IOCTL:

  • SERIAL_BAUD_RATE(适用于IOCTL_SERIAL_SET_BAUD_RATE / IOCTL_SERIAL_GET_BAUD_RATE
  • IOCTL_SERIAL_SET_TIMEOUTS
  • SERIAL_HANDFLOW(适用于IOCTL_SERIAL_SET_HANDFLOW / IOCTL_SERIAL_GET_HANDFLOW
  • SERIAL_LINE_CONTROL(适用于IOCTL_SERIAL_SET_LINE_CONTROL
  • IOCTL_SERIAL_PURGE
  • IOCTL_SERIAL_SET_WAIT_MASK / IOCTL_SERIAL_GET_WAIT_MASK
  • IOCTL_SERIAL_SET_CHARS / IOCTL_SERIAL_GET_CHARS
  • IOCTL_SERIAL_WAIT_ON_MASK

可以找到控制请求的完整概述here

祝你旅途愉快:)

答案 1 :(得分:5)

我假设您在Windows环境中询问此问题,因为您使用winapi进行了标记。

是的,您需要为此编写虚拟驱动程序。好消息是,DDK(现在称为WDK)可以从MS免费获得。如果您没有VS2013(WDK的8.1版本所需),您可以从MS网站免费获得Express Edition。

编辑:您可能需要查看此内容 - http://com0com.sourceforge.net/。从描述:

Null-modem仿真器是一个开源内核模式虚拟串行端口 Windows驱动程序,可在GPL许可下免费获得。

Null-modem仿真器允许您创建无限数量的虚拟COM端口对,并使用任何一对将一个基于COM端口的应用程序连接到另一个。每个COM端口对提供两个COM端口。一个端口的输出是来自其他端口的输入,反之亦然。

听起来它可能正是你正在寻找的东西。