我正在尝试制作一个定期记录一大堆事情的程序。具体原因是,如果它蓝屏,开发人员可以返回并检查大量环境,看看当时发生了什么。
我的问题,他们是导致蓝屏的方法吗?也许通过 windowsAPI 调用(也许是零内存?)。
Anywhoo,如果您能想出一种方法来导致蓝屏待命,我将不胜感激。
我正在测试它的计算机旨在接受这样的东西哈哈。
顺便说一句,我使用的语言是 C\C++。谢谢
您可以将机器配置为在击键时崩溃 (Ctrl-ScrollLock)
由于有时这在某些带有 USB 键盘的系统上不起作用,您还可以获取 Windows 调试工具,安装内核调试器,并使用“ .crash
”命令强制进行错误检查。
为了导致蓝屏死机,在内核模式下运行的驱动程序需要导致它。如果你真的想这样做,你可以编写一个驱动程序,将 KeBugCheck 暴露给用户模式。
http://msdn.microsoft.com/en-us/library/ms801640.aspx
感谢下面的 Andrew 指出这个实用程序:
如果您终止 csrss 进程,您将很快获得蓝屏。
如果您想模拟蓝屏等硬崩溃,您几乎必须拔掉电源线。不建议。
如果发生崩溃,任何未保存到持久存储的内容都将丢失。如果您想模拟崩溃以记录日志,请在您的记录器中写入一个“终止开关”,以停止日志记录。现在,您可以通过终止日志记录来模拟崩溃,并确保您拥有在发生实际崩溃时想要的数据。
首先,我建议您使用虚拟机来测试此BSOD。这将允许您保留备份,以防蓝屏死机对系统造成一些损害。这是有关如何通过按 CTRL+SCROLLLOCK+SCROLLLOCK来生成 BSOD的提示。
是否有一个 Windows API 来生成一个?不,根据这篇文章。尽管如此,如果您使用无效数据调用某些 API,它们仍然可能导致内核内部崩溃,这将导致您的 BSOD。
我不确定你到底要测试什么。由于您的程序定期运行,因此在系统运行时检查信息是否以您指定的频率转储就足够了?您是否在检查蓝屏后信息是否保留?根据您转储它的方式(以及您是否正在刷新缓冲区),这可能不是必需的。
如果您不想编写代码(驱动程序、IOCTL ...),您可以使用DiskCryptor。请注意,不需要磁盘加密。
只需要安装驱动:
dcinst.exe -设置
然后使用 DC 控制台生成一个 bsod:
dccon.exe -bsod