基于sfilter的磁盘过滤驱动Win764位下硬盘关闭后再次唤醒时死机(非蓝屏)

fly4free 2015-04-11 10:23:04
具体环境,由于暂时没有签名证书,使用的是 一个签名工具签名,然后使系统以测试模式启动,从而加载了驱动。
我的驱动是基于一个FileSpy源码改编的。
我的驱动的行为主要是过滤移动存储设备的“磁盘设备”。

大多数情况下程序运行良好。就是偶然一次好长时间没有碰电脑,然后屏幕自动关了,按任意键后预期的显示器变亮情形没有出现,最后发现是死机了,但不是蓝屏,是显示器无信号,后来我在电源管理把关闭显示器改为从不,之后显示器确实不关闭,但是在从桌面打开我的电脑时死机了,鼠标能动,其他没反应。

我能想象得到的就是,硬盘唤醒这块导致的非蓝屏死机,因为我的驱动的功能就是sfilter的能力,别的也没干啥,就算其他设备的电源事件也不会和我的驱动有关吧,没有加hook功能什么的。卸载掉我的驱动后问题就不存在了,

我的驱动代码没有处理 MJ_IRP_POWER,直接 passthrough了。就是处理create,close,cleanup,deviceiocontrol,简单的几个irp。
这个代码已经测试过挺长时间了,目前除了“唤醒”这块,其他地方没啥大问题(当然不保证没有潜在问题,这不就遇到了吗)。我实在找不到问题出自哪里,哪位大神可以提供些线索让我知道下一步该怎么办?
...全文
234 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
会思考的草 2015-05-23
  • 打赏
  • 举报
回复
Call IoSkipCurrentIrpStackLocation to remove the current IRP stack location, so that the I/O Manager will not look for a completion routine there when it performs completion processing on the IRP.
赵4老师 2015-05-15
  • 打赏
  • 举报
回复
赵4老师 2015-05-15
  • 打赏
  • 举报
回复
详细的运行日志是调试底层程序的基础设施。
worldy 2015-05-15
  • 打赏
  • 举报
回复
蓦然回首,那人且在灯火阑珊处
shenyi0106 2015-05-15
  • 打赏
  • 举报
回复
抓住以巴。。。。。。
fly4free 2015-05-15
  • 打赏
  • 举报
回复
结贴前通知,周一结,嘿嘿。
fly4free 2015-04-30
  • 打赏
  • 举报
回复
最近把代码做了一个处理,这个问题不存在了。 大致导致这个问题的原因是: 我在passthrough代码中,针对每一个IRP,都设置了 完成例程,在CallDriver后,等待回应。 但是,根据我的经验,有些IRP仅仅是“通知类型”,不会调用完成例程,之前我就已经发现了几个,单独做了特殊处理。 不过楼主贴这个情况,实在是不知道哪个IRP是“单向传递”的。 有谁知道还有哪些 IRP 是“单向传递”的,回应一个吧,分就给你了。

2,644

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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