您的位置:首页 > 其它

流驱动XXX_Init中分配内存引起的问题

2014-10-20 11:08 197 查看
全局类(无继承、无虚函数、无静态成员)在XXX_Init中进行的new,按照往常应用开发的经验认为类占用内存是整体清零了,实际运行中发现有成员变量是非零值(具体来说是排列靠前的成员),而且数值每次都一样。改用malloc在XXX_Init中分配同样大小的内存,问题同样存在。如果在XXX_Open等其它流驱动接口中分配则无此问题。有问题的内存分布情况是这样的:

00720044 00760069 00720065 00000073 00630041 00690074 00650076 0036005c 
005c0033 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000
前面九个整型数据感觉象是unicode编码的字符串,使用UE转换出来后是"rDvire scAitev6\\3",表面看杂乱无章,但是每两个ascii字符进行对调后变成"Drivers Active\63\",已经可以看出一些线索了,将两个'\'移到一起后变成"Drivers Active\\63",这不就象流驱动加载后在注册表中的活动路径吗?查看注册表信息此驱动确实是这个活动路径。由于流驱动的XXX_Init接口是由设备管理器加载的BusEnmu.dll调用并传递活动路径的,因此可以猜测导致问题的原因有两个:

1、在BusEnum.dll中存在BUG导致此问题的出现

2、XXX_Init的调用规则导致此问题的出现

具体的原因没有再深入,针对此问题要么是进行手动清零,要么是避免在XXX_Init中进行内存的分配。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: