jonnystill7
驱动牛犊
驱动牛犊
  • 注册日期2009-07-15
  • 最后登录2011-11-28
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望61点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2231回复:1

TDI过滤驱动中MDL何时用到其中next中的内容?

楼主#
更多 发布于:2009-07-19 09:06
我在尝试截获IIS服务器发送的数据时,发现当客户端向IIS请求一个html页面后,在IIS服务器端的TDI_SEND中,
通过
TDI_REQUEST_KERNEL_SEND *param = (TDI_REQUEST_KERNEL_SEND *)(&irps->Parameters);
得到 param->SendLength的值是正确的,
而通过Irp->MdlAddress,获取其bytecount值,比param->SendLength值小,
而且在Irp->MdlAddres中获取的数据中不包含html页面的内容,
通过windbg跟踪发现,
只有通过Irp->MdlAddres->Next,其中获取的内容里面有html页面的内容。

不知道这是什么原因造成的?是因为IIS得特殊处理方式导致的么?在一般的socket程序中,似乎仅需要Irp->MdlAddres即可获取全部的数据了。

问题就是:何时需要处理MDL的chain?
jonnystill7
驱动牛犊
驱动牛犊
  • 注册日期2009-07-15
  • 最后登录2011-11-28
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望61点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-07-20 13:30
是否不管TDI_SEND,TDI_RECEIVE,TDI_EVENT_RECEIVE,TDI_EVENT_CHAIN_RECEIVE,只要需要读取MDL中数据,都遍历MDL中next,直到其为NULL为止?
游客

返回顶部