能力值:
( LV3,RANK:20 )
|
-
-
2 楼
你什么都不发 别人怎么帮你看
|
能力值:
( 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的控制码。这是最大的疑惑了。。。说明不是驱动程序问题?
这样我讲清楚了吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
TDI_RECEIVE == IrpSp->MinorFunction
or
当IrpSp->MinorFunction == TDI_SET_EVENT_HANDLER 时
TDI_EVENT_RECEIVE == IrpSp->Parameters
具体的也记不清楚了,可以拦下来看看
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
#define TDI_SEND 0x07
#define TDI_RECEIVE 0x08
send我可以截获住,receive为什么不可以?他们有什么不同吗?你说TDI_EVENT_RECEIVE,我还没有调研过,不太懂。
|
能力值:
( LV12,RANK:600 )
|
-
-
6 楼
注意处理下event
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
你这句话提醒我了,好像网上总是讲一些event。他们一个发送一个接收,为什么不同呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
在Sysnap的提醒下,问题已经搞定,简单的说说,希望对新手有帮助。在tdi层捕获到event时,要进行判断,因为receive操作有可能是通过这个来交互的,所以都要处理一下。不仅仅是receive操作,其他也有可能。总结,在tdi层,截获socket irp时,不能仅仅依靠那几个主流的控制码。
|
|
|