首页
社区
课程
招聘
[讨论]这个算是官方ndis passthru bug?
发表于: 2014-5-17 12:33 2845

[讨论]这个算是官方ndis passthru bug?

2014-5-17 12:33
2845
最近在弄NDIS驱动这个东东,自己也写一个类似P2P总结者的东西,然后今天仔细看了一下passthru的代码,突然看到一个地方没有明白过来,后面自己一推理貌似发现好像是BUG。
   TotalSize = sizeof(ADAPT) + Param->ParameterData.StringData.MaximumLength;
开始没有看明白为什么要要加上Param->ParameterData.StringData.MaximumLength,后面看到了
 pAdapt->DeviceName.MaximumLength = Param->ParameterData.StringData.MaximumLength;
        pAdapt->DeviceName.Length = Param->ParameterData.StringData.Length;
        pAdapt->DeviceName.Buffer = (PWCHAR)((ULONG_PTR)pAdapt + sizeof(ADAPT));
        NdisMoveMemory(pAdapt->DeviceName.Buffer, Param->ParameterData.StringData.Buffer, Param->ParameterData.StringData.MaximumLength);

原来是给他用的,但我又不明白了(ULONG_PTR)pAdapt ,为什么要ULONG_PTR而不是CHAR*,根据官方代码意思在分配结构时候多分配一些内存对字符串用,这样释放时候就只要释放pAdapt,这样就不要单独释放结构体里面的内存,从而防止内存泄漏。那么这里只要移动到结构体后面即可,如果用ULONG_PTR,那么他会多移动一些字节,很可能越界导致蓝屏。这里为什么没有蓝屏,可能是 Param->ParameterData.StringData.MaximumLength 运气好防止目前这么大的结构体不会越界,但如果我们添加一些新的成员很可能导致越界从而蓝屏。后面自己修改为CHAR*,也没有出现任何问题。
  我感觉我这么分析应该没有错,不知道你们怎么认为?

 顺便分享我最近做的演示:
1:禁止局域网内其他的电脑IP访问。
2:禁止局域网内其他的电脑网页访问。
3:禁止局域网内其他的电脑指定QQ登录。(指定QQ,这些都可以针对自己机器,反正都是过滤数据包)

   自己用自己的2台真机测试,效果还是蛮好,由于一些地方写的硬编码还需要需改,加上WIN7上还没有测试,等自己完成了再分享源代码。第一次发帖,求顶。。。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//