阅读:1646回复:5
NTDDK中BulkUsb驱动源码关于内存释放的一些疑问
分析源码后,我的理解是:
驱动在收到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分配一次内存,这样以前分配的内存岂不就丢失掉了? |
|
沙发#
发布于:2004-07-14 10:07
你写个程序测试一下看是否有你说的那种现象 没有。当有新的USB设备插入后,该USB设备并没有如预期的收到IRP_MN_STOP_DEVICE -> IRP_MN_START_DEVICE.具体一点说,USB设备没有收到任何IRP. 可是资料上不是说要停止设备,重新分配资源的吗? |
|
板凳#
发布于:2004-07-10 13:27
你写个程序测试一下看是否有你说的那种现象
|
|
|
地板#
发布于:2004-07-10 11:46
我的理解,IRP_MN_STOP_DEVICE 之后必定会发一个IRP_MN_REMOVE_DEVICE (对于USB设备而言)。
|
|
地下室#
发布于:2004-07-08 15:07
再提一下
唉! |
|
5楼#
发布于:2004-07-07 16:04
天哪,没人回答!这不难吧?
提一提。 |
|