关于串口编程基础请教

没原来那个名字长了 2009-10-15 07:18:25
IRP_MJ_READ Length: 0016, Data: 31 32 33 34 35 36 00 00 00 00 00 00 00 00 00 00
IRP_MJ_WRITE Length: 0004, Data: 20 20 20 20

以上数据是用串口监听工具监听到的
请问IRP_MJ_READ的意思是不是从COM口读到数据?
请问IRP_MJ_WRITE的意思是不是发送数据到接在COM口的设备上?

还有我可以写个程序模拟COM口的设备发送IRP_MJ_READ读到的数据呢?
如果可以请教方法与思想....
环境是:我的电脑只有一个COM口也就是COM1,已有一设备接在COM1上电脑里还运行一接收程序且慢是A.exe吧
我想写个B.exe来发送上面监听到的数据也就是IRP_MJ_READ Length: 0016, Data: 31 32 33 34 35 36 00 00 00 00 00 00 00 00 00 00 让A.exe以为是COM1设备上发来的数据
请问可以实现吗?
A.exe不是我写的没有源码...设备也不是我开发的...而且不能关了A.exe(也就是说得一直占用着COM1,在这样情况下应该怎么可以实现我上面说的想法呢)
...全文
159 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这两天学写驱动以下是我的com.sys的代码...可以捕捉到IRP_MJ_READ的数据并在dbg中显示出来...但还不会修改.....请问大大们应该怎么修改捕捉到的数据呢....给点能用的代码马上结贴给分...

if(irpsp->MajorFunction == IRP_MJ_READ)
{
// 如果是写,先获得长度
ULONG len1 = irpsp->Parameters.Read.Length;
// 然后获得缓冲区
PUCHAR buf1 = NULL;
if(irp->MdlAddress != NULL)
buf1 =
(PUCHAR)
MmGetSystemAddressForMdlSafe(irp->MdlAddress,NormalPagePriority);
else
buf1 = (PUCHAR)irp->UserBuffer;
if(buf1 == NULL)
buf1 = (PUCHAR)irp->AssociatedIrp.SystemBuffer;

// 打印内容
for(j=0;j<len1;++j)
{
DbgPrint("comcap: Send Data: %2x\r\n",
buf1[j]);
}
}

// 这些请求直接下发执行即可。我们并不禁止或者改变它。
IoSkipCurrentIrpStackLocation(irp);
return IoCallDriver(s_nextobj[i],irp);
supkychen 2009-10-16
  • 打赏
  • 举报
回复
我也学习下虚拟窗口的知识。帮顶
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wecanhuang 的回复:]
很久之前做过,现在都快忘光了
[/Quote]
可否供出一点代码来参考下?
WecanHuang 2009-10-15
  • 打赏
  • 举报
回复
很久之前做过,现在都快忘光了
  • 打赏
  • 举报
回复
虚拟串口工具网上搜索一大堆我上次就用了一个...还得注册的...而且虚拟口不能与物理口相连..不知楼上的方便把地址给下或名字给个....
cuomj 2009-10-15
  • 打赏
  • 举报
回复
网上下个虚拟串口工具,虚拟出COM2,然后在工具里设置好连接到COM1,接着,就直接往COM2里写数据,它自动给发到COM1里的
  • 打赏
  • 举报
回复
USB口是有的只是我更想用前者...只是我对驱动一窍不通...只会用mfc写简单的程序(基本靠复制..呵呵见笑了)
不知从何下手啊...希望大大们推荐点好教程...好书...好源码...哪样都行...

还有如果写驱动的话原理是???应该怎么写呢?
是不是过滤读请求然后修改读的数据?然后再发送出去?然后A.exe收到??
dirdirdir3 2009-10-15
  • 打赏
  • 举报
回复
编写驱动,或者你机器上面有usb的话,买一个usb转串口的,然后这个串口和com1连接起来,然后其余就按正常的发送就可以了
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 supkychen 的回复:]
不行,串口具有独占性,A.EXE占据着COM1,你别的程序就别想再使用串口1.
[/Quote]
我不用串口...我只想让A.exe可以收到B.exe发出的数据....
还有上次我问过了...大大们说可以用虚拟串口....可是我虚拟了个串口不能用COM1想通...
本来大大们的思想是:虚拟个串口COM2与COM1想通...然后我写的B.exe与虚拟的COM2连接...然后只要我写的B.exe程序发送数据到COM2口上A.exe就可以收到数据了。。。
可是我没搞懂怎么虚拟与想通....
supkychen 2009-10-15
  • 打赏
  • 举报
回复
不行,串口具有独占性,A.EXE占据着COM1,你别的程序就别想再使用串口1.
getemail 2009-10-15
  • 打赏
  • 举报
回复
友情帮顶

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧