当前位置: 首页 > news >正文

windows 驱动实例分析系列-定时日志的COM驱动

本文章的前置文章为:

windows 驱动编写原则

windows COM驱动 案例

windows COM驱动的I/O处理

在前面的设计中,主要是对windows提供的VirtualSerial源代码的讲解,但是那个驱动其实是一个空壳驱动,用于学习的,在I/O处理中,也讲述了serial I/O处理的本质,接下来会将这些知识应用到实际中,完整的代码正在审核,审核完成后会上传。

需求

在很多windows 外接的开发板的调试中,日志端口被虚拟成一个RS232的UART,在设备管理器中看起来像这样:

而日志端口的输出往往是这样:

很明显,之前的VirtualSerial驱动不能在一些通用软件(sscom或者UartAssist上使用) ,那么怎么改造它呢?

从驱动中反推应用代码

如果我们在DeviceIoControl代码中,对所有的IOCTL打印的话,那么我们会发现通用软件至少会调用下面的IOCTL:

DeviceIoControl IOCTL_SERIAL_SET_WAIT_MASK IOCTL = 0x1b0044DeviceIoControl IOCTL_SERIAL_SET_QUEUE_SIZE IOCTL = 0x1b0008DeviceIoControl IOCTL_SERIAL_GET_BAUD_RATE IOCTL = 0x1b0050DeviceIoControl IOCTL_SERIAL_GET_LINE_CONTROL IOCTL = 0x1b0054DeviceIoControl IOCTL_SERIAL_GET_CHARS IOCTL = 0x1b0058DeviceIoControl IOCTL_SERIAL_GET_HANDFLOW IOCTL = 0x1b0060DeviceIoControl IOCTL_SERIAL_SET_BAUD_RATE IOCTL = 0x1b0004DeviceIoControl IOCTL_SERIAL_SET_RTS IOCTL = 0x1b0030DeviceIoControl IOCTL_SERIAL_SET_DTR IOCTL = 0x1b0024DeviceIoControl IOCTL_SERIAL_SET_LINE_CONTROL IOCTL = 0x1b000cDeviceIoControl IOCTL_SERIAL_SET_CHARS IOCTL = 0x1b005cDeviceIoControl IOCTL_SERIAL_SET_HANDFLOW IOCTL = 0x1b0064DeviceIoControl IOCTL_SERIAL_GET_MODEMSTATUS IOCTL = 0x1b0068EvtIoDeviceControl IOCTL_SERIAL_WAIT_ON_MASK EvtIoDeviceControl IOCTL_SERIAL_GET_COMMSTATUS 

注意,这里屏蔽了CreateFile等函数,因为那个对目前的需求来说并无意义。 

仔细观察会发现, 真正有用的是最后两个:


http://www.mrgr.cn/news/40867.html

相关文章:

  • 十一、磁盘的结构
  • 初识C语言(五)
  • leetcode69--x的平方根
  • 图文深入理解Oracle Network配置管理(一)
  • Qt 中的 QListWidget、QTreeWidget 和 QTableWidget:简化的数据展示控件
  • 计算机毕业设计 基于协同过滤算法的个性化音乐推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 基于 QAnything 的知识库问答系统:技术解析与应用实践
  • WebRTC Connection Negotiate解决
  • go+redis基于tcp实现聊天室
  • Redis实现每日签到(大数据量)
  • Java之方法的使用
  • 端到端如火如荼, 传统规划控制还有前途吗?
  • Linux系统命令:用于改变用户的登录 Shell 的命令chsh命令详解
  • 有没有免费写论文的软件?推荐这5款
  • 深耕领域、拓宽视野与培养软技能
  • C++语言学习(2): name lookup 的概念
  • 面试题1-fail-safe机制与fail-fast 机制
  • JavaScript Set基础与实战应用
  • 使用容器启动的zk无法暴露3888问题解决
  • 您的计算机已被Lockbit3.0勒索病毒感染?恢复您的数据的方法在这里!