有没有办法在Windows XP和更新版本上以编程方式引起BSOD?怎么样?
顺便说一句,只是为了澄清,这不是出于恶意目的。客户端要求能够以这种方式关闭/重新启动其LAN上的终端。当我问为什么时,他们说,因为它比正常的重新启动要快... :)
(我很好奇那些将程序迁移到超级用户的人不理解的是“以编程方式”的哪一部分。)
有没有办法在Windows XP和更新版本上以编程方式引起BSOD?怎么样?
顺便说一句,只是为了澄清,这不是出于恶意目的。客户端要求能够以这种方式关闭/重新启动其LAN上的终端。当我问为什么时,他们说,因为它比正常的重新启动要快... :)
(我很好奇那些将程序迁移到超级用户的人不理解的是“以编程方式”的哪一部分。)
Answers:
可以告知键盘驱动程序引起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
玩得开心 ;)
旁注:故意为驱动程序编写者或即使在处理恶意软件时导致崩溃,这非常有用。如果将系统配置为创建全内存转储,则将获得正在运行的系统的映像,可以对其进行进一步分析。考虑类似死锁的情况,在这种情况下调试器不一定在所有情况下都可以提供帮助。
试试NotMyFault!
不知道确切的原因,但我相信Vista和7将默认关闭系统故障并且不显示BSOD。
蓝屏死机是内核恐慌。这意味着内核的一部分,操作系统的核心确实做了一些不好的事情。它可能是乱涂乱画的内存,它可能执行了本不应该包含的代码。以编程方式,您需要在内核空间中获取代码,然后以某种方式按需触发它。产品服务器有点冒险。
普通的Windows计算机在进程和内核中具有很多状态。无论需要进行什么清理以保持状态一致,都可以将其短路。
具体来说,BSOD是(通常)内核(或驱动程序)错误,内核处于错误状态,如此糟糕的感觉是它无法清理并宁愿重新启动,只是因为它没有而失去任何良好状态知道什么是好的,什么是坏的。任何缓冲区都无法刷新到磁盘。然后它将尝试在重新启动时进行清理,但是在关机/紧急情况下丢失了很多上下文,因此这将是保守的清除,必须从紧急情况中选择好坏的余数。
因此,关闭时您的一些优势在启动时就消失了,因为现在它需要弄清楚它的支腿从下面被切掉的位置。它需要运行chkdsk并清理处于部分写入状态的所有磁盘块。USB磁盘缓存很多。您可以关闭缓存,这样可以减少崩溃时丢失数据的可能性,但是如果不缓存,则可能会降低速度。您愿意丢失哪些文件?
简而言之,这是一个坏主意。即使发生清理,任何发生这种情况的生产机器也可能处于不稳定状态。这是不好的。
我只是说要关机然后重新启动。您将失去任何您认为是第一次需要重建服务器的时间节省,因为它无法启动或程序无法启动。
不得不提及的是,杀死csrss.exe进程将使BSOD失效。但不是在最新的Windows(8、8.1)上。
STATUS_SYSTEM_PROCESS_TERMINATED
),顺便说一句。
来自https://www.mpgh.net/forum/showthread.php?t=1100477的代码段 适用于Windows 10.17134
#include <windows.h>
#pragma comment(lib, "ntdll.lib")
extern "C" NTSTATUS NTAPI RtlAdjustPrivilege(ULONG Privilege, BOOLEAN Enable, BOOLEAN CurrentThread, PBOOLEAN OldValue);
extern "C" NTSTATUS NTAPI NtRaiseHardError(LONG ErrorStatus, ULONG NumberOfParameters, ULONG UnicodeStringParameterMask,
PULONG_PTR Parameters, ULONG ValidResponseOptions, PULONG Response);
void BlueScreen()
{
BOOLEAN bl;
ULONG Response;
RtlAdjustPrivilege(19, TRUE, FALSE, &bl); // Enable SeShutdownPrivilege
NtRaiseHardError(STATUS_ASSERTION_FAILURE, 0, 0, NULL, 6, &Response); // Shutdown
}
在事件日志中似乎没有任何痕迹。在minidump中肯定会有痕迹吗?