c++ - 创建虚拟串口

标签 c++ winapi device-driver

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

任何人都可以帮我解决这个问题 提前致谢。

最佳答案

你必须编写一个驱动程序,所以你需要安装 WDK (以前称为 DDK)。但你很幸运,因为 Windows Driver Kit Samples Pack包含 Virtual Serial port samples .

看起来你想要一个“翻译器”来与设备对话,为什么不简单地编写一个过滤器驱动程序并实现一些额外的 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

关于c++ - 创建虚拟串口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27038838/

相关文章:

linux - linux 中接口(interface)的特定接口(interface)名称

C++11 原子 : does it make sense, 或者甚至可以将它们与内存映射 I/O 一起使用?

c++ - 为什么 C++ 在 C 中已经存在的 IO 中引入了新函数?

c++ - 使用自定义字符串参数捕获抛出异常

c++ - 如何在 bazel/googletest 中使用环境变量

c++ - 具有不同类型的可选参数的调用函数

python - Win32api 没有在 python 中使用 GetCursorPos() 给出正确的坐标

delphi - Delphi中MainForm的OnShow事件中的ExitProcess

c++ - 如何将 win32 CHAR(char) 类型转换为标准字符串?

c++ - 有没有办法确保连接到注册表中出现的串行端口的设备可以使用?