驱动中创建PDO,再创建符号链接,应用程序使用不了

leftbackfielder 2013-09-20 05:13:52
一个键盘驱动过滤程序,开机启动,这个时候一切正常,上层应用CreateFile也OK.
这个时候,拔掉键盘,检测到这个拔动作之后,手动调用一次卸载函数(函数中删除了符号链接),
把所有的设备解绑并删除.然后,插入键盘,此时重新创建PDO,符号链接一系列初始化工作,重新附加
到键盘上,我跟踪程序看到这些初始化工作也都成功了.但是,重新创建之后,应用程序调用CreateFile
的时候,就失败返回值是2--无法找到文件.
可能是哪出了问题呢?
...全文
234 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
leftbackfielder 2013-10-08
  • 打赏
  • 举报
回复
引用 5 楼 zihan 的回复:
你说的手动调用卸载函数是什么意思?驱动是不需要你手动调用卸载函数的。应该是处理USB的PnP事件就可以了。 你可以尝试一下在WinDBG里面看看,拔出之后,驱动的实例在DriverStack中还有没有,如果还有,那么就是没有从内存中卸载干净,要看看你的移除事件处理。 如果没有,那么可以在打开设备的时候打个断点,看能否跟踪到。 因为你只是一个过滤驱动,没有功能实现,不会这么复杂。
不好意思,十一回家,家里没有网 那个问题解决了,是因为初始化完成的标志位没有设置上.驱动程序导致蓝屏. FAULTING_MODULE: 85456000 nt DEBUG_FLR_IMAGE_TIMESTAMP: 52451ef6 BUGCHECK_STR: 0xc9_7 DRIVER_VERIFIER_IO_VIOLATION_TYPE: 7 IRP_CANCEL_ROUTINE: KGuardian!CancelIrpRoutine+0 [d:\trunk\src\kguardian\kguardian.cpp @ 1199] 9f3f7c30 8bff mov edi,edi FAULTING_IP: KGuardian!CancelIrpRoutine+0 [d:\trunk\src\kguardian\kguardian.cpp @ 1199] 9f3f7c30 8bff mov edi,edi FOLLOWUP_IP: KGuardian!CancelIrpRoutine+0 [d:\trunk\src\kguardian\kguardian.cpp @ 1199] 9f3f7c30 8bff mov edi,edi IRP_ADDRESS: baf32f68 CUSTOMER_CRASH_COUNT: 1 DEFAULT_BUCKET_ID: WRONG_SYMBOLS LAST_CONTROL_TRANSFER: from 85787a7e to 85534bfc STACK_TEXT: WARNING: Stack unwind information not available. Following frames may be wrong. 8d353a44 85787a7e 000000c9 00000007 9f3f7c30 nt+0xdebfc 8d353ac0 9f3f7959 bae40ff8 baf32f68 013f8b10 nt+0x331a7e 8d353ae0 9f3f7710 b1c1e240 baeb4f88 00000000 KGuardian!RecordKeyInfo+0xf9 [d:\trunk\src\kguardian\kguardian.cpp @ 1065] 8d353b14 85787cd4 b1c1e240 baf50de0 b1c1e240 KGuardian!ReadCompletion+0x120 [d:\trunk\src\kguardian\kguardian.cpp @ 913] 8d353b44 854cddd3 b1c1e240 baf50de0 8d353bb8 nt+0x331cd4 8d353b88 85787b64 945981bc 92ff3b48 baf50de0 nt+0x77dd3 8d353bf0 945967a2 945851f0 92ff3d30 00000000 nt+0x331b64 8d353c14 94582b74 00000078 a3e14cac 0000000c kbdclass!KeyboardClassPlugPlayNotification+0x56 8d353c78 854cd675 92ff3edc 01ff3c78 00000000 i8042prt!I8xFilterResourceRequirements+0x182 8d353cd4 854cd4d8 8d337120 8d33c800 00000000 nt+0x77675 8d353d20 854cd2f8 00000000 0000000e 00000470 nt+0x774d8 8d353d24 00000000 0000000e 00000470 000004f0 nt+0x772f8 STACK_COMMAND: .bugcheck ; kb FAULTING_SOURCE_CODE: 1195: return keyMap[ulScanCode]; 1196: } 1197: 1198: NTSTATUS CancelIrpRoutine( IN PDEVICE_OBJECT pDevObj,IN PIRP pIrp ) > 1199: { 1200: pIrp->IoStatus.Status = STATUS_CANCELLED; 1201: pIrp->Cancel = TRUE; 1202: ClearPendingIrp(pDevObj->DriverObject,FALSE); 1203: IoSetCancelRoutine(pIrp,NULL); 1204: IoCompleteRequest( pIrp, IO_NO_INCREMENT ); SYMBOL_NAME: KGuardian!CancelIrpRoutine+0 FOLLOWUP_NAME: MachineOwner MODULE_NAME: KGuardian IMAGE_NAME: KGuardian.sys BUCKET_ID: WRONG_SYMBOLS Followup: MachineOwner --------- 3: kd> .bugcheck Bugcheck code 000000C9 Arguments 00000007 9f3f7c30 baf32f68 00000000 这个是DUMP文件出来的.请问一下,分析这些信息,要从哪块入手?
zihan 2013-09-23
  • 打赏
  • 举报
回复
你说的手动调用卸载函数是什么意思?驱动是不需要你手动调用卸载函数的。应该是处理USB的PnP事件就可以了。 你可以尝试一下在WinDBG里面看看,拔出之后,驱动的实例在DriverStack中还有没有,如果还有,那么就是没有从内存中卸载干净,要看看你的移除事件处理。 如果没有,那么可以在打开设备的时候打个断点,看能否跟踪到。 因为你只是一个过滤驱动,没有功能实现,不会这么复杂。
leftbackfielder 2013-09-22
  • 打赏
  • 举报
回复
跟了半天的程序,发现创建设备还是链接设备,都成功了.符号链接的创建和删除成功了. 刚开始写的是\\DosDevices\\MyDrv 后来在网上查,有一种说法是是否可见,所以改成\\DosDevices\\Global\\MyDriver这样也不成.. 哪位大侠给点思路.
leftbackfielder 2013-09-22
  • 打赏
  • 举报
回复
引用 1 楼 zihan 的回复:
你的是USB键盘吧? 应用程序打开的时候的句柄使用的是什么?初步估计是你的上层程序在拔出设备后,没有关闭原来的句柄,导致原来的句柄没有被正确的释放导致。 另外,没有看到你的设计,我不知道你在哪里做的删除动作,是在OnSupriseRemove里面吗?从你的感觉描述来看,是把驱动做了常驻内存,如果常驻了,要特别注意这块的问题。
跟程序的时候已经看到,应用程序正常CloseHandle了句柄 在驱动里面,监测USB键盘的插入和拔出,拔出的时候,调用卸载函数,再插入调用初始化工作. 常驻内存是什么意思?是什么常驻了?
leftbackfielder 2013-09-22
  • 打赏
  • 举报
回复
自己UP~~ 用WINOBJ查看设备对像的时候,发现,拔出再插入之后,虽然都成功了(在WINOBJ中可以显示出来) 但是,一双击也会提示找不到文件 1.手动调用卸载函数之后,是不是驱动也变得不可用了? 2.NT的驱动程序,如果要检测USB即插即用,可以吗?
zihan 2013-09-21
  • 打赏
  • 举报
回复
你的是USB键盘吧? 应用程序打开的时候的句柄使用的是什么?初步估计是你的上层程序在拔出设备后,没有关闭原来的句柄,导致原来的句柄没有被正确的释放导致。 另外,没有看到你的设计,我不知道你在哪里做的删除动作,是在OnSupriseRemove里面吗?从你的感觉描述来看,是把驱动做了常驻内存,如果常驻了,要特别注意这块的问题。

21,616

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧