HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
阅读:2538回复:4

two bug in passthru sample for winxp

楼主#
更多 发布于:2003-01-13 11:54
1、分配adapter结构内存的时候,
TotalSize = sizeof(ADAPT)+DeviceName->MaxBufferLength;
用了NdisAllocateMemoryTag(TotalSize...);
但是释放的时候
NdisFreeMemoryTag(sizeof(ADAPT)...);

不知道为什么MS的作者用了tag函数还没有发现这个bug。
解决方法,NdisFreeMemoryTag(TotalSize...);

2、ptbindadapter和mpinitialize以及mphalt之间的一个
同步问题会让系统在此情况下dump:
ptbindadapter中会让mpinitialize调用,并且初始化
真正的miniport_initialize(先加载协议,然后才是网卡)
如果成功的话,但是真正的miniport却初始化不成功,
例如它调用requestinformation发现该协议不是它所支持
的,他会返回failure,这时导致mphalt调用,释放内存,
然后到ptbindadapter会发现失败,也释放内存,一个
内存被释放两次,dump。
解决方法:在ptbindadapter中,mphalt不能执行,用
event保护(两个函数都在passive上运行,所以可以用
event),释放内存后立即设置指针为NULL。

以上两个bug均不存在于2k passthru sample中。


最新喜欢:

antspowerantspo...
不再回忆从前,我已经生活在幸福当中。
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-01-13 13:09
补!!!
zenghao
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2010-04-29
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-14 15:12
请教胡斑竹:
XP_DDK Passthru
在PtBindAdapter函数中调用
NdisIMInitializeDeviceInstanceEx之前有
NdisInitializeEvent(&pAdapt->MiniportInitEvent);

在MPInitialize完成之前有
NdisSetEvent(&pAdapt->MiniportInitEvent);

在PtUnbindAdapter中
NdisIMDeInitializeDeviceInstance之前有
NdisWaitEvent(&pAdapt->MiniportInitEvent, 0);
按理已经实现了“ptbindadapter中,mphalt不能执行”
互斥操作。
不知斑竹是否同意上述说法。

lzwf4
驱动小牛
驱动小牛
  • 注册日期2002-10-10
  • 最后登录2006-06-09
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-02-20 17:15
请问版主:“不知道为什么MS的作者用了tag函数还没有发现这个bug”是一个什么样的BUG?在WINDOWS 2000以上的系统中,IPX协议都有BUG,也是不是同上的类似的BUG引起的呢?
alan2u
驱动巨牛
驱动巨牛
  • 注册日期2001-12-11
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分5926分
  • 威望43813点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2003-02-21 11:12
1、分配adapter结构内存的时候,
TotalSize = sizeof(ADAPT)+DeviceName->MaxBufferLength;
用了NdisAllocateMemoryTag(TotalSize...);
但是释放的时候
NdisFreeMemoryTag(sizeof(ADAPT)...);

不知道为什么MS的作者用了tag函数还没有发现这个bug。
解决方法,NdisFreeMemoryTag(TotalSize...);


这个应该不算bug。因为在帮助文档里对于长度这个参数是这么说的:
Length
Specifies the size in bytes of the memory block to be released. This parameter must be identical to the Length that was passed to NdisAllocateMemory. However, if the MemoryFlags setting is zero, this parameter is ignored.

游客

返回顶部