首页
社区
课程
招聘
[求助]串口驱动IRP_MJ_READ过滤问题
发表于: 2009-10-18 09:46 6316

[求助]串口驱动IRP_MJ_READ过滤问题

2009-10-18 09:46
6316
这两天学写驱动以下是我的com.sys的代码...可以捕捉到读与写的数据并在dbg中显示出来并且dbg里显示的都是我修改过的数据...也就是说成功了....但是串口调试工具与监听工具查的话只有IRP_MJ_WRITE的数据可以修改成功IRP_MJ_READ的数据依然没有改变.... 请问应该怎么修改才可以改变从设备传回来的IRP_MJ_READ数据
工具:wdk,dbgview,srvinstw,vmware,vs2005,
代码:
C/C++ code
            if(irpsp->MajorFunction == IRP_MJ_WRITE)
                {
                // 如果是写,先获得长度
                ULONG len = irpsp->Parameters.Write.Length;
                // 然后获得缓冲区
                PUCHAR buf = NULL;

                if(irp->MdlAddress != NULL)
                    {
                    buf = (PUCHAR)MmGetSystemAddressForMdlSafe(irp->MdlAddress,NormalPagePriority);
                     DbgPrint("aaaaaaaaaa");
                    }
                else
                    {
                    //memset((PUCHAR)irp->UserBuffer,0x31,len);
                    buf = (PUCHAR)irp->UserBuffer;
                     DbgPrint("bbbbbbbbbbb");
                    }
                if(buf == NULL)
                    {
                    memset((PUCHAR)irp->AssociatedIrp.SystemBuffer,0x31,len);
                    buf = (PUCHAR)irp->AssociatedIrp.SystemBuffer;
                     DbgPrint("cccccccccc");
                    }

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

            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);
                 DbgPrint("1111111111111");
                    }
                else
                    {
                    memset((PUCHAR)irp->UserBuffer,0x32,len1);
                    buf1 = (PUCHAR)irp->UserBuffer;
                    DbgPrint("222222222");
                 }*/
                if(buf1 == NULL)
                    {
                    memset((PUCHAR)irp->AssociatedIrp.SystemBuffer,0x32,len1);
                    buf1 = (PUCHAR)irp->AssociatedIrp.SystemBuffer;
                    DbgPrint("33333333");
                    }

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

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 107
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
半夜起来顶贴.......大大们出手啊...是不是100金太少了???(应该不少了吧)我看看雪里大家都是5K10K的发贴....我在csdn上混惯了....都是100起贴....
2009-10-19 00:36
0
雪    币: 107
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
哈.....搞定了.....
2009-10-19 13:55
0
雪    币: 3
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我也来支持一下啊
2009-10-20 20:10
0
游客
登录 | 注册 方可回帖
返回
//