阅读:2538回复:4
two bug in passthru sample for winxp
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中。 |
|
最新喜欢:antspo...
|
沙发#
发布于:2003-01-13 13:09
补!!!
|
|
板凳#
发布于: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不能执行” 互斥操作。 不知斑竹是否同意上述说法。 |
|
地板#
发布于:2003-02-20 17:15
请问版主:“不知道为什么MS的作者用了tag函数还没有发现这个bug”是一个什么样的BUG?在WINDOWS 2000以上的系统中,IPX协议都有BUG,也是不是同上的类似的BUG引起的呢?
|
|
地下室#
发布于: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. |
|