-2

我编写了一个内核驱动程序,它连接到一个进程并隐藏一个文件夹。该驱动程序运行良好,直到我连接了外部硬盘。

此时,我的操作系统(Windows XP 或 Server 2003)因蓝屏死机 (BSOD) 而崩溃。

什么可能导致此崩溃,我该如何修改我的驱动程序来解决它?

4

3 回答 3

1

一般有两种方式:

  1. 事后调试。这通常是当您没有可用于重现崩溃的本地计算机时所做的。在这种情况下,您正在检查故障转储文件(完整转储或小型转储)。
  2. 现场调试。在这种情况下,如果您知道系统将要崩溃,您可以准备一台机器来使用 WinDbg 控制这台机器,并通过串行或 FireWire 电缆连接。后者要快得多。

但是,我同意您提供的细节太少。你“上钩”了?怎么样?SSDT 挂钩?或者您是否使用正确的方式编写过滤器驱动程序?如果是过滤器驱动程序,哪个型号?微型过滤器还是传统过滤器?

我刚刚注意到您的评论是您挂钩“NtOpenProcess 和 NtQueryDirectoryFile”,所以这听起来像 SSDT 挂钩。您在实施中到底在做什么?我知道很多驱动程序不正确的 SSDT 挂钩。它从用于获取钩子的方法开始,通常不会以大胆的实现结束。

请注意,对于实时调试,WinDbg 提供了一些很好的功能,可以在启动时传输和加载最新的驱动程序版本。因此,您无需额外准备即可调试最新版本。远程端的内核调试器和您机器上的 WinDbg 会处理它。

此外,您可能希望将您的问题发布到 OSR(即 NTDEV)的列表中。

于 2011-02-12T15:59:48.780 回答
1

在开发内核驱动程序时,通常您希望在虚拟机中使用内核调试器连接来测试它们(主机是调试器,VM 是被调试对象)。一些虚拟机环境为调试提供直接支持。

当然,之后您需要在各种物理和虚拟硬件上进行调试。

于 2011-02-12T16:07:47.753 回答
0

您几乎没有发布 BSOD 的技术细节,或者您的代码如何工作,因此无法提供具体答案。作为一般的起点,我建议您分析小型转储,以了解触​​发 BSOD 的问题的一些细节。这是一个很好的入门指南。

http://forums.majorgeeks.com/showthread.php?p=1418737

于 2011-01-29T17:22:26.823 回答