wangdacheng
驱动牛犊
驱动牛犊
  • 注册日期2002-10-01
  • 最后登录2003-03-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1918回复:6

TDI Filter问题求教

楼主#
更多 发布于:2002-10-29 15:17
在TDI截获发送和来自TCP/UDP的数据(hook TCP和UDP设备),
对截获的数据处理后送出.
在截获和处理接收数据(TDI_RECEIVE)时不知道如何做,
数据可以通过EventReceiveXxx,也可以通过完成用户提交的
TDI_RECEIVE的Irp获得.
向大家求教,应该怎么截获并处理(解密)接收数据呢?

谢谢!

最新喜欢:

aasa1aasa1
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
沙发#
发布于:2002-10-29 17:12
你好象什么都明白,还问什么呢?
wangdacheng
驱动牛犊
驱动牛犊
  • 注册日期2002-10-01
  • 最后登录2003-03-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-10-29 17:49
你好象什么都明白,还问什么呢?


谢谢fracker的回贴.

我不知道应该在下面四个函数中哪个中截获数据,
TdiReceiveComplete
TdiReceiveOnEventHandler
TdiChainedReceiveEventHandler
TdiReceiveEventHandler

我试在TdiReceiveComplete和TdiReceiveOnEventHandler
中处理接收的数据,但不能使用
MmGetMdlVirtualAddress(Isp->MdlAddress)
得到的数据指针.

不知道这种思路对不对?
如果对的话,又怎样得到正确的指向数据的指针呢?
向大家请教.
我是新手,第一次写驱动,请大家多帮助.

fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
地板#
发布于:2002-10-30 10:17
根据我的理解,拦截Complete系列的函数都是没有意义的。因为这些函数都是在数据处理完了以后,用来释放资源的。
我觉得你应该拦截以下东东:
TDI_RECEIVE(TCP)
TDI_RECEIVE_DATAGRAM(UDP)
这两个好像一般都不会被调用。
TDI_SET_EVENT_HANDLER
  TDI_EVENT_RECEIVE
  TDI_EVENT_CHAINED_RECEIVE
  TDI_EVENT_RECEIVE_EXPEDITED
  TDI_EVENT_CHAINED_RECEIVE_EXPEDITED
  TDI_EVENT_RECEIVE_DATAGRAM
  TDI_EVENT_CHAINED_RECEIVE_DATAGRAM
拦截以上事件的回掉函数,因该可以拦截到数据,这是我根据DDK的理解的,没有编程实践过,所以有些数据可能多余,你自己揣摩吧。
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-10-30 10:36
[quote]你好象什么都明白,还问什么呢?


谢谢fracker的回贴.

我不知道应该在下面四个函数中哪个中截获数据,
TdiReceiveComplete
TdiReceiveOnEventHandler
TdiChainedReceiveEventHandler
TdiReceiveEventHandler

我试在TdiReceiveComplete和TdiReceiveOnEventHandler
中处理接收的数据,但不能使用
MmGetMdlVirtualAddress(Isp->MdlAddress)
得到的数据指针.

不知道这种思路对不对?
如果对的话,又怎样得到正确的指向数据的指针呢?
向大家请教.
我是新手,第一次写驱动,请大家多帮助.

 [/quote]
都要还要加上UDP的那几个EVENT。
你要仔细看TDI的文档。
我思故我在,脑袋不会坏.
wangdacheng
驱动牛犊
驱动牛犊
  • 注册日期2002-10-01
  • 最后登录2003-03-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-10-30 11:23

谢谢资深专家fracker,版主gjpland.
谢谢大家的支持.
我这就去试,仔细读DDK,并将结果贴出来,
遇到问题继续向大家求教.
wangdacheng
驱动牛犊
驱动牛犊
  • 注册日期2002-10-01
  • 最后登录2003-03-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-11-07 18:20
首先祝贺fracker成为版主!

经过大家指导和自己一段时间的摸索,
将自己在TDI处理数据的一些体会贴出来,不对之处请大家指点.
谢谢版主fracker和gjpland的帮助,给分.

发送数据拦截处理:
TDI_SEND
TDI_SEND_DATAGRAM

接收数据拦截处理:
TDI_EVENT_RECEIVE
TDI_EVENT_CHAINED_RECEIVE
TDI_EVENT_RECEIVE_EXPEDITED
TDI_EVENT_CHAINED_RECEIVE_EXPEDITED
TDI_RECEIVE_COMPLETE
TDI_RECEIVE_ON_EVENT_COMPLETE
TDI_EVENT_RECEIVE_DATAGRAM
TDI_EVENT_CHAINED_RECEIVE_DATAGRAM
TDI_RECEIVE_DG_COMPLETE
TDI_RECEIVE_DG_ON_EVENT_COMPLETE

fracker讲不拦截Complete系列的函数,
试验中我发现如果发送端一次发送的数据很多(>IP包长度),
TDI_EVENT_RECEIVE(TDI_EVENT_RECEIVE_DATAGRAM)事件只
发生一次,用户会发出TDI_RECEIVE请求获得剩下的数据.
我想出的办法就是通过拦截Complete来获得剩下的数据,
不知道这种思路对不对?

DDK文档讲CHAINED系列得到的数据是只读的,
我试着修改过,也成功了,这种做法是否正确?
游客

返回顶部