有没有办法以编程方式在 Windows XP 和更新版本上导致 BSOD?怎么做?
顺便澄清一下,这不是出于恶意目的。客户要求能够以这种方式关闭/重启其 LAN 上的终端。当我问为什么时,他们说因为这比正常重启更快…… :)
(我很好奇那些人不明白谁将其迁移到超级用户,这是“编程”的哪一部分。呃。)
答案1
可以告知键盘驱动程序导致 BSOD:
HKLM\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters
或(适用于较旧的 PS/2 键盘)
HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters
并在那里设置一个REG_DWORD
名为CrashOnCtrlScroll
的1
。
Ctrl下次重启后,您可以通过+ ScrollLk+强制蓝屏ScrollLk。在这种情况下,错误检查代码将为 0xE2 (MANUALLY_INITIATED_CRASH)。
如果你真的想要一个编程方法,你需要找到该机器上某个驱动程序的漏洞,或者编写并安装一个简单的驱动程序,调用KeBugCheck
或KeBugCheckEx
。
玩得开心 ;)
边注:对于驱动程序编写者甚至在处理恶意软件时,故意造成这样的崩溃可能非常有用。如果您将系统配置为创建完整内存转储,那么您将获得正在运行的系统映像,可以进一步分析。考虑死锁之类的情况,调试器不一定在所有情况下都能提供帮助。
答案2
尝试一下NotMyFault!
答案3
不确定具体是如何导致它的,但我相信在 Vista 和 7 中,它默认在系统故障时关闭并且不显示 BSOD。
答案4
BSOD 是内核崩溃。这意味着内核的一部分(操作系统的核心)做了一些非常糟糕的事情。它可能会破坏内存,也可能执行不该执行的代码。从编程上讲,您需要获取内核空间中的代码,然后以某种方式根据需要触发它。对于生产服务器来说有点冒险。
普通 Windows 机器在进程和内核中有很多状态。无论你需要什么清理来保持状态一致,你都只是把它短路了。
具体来说,BSOD 通常是一个内核(或驱动程序)错误,内核处于不良状态,糟糕到无法清理,宁愿重新启动,失去它所拥有的任何良好状态,因为它不知道什么是好的,什么是坏的。任何缓冲区都无法刷新到磁盘。然后它会在重新启动时尝试清理,但它在关机/崩溃时丢失了很多上下文,因此这将是一个保守的清理,必须从崩溃中挑选出好的和坏的残留物。
因此,关机时的优势在启动时就消失了,因为现在它需要弄清楚自己在哪里被切断了腿。它需要运行 chkdsk 并清理处于部分写入状态的任何磁盘块。USB 磁盘缓存很多。您可以关闭缓存,这样可以减少崩溃时丢失数据的可能性,但不缓存会降低一些速度。您愿意丢失哪些文件?
简而言之,这是一个坏主意。任何发生这种情况的生产机器即使在清理后也可能处于不稳定状态。这很糟糕。
我想说的是,只需关闭并重新启动即可。第一次需要重建服务器时,您认为节省的时间将全部浪费,因为它无法启动或您的程序无法启动。