首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TDI_RECEIVE请求处理

TDI_RECEIVE请求处理
EN

Stack Overflow用户
提问于 2013-05-05 22:01:02
回答 1查看 116关注 0票数 0

我正在编写简单的TDI过滤器驱动程序(嗯,我记得现在是2013年))。我需要检查HTTP回复的第一个块。所以我截取TDI_RECEIVE请求,设置我的完成例程,并将IRP转发给下一个驱动程序。在完成例程中,我想检查返回的块。

代码如下:

代码语言:javascript
复制
case TDI_RECEIVE:{
            PVOID buf = MmGetSystemAddressForMdlSafe(Irp->MdlAddress,HighPagePriority);
            ULONG size = MmGetMdlByteCount(Irp->MdlAddress);

            IoCopyCurrentIrpStackLocationToNext(Irp);
            ntStatus = IoSetCompletionRoutineEx(MntrDevice,Irp,IoCompletion, NULL,TRUE,TRUE,TRUE);
            break;
............................................................................
 ntStatus = IoCallDriver ( NextDevice , Irp );
 return ntStatus ;

完成例程:

代码语言:javascript
复制
PVOID buf = MmGetSystemAddressForMdlSafe(irp->MdlAddress,HighPagePriority);
int size = Irp->IoStatus.Information;

这很奇怪,但是只有一个TDI_RECEIVE请求的MD大约为3K,并且相应的完整IRP包含网页寻呼机的最后一块(即没有HTTP响应,没有页面开始)。而且我没有看到任何其他recv/read请求。

有什么建议吗?他们藏在哪里(实际上我每个TCP会话只需要第一个HTTP响应的第一个块)?

EN

回答 1

Stack Overflow用户

发布于 2013-05-07 22:38:59

你需要在设置TDI_EVENT_CHAINED_RECEIVE回调时使用make hook (实际上还有更多的回调,但是这个可以用)。在此回调中,您可以分析接收到的数据,然后调用原始回调。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16385289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档