首页
社区
课程
招聘
在tdi层截获socket操作
发表于: 2009-8-17 14:10 7786

在tdi层截获socket操作

2009-8-17 14:10
7786
我在tdi层截获socket操作的时候,只能截获到connect和send操作,receive截获不到,我在上上层运行了socket典型程序,一个服务器端,一个客户端。不知道为什么,我用了irptrace也截获不到receive的irp。大侠指教:)

附:我的问题写的不清楚吗?还是问题太简单了,刚来看雪,不太懂。希望大家给点意见啊。(对看雪很崇拜的说)

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

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 235
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
你什么都不发 别人怎么帮你看
2009-8-18 16:26
0
雪    币: 173
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
哦,这样啊。好吧,应用层的服务器端和客户端的应用程序就不用发了吧,就是tcp的典型操作,
服务器端:socket,bind,listen,accept,send,receive
客户端:socket,connect,receive,send

驱动程序:
status = IoCreateDevice(pDriverObject, 0, NULL, FILE_DEVICE_UNKNOWN, 0, TRUE, &pTcpDevice);
       
status = IoCreateDevice(pDriverObject, 0, NULL, FILE_DEVICE_UNKNOWN, 0, TRUE, &pUdpDevice);
               
status = IoCreateDevice(pDriverObject, 0, NULL, FILE_DEVICE_UNKNOWN, 0, TRUE, &pIpDevice);
然后再一个一个        IoAttachDevice       
status = IoAttachDevice(pTcpDevice, &Name, &pTcpDeviceOriginal);

处理irp的函数
switch (pIrpStack->MajorFunction)
        {
                case IRP_MJ_CREATE:

                        *status = TDICreate(pDeviceObject, pIrp, pIrpStack, &Callback);

                        break;
                                case IRP_MJ_INTERNAL_DEVICE_CONTROL:
                {
                if (TdiIoctl[i].MinorFunction == pIrpStack->MinorFunction)
。。。。。。
就是找不到receive,listen,accept的MinorFunction,只有connect的,send,还有几个不太了解的TDI_SET_EVENT_HANDLER和TDI_QUERY_INFORMATION
关键是它能截获send,receive为什么不可以,处理什么都一样啊,而且我用软件irptrace也是截获不到receive的控制码。这是最大的疑惑了。。。说明不是驱动程序问题?
这样我讲清楚了吗?
2009-8-19 10:19
0
雪    币: 212
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
TDI_RECEIVE  == IrpSp->MinorFunction

or

当IrpSp->MinorFunction == TDI_SET_EVENT_HANDLER 时
TDI_EVENT_RECEIVE  == IrpSp->Parameters  
具体的也记不清楚了,可以拦下来看看
2009-8-19 13:48
0
雪    币: 173
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
#define TDI_SEND                          0x07
#define TDI_RECEIVE                       0x08

send我可以截获住,receive为什么不可以?他们有什么不同吗?你说TDI_EVENT_RECEIVE,我还没有调研过,不太懂。
2009-8-19 14:15
0
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
6
注意处理下event
2009-8-19 16:26
0
雪    币: 173
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你这句话提醒我了,好像网上总是讲一些event。他们一个发送一个接收,为什么不同呢?
2009-9-4 08:46
0
雪    币: 173
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
在Sysnap的提醒下,问题已经搞定,简单的说说,希望对新手有帮助。在tdi层捕获到event时,要进行判断,因为receive操作有可能是通过这个来交互的,所以都要处理一下。不仅仅是receive操作,其他也有可能。总结,在tdi层,截获socket irp时,不能仅仅依靠那几个主流的控制码。
2009-9-16 10:30
0
游客
登录 | 注册 方可回帖
返回
//