阅读:2275回复:1
TDI过滤驱动中MDL何时用到其中next中的内容?
我在尝试截获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? |
|
沙发#
发布于:2009-07-20 13:30
是否不管TDI_SEND,TDI_RECEIVE,TDI_EVENT_RECEIVE,TDI_EVENT_CHAIN_RECEIVE,只要需要读取MDL中数据,都遍历MDL中next,直到其为NULL为止?
|
|