阅读:2153回复:4
求助一个诡异的问题,郁闷中
我在U盘过滤驱动中,用IRP_MN_QUERY_DEVICE_RELATIONS去取PDO,出现了一个诡异的问题。
当开机后,U盘第一次插入,一切正常。可是,当删除U盘再重新插入,就有问题了。系统“叮咚”一声后,根本不再调用我的AddDevice例程。设备管理器中,USB Mass Storage Device有个黄色惊叹号。用DeviceTree也没看到USBStor.sys... 重启机子后,第一次又正常,然后又这样... 注释掉这段代码后,就可以了: myIrp = IoAllocateIrp(((PUSB_DEVICE_EXTENSION)pCurrentDO->DeviceExtension)->NextLowerDriver->StackSize+1,TRUE); //申请IRP myStack = IoGetNextIrpStackLocation(myIrp); //设置IRP myStack->MajorFunction = IRP_MJ_PNP; myStack->MinorFunction = IRP_MN_QUERY_DEVICE_RELATIONS; myStack->Parameters.QueryDeviceRelations.Type = TargetDeviceRelation; myIrp->IoStatus.Status = STATUS_NOT_SUPPORTED; myIrp->IoStatus.Information = 0; IoSetCompletionRoutine( myIrp,GetPDOCompletion,NULL,TRUE,TRUE,TRUE); //设置完成例程 IoCallDriver(((PUSB_DEVICE_EXTENSION)pCurrentDO->DeviceExtension)->NextLowerDriver,myIrp); pPDO = ((PDEVICE_RELATIONS)myIrp->IoStatus.Information)->Objects[0]; IoFreeIrp(myIrp); 在完成例程GetPDOCompletion中,我只是简单的return STATUS_MORE_PROCESSING_REQUIRED,其它什么也没做。 路过的大大们,帮帮忙。 |
|
沙发#
发布于:2008-06-20 10:44
帮顶一下~~关注中~~
|
|
板凳#
发布于:2012-08-04 10:57
哥们,问题解决没?
|
|
|
地板#
发布于:2012-08-21 13:56
我想原因是由于你的驱动根本没有被卸载掉,用!drvobj 命令加上你的驱动名,查看你的驱动状态。
确保在unload函数里面,把所有申请的资源都释放掉,如内存、线程等。 |
|
|
地下室#
发布于:2012-08-21 13:57
你贴的代码有bug,IoFreeIrp(myIrp)应该放在完成函数里面调用。没有蓝屏是很奇怪的。打开Verifier测试了没有?
|
|
|