创建虚拟COM端口

Bob*_*bby 4 c++ winapi device-driver

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

任何人都可以提前帮助我.

huy*_*itw 12

您必须编写驱动程序,因此您需要安装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

可以在此处找到控制请求的完整概述

一路顺风 :)

  • 请注意,虚拟串行驱动程序示例基本上没有太多路由,它只是一个数据接收器 - 由于 OP 希望让他的驱动程序与其他端口通信,因此还有很多工作要做,示例中遗漏了许多重要的 IOCTL 代码 -我猜因为他甚至需要询问这个话题,这个解决方案对他来说将是相当难以承受的:-) (2认同)

fra*_*ian 6

我假设您在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端口.一个端口的输出是来自其他端口的输入,反之亦然.

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