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 = 0x1b0044

DeviceIoControl IOCTL_SERIAL_SET_QUEUE_SIZE IOCTL = 0x1b0008

DeviceIoControl IOCTL_SERIAL_GET_BAUD_RATE IOCTL = 0x1b0050

DeviceIoControl IOCTL_SERIAL_GET_LINE_CONTROL IOCTL = 0x1b0054

DeviceIoControl IOCTL_SERIAL_GET_CHARS IOCTL = 0x1b0058

DeviceIoControl IOCTL_SERIAL_GET_HANDFLOW IOCTL = 0x1b0060

DeviceIoControl IOCTL_SERIAL_SET_BAUD_RATE IOCTL = 0x1b0004

DeviceIoControl IOCTL_SERIAL_SET_RTS IOCTL = 0x1b0030

DeviceIoControl IOCTL_SERIAL_SET_DTR IOCTL = 0x1b0024

DeviceIoControl IOCTL_SERIAL_SET_LINE_CONTROL IOCTL = 0x1b000c

DeviceIoControl IOCTL_SERIAL_SET_CHARS IOCTL = 0x1b005c

DeviceIoControl IOCTL_SERIAL_SET_HANDFLOW IOCTL = 0x1b0064

DeviceIoControl IOCTL_SERIAL_GET_MODEMSTATUS IOCTL = 0x1b0068

EvtIoDeviceControl IOCTL_SERIAL_WAIT_ON_MASK 

EvtIoDeviceControl IOCTL_SERIAL_GET_COMMSTATUS 

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

仔细观察会发现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值