lily311
驱动小牛
驱动小牛
  • 注册日期2002-08-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望26点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
阅读:1646回复:5

NTDDK中BulkUsb驱动源码关于内存释放的一些疑问

楼主#
更多 发布于:2004-07-07 11:01
分析源码后,我的理解是:

驱动在收到IRP_MN_START_DEVICE请求时调用BulkUsb_StartDevice启动设备,通过ExAllocatePool为UsbDeviceDescriptor分配内存,取得设备描述符.然后在收到IRP_MN_REMOVE_DEVICE请求时调用BulkUsb_RemoveDevice,通过ExFreePool将分配给UsbDeviceDescriptor的内存释放掉.

如果驱动收到Irp的序列是:
IRP_MN_START_DEVICE -> IRP_MN_REMOVE_DEVICE
那当然没什么问题.

如果驱动收到Irp的序列是:
IRP_MN_START_DEVICE -> IRP_MN_STOP_DEVICE -> IRP_MN_START_DEVICE
因为处理IRP_MN_STOP_DEVICE时没有释放UsbDeviceDescriptor的内存,如果接着又有一个IRP_MN_START_DEVICE进来,就会重新为UsbDeviceDescriptor分配一次内存,这样以前分配的内存岂不就丢失掉了?
lily311
驱动小牛
驱动小牛
  • 注册日期2002-08-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望26点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-14 10:07
你写个程序测试一下看是否有你说的那种现象


没有。当有新的USB设备插入后,该USB设备并没有如预期的收到IRP_MN_STOP_DEVICE -> IRP_MN_START_DEVICE.具体一点说,USB设备没有收到任何IRP.

可是资料上不是说要停止设备,重新分配资源的吗?
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-10 13:27
你写个程序测试一下看是否有你说的那种现象
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
windrv
驱动牛犊
驱动牛犊
  • 注册日期2004-07-05
  • 最后登录2004-07-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-10 11:46
我的理解,IRP_MN_STOP_DEVICE 之后必定会发一个IRP_MN_REMOVE_DEVICE (对于USB设备而言)。
lily311
驱动小牛
驱动小牛
  • 注册日期2002-08-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望26点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-08 15:07
再提一下
唉!
lily311
驱动小牛
驱动小牛
  • 注册日期2002-08-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望26点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-07-07 16:04
天哪,没人回答!这不难吧?
提一提。
游客

返回顶部