我编写了一个内核驱动程序,它挂钩进程并隐藏文件夹。这个驱动程序运行良好,直到我连接外部硬盘。
此时,我的操作系统(Windows XP或Server 2003)因蓝屏死机(BSOD)而崩溃。
导致此次崩溃的原因是什么,以及如何修改我的驱动程序来解决它?
答案 0 :(得分:1)
一般来说会有两种方式:
但是,我同意你提供的细节太少了。你“勾”?好吧,怎么样? SSDT卡挂?或者您使用正确的方式编写过滤器驱动程序?如果是过滤器驱动程序,哪个型号?迷你过滤器或传统过滤器?
我刚刚注意到你勾选“NtOpenProcess和NtQueryDirectoryFile”的评论,所以听起来像SSDT挂钩。 你在实施中究竟做了什么?我知道很多驱动程序做不正确的SSDT挂钩。它从用于获取钩子的方法开始,通常不会以大胆的实现结束。
请注意,对于实时调试,WinDbg提供了一些很好的功能,可以在启动时传输和加载最新的驱动程序版本。因此,您无需额外准备即可调试最新版本。远程端的内核调试器和机器上的WinDbg将负责处理它。
此外,您可能希望将问题发布到OSR(即NTDEV)的列表中。
答案 1 :(得分:1)
在开发内核驱动程序时,通常需要在虚拟机中测试它们,并使用内核调试器连接(主机是调试器,VM是调试对象)。某些虚拟机环境为调试提供了直接支持。
当然,您需要在各种物理和虚拟硬件上进行调试。
答案 2 :(得分:0)
您几乎没有公布BSOD的技术细节或代码如何工作,因此无法提供具体答案。作为一般起点,我建议你分析一下minidump以获得一些触发BSOD的错误细节。这是一个很好的入门指南。