firtank
驱动牛犊
驱动牛犊
  • 注册日期2005-09-11
  • 最后登录2013-09-27
  • 粉丝1
  • 关注0
  • 积分14分
  • 威望96点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
阅读:2069回复:4

求助一个诡异的问题,郁闷中

楼主#
更多 发布于:2008-06-19 17:26
我在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,其它什么也没做。

路过的大大们,帮帮忙。
zjxj1988
驱动牛犊
驱动牛犊
  • 注册日期2007-03-06
  • 最后登录2009-03-20
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望49点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-06-20 10:44
帮顶一下~~关注中~~
xunge2010
驱动牛犊
驱动牛犊
  • 注册日期2012-06-19
  • 最后登录2012-09-27
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2012-08-04 10:57
哥们,问题解决没?
我很happy
Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
地板#
发布于:2012-08-21 13:56
我想原因是由于你的驱动根本没有被卸载掉,用!drvobj 命令加上你的驱动名,查看你的驱动状态。

确保在unload函数里面,把所有申请的资源都释放掉,如内存、线程等。
《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
地下室#
发布于:2012-08-21 13:57
你贴的代码有bug,IoFreeIrp(myIrp)应该放在完成函数里面调用。没有蓝屏是很奇怪的。打开Verifier测试了没有?
《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
游客

返回顶部