【问题标题】:How can I debug a kernel driver crash in Windows? [closed]如何在 Windows 中调试内核驱动程序崩溃? [关闭]
【发布时间】:2011-01-13 07:25:18
【问题描述】:

我编写了一个内核驱动程序,它可以连接到一个进程并隐藏一个文件夹。这个驱动很好用,直到我连接了一个外置硬盘。

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

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

【问题讨论】:

  • 这就像是在说,“医生,我今天不舒服,你能帮帮我吗?”
  • 医生,我这样做的时候胳膊疼。那就不要那样做。
  • 我需要将外部硬盘连接到系统
  • @M.Rezaei:其他两位评论者试图告诉您的是,在不发布一些代码的情况下帮助您确定问题的根源非常非常或者至少是一个堆栈跟踪,它可能会给我们一些关于出了什么问题的提示。您可以随时编辑您的问题以添加额外信息。
  • 隐藏进程? SO不是寻求rootkit开发帮助的地方。

标签: windows crash kernel kernel-mode


【解决方案1】:

一般有两种方式:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-14
        • 2015-09-13
        • 2011-07-08
        • 2021-02-08
        • 2014-07-25
        • 2016-03-12
        • 2019-02-10
        • 2023-03-28
        相关资源
        最近更新 更多