如果Windows硬挂/冻结(例如冻结的屏幕,没有LED闪烁,对输入(包括Ctrl + Alt + Del等)的反应),我需要测试设备的行为。为了在合理的短时间内进行足够的实验,我需要以编程方式或其他方式启动这些挂起。

我对Windows 10特别感兴趣,但对其他版本的任何工作方式都表示赞赏。 />
我在该主题上进行的每一次搜索都不足为奇,这使我开始讨论如何消除这些情况,而不是引起它们。因此,这个问题似乎很奇怪。

反馈:
我已经尝试了答案和评论中提供的许多食谱。首先,我对带来BSoD的崩溃不感兴趣(这就是为什么我描述了冻结,而不是崩溃)。

我必须承认Windows 10 64位对许多方法。它可以很好地处理几乎所有的CPU负载方法(包括fork-bomb,loop等)。引发立即错误的方法(大多数NotMyFault挂起方法)由操作系统通过重新引导或关闭进行处理(这不是我所追求的)。最好的结果是通过NotMyFault的内存泄漏方法获得的-真正的冻结,没有重新启动的机会。

最后,Microsoft谈论使Windows冻结的大量文档给我留下了深刻的印象。看起来他们比对面的人(对抗冻结)更了解这部分;-)

评论

评论不作进一步讨论;此对话已移至聊天。

您可以使用计算器进行计算,该计算会冻结CPU上的内核,直到完成为止。在四核计算机上,您显然要做四次。但是我无法终生记住导致它的数学方程式。

@mickburkejnr阶乘为100000。切换到“科学视图”类型100000并按“ n!”。这在旧的Windows版本上效果很好。如今,您会收到一条警告,指出此计算可能需要很长时间,您可以取消它。

刚开始使用它。

安装升级总是对我有用。

#1 楼

也许可以这样做:
从键盘强制系统崩溃


对于USB键盘,必须在注册表中启用键盘引发的崩溃。在注册表项中
HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ kbdhid \ Parameters中,创建一个名为CrashOnCtrlScroll的值,并将其设置为等于 REG_DWORD值0x01。

必须重新启动系统才能使这些设置生效。

完成此操作后,可以使用以下热键序列来启动键盘崩溃:按住最右边的CTRL键,然后
按两次SCROLL LOCK键。


或者您也可以发动前叉炸弹:请参阅此SO问题

还有NotMyFault


Notmyfault是可用于崩溃,挂起并导致Windows系统上内核内存泄漏的工具。这对于学习如何识别和诊断设备驱动程序以及硬件问题很有用,您还可以使用它在行为异常的系统上生成蓝屏转储文件。


评论


尝试了ForkBomb和NotMyFault。一种泄漏方法似乎可以满足我的要求。其他的则没有用,因为它们会重新启动/关闭而不冻结。非常感谢。

–超级
17年3月3日,9:34

CtrlScroll带给您BSOD。是否冻结系统以进行调试还是仅重启系统取决于启动设置。

–user1686
17年11月4日在13:51

切勿在我的计算机旁允许Aaannnddd Duenni。曾经

– corsiKa
17年11月6日23:14

#2 楼

听起来您正在测试外部设备对操作系统无响应的反应。

如果您的硬件可以连接到虚拟化的Windows安装,则可以根据需要暂停和恢复虚拟机多次。在VirtualBox(或其他桌面虚拟化)环境中安装所需的OS,将正在使用的任何硬件接口(USB,以太网或其他)暴露给VM。

然后您可以随意暂停和恢复虚拟机。

#3 楼

至少在较旧的Windows版本(几年前)下,以下工作有效:

我编写了一个无穷循环的C程序:

while(1) {}


...然后我在任务管理器中为该程序提供了“实时优先级”(还有一个API可以做到这一点)。

在多核系统上,我需要多次因此,每个内核上都运行一个循环...

评论


要减少CPU的温度,请执行以下操作:将#include 中的_mm_pause()放入循环中。那是CPU硬件指令,而不是任何形式的“睡眠”系统调用。就操作系统而言,您的过程与SuperPI并无区别;不同之处仅在于运行循环时CPU消耗了多少功率。

– Peter Cordes
17年11月2日在12:06

我不确定这是否会使Windows的内核模式部分停止工作。

– CodesInChaos
17年11月2日在15:49

@CodesInChaos:大多数内核线程以正常优先级运行。每个CPU和内核中的其中之一也已完成。

–约书亚
17年11月2日在18:47

涉及x86组装(STI + HLT)的另一种技术:stackoverflow.com/questions/3747847/…

–机械师
17年11月2日在22:29

@meklarian:应该是CLI; HLT。不过,大概您必须从特权模式执行此操作。原则上,它仍然可以由NMI或类似机构营救。

– Nate Eldredge
17年11月4日在15:04



#4 楼

最强的内核挂起(即,没有鼠标跟踪等)是代码在内核模式下进入无限循环且中断已关闭的情况。

可以使用设备驱动程序来实现,甚至更好,您可以编写驱动程序,使其在您的控制下启动和停止挂起(假设无限循环正在测试您控制的情况)。

如何编写和安装该驱动程序将是另一个问题或三个问题的主题,但这就是我要采取的方法。

#5 楼

请在StackOverflow上检查与您类似的以下问题:如何使Windows在短时间内冻结

其中的tl; dr是没有办法(可靠地)做到这一点。 br />
除了冻结或挂起Windows之外,也许您可​​以中断与设备的通信。

我不知道您的设备是什么以及如何连接。例如,如果是USB或以太网适配器,则可以在“设备管理器”中轻松将其停用或拔出插头?如果强行使系统死机或挂起,则可能会以各种方式损坏系统,因此请谨慎操作。

评论


如果对软件结果不满意,我将考虑物理断开设备连接。谢谢。

–超级
17年3月3日,9:36

#6 楼



我是否已在Windows 7中对其进行了设置,并且此答案中的链接说明指定了XP或更高版本,因此它应与Windows 10兼容。

我认为它是通过FireWire / 1394设置的,因为它最简单。但是,您也可以通过网络或USB(以及更多)来完成此操作。

基本上,

通过在提升的提示符下运行这些命令(选择通道)来设置目标计算机。 n):

bcdedit /debug on
bcdedit /dbgsettings 1394 channel:n


与转到msconfig的启动标签相同,然后选择“高级”按钮:





然后(在重新启动目标计算机之后),使用与目标计算机相同的WinDbg位在主机上运行WinDbg。

那么,只要您想从主机上暂停内核执行就可以了。如果测试设备具有正在运行的异步操作,则此效果应与其他方法一样有效。

评论


有趣的方式。需要第二台PC。但是会尽可能尝试。

–超级
17年9月9日17:35

#7 楼

由于资源耗尽,此错误(Wayback机器链接)很快冻结了Windows。也很容易复制。

事实证明,这实际上是命令行(更具体地为cmd.exe)如何解析批处理的
错误(Wayback机器链接)
/>文件,并可能导致快速拒绝服务类型攻击;将
以下行放入批处理文件(没有新行)将由于以下错误而很快消耗大量内存(例如
):
^ nul<^

长话短说,当插入符号位于文件末尾时,文件的实际
末尾为“忽略”,文件句柄“重置”为0
(基本上),因此再次解析批次(无限)。


#8 楼

我不知道这是否完全冻结,因为鼠标光标仍在屏幕上移动,但是如果您遇到设备I / O错误(尤其是硬盘驱动器故障),Windows 7 UI将变得无响应。我的硬盘驱动器之一是通过SMART自报告即将发生的驱动器故障,Windows 7会挂载它,但是每当我尝试访问保存在其上的某些文件时挂起。 UI将最多锁定5分钟(鼠标光标移动除外),直到超时后它可以读取文件或卸下驱动器为止。我不知道Windows是否使用系统时钟作为超时时间,但是也许您是否以某种方式冻结时间可以延长超时时间?也许这可以使您走到那里,但并不是您要寻找的答案的100%。

#9 楼

这是我在调试课程中使用的应用程序的源代码。它显示了用户模式应用程序如何执行DoS攻击。

您会注意到鼠标光标很少移动(在我的计算机上每隔11秒钟移动一次)。如果您等待足够长的时间,您的PC可能仍会在电源按钮上做出反应。线程(0x100“时间紧迫”)。它将启动其中的8个,对于i7计算机而言已足够。如果您需要更多,请调整循环。其中更多的内容可能会进一步减慢速度。

#include "stdafx.h"
#include <windows.h>
#include <string>
#include <sstream>
#include <iostream>

void WasteTime()
{
    int priority = 15;
    ::SetThreadPriority(::GetCurrentThread(), priority);
    while (true)
    {
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    ::SetPriorityClass(::GetCurrentProcess(), 0x100);
    for(int i=0; i<7; i++)
    {
        LPDWORD threadid = 0;
        ::CreateThread(NULL, 64*1024, (LPTHREAD_START_ROUTINE)&WasteTime, NULL, 0, threadid);
        ::Sleep(2000);
    }

    WasteTime();

    return 0;
}


评论


请注意,该程序在C ++中具有未定义的行为,因此在某些优化设置下,编译器可以将整个程序替换为ExitProcess(0)

– Ben Voigt
17年11月10日在19:27

@BenVoigt在这种情况下(即使用g ++),如果-O0不够,则可能是gcc -Q -O0 --help = optimizers |启用grep(并手动禁用幸存的优化)是否可以解决ExitProcess(0)问题?

–Hastur
17年11月11日13:42



@BenVoigt:您能详细说明一下,您认为哪一部分是未定义的行为?

–托马斯·韦勒(Thomas Weller)
17年11月11日在19:18

@BenVoigt恕我直言,编译器只能优化return 0语句,因为该语句在while(true)之后存在。编译器可能发现这是一条无法到达的语句。

–托马斯·韦勒(Thomas Weller)
17年11月11日在19:29

C ++语言要求每个线程最终都能取得进步,这是根据几种可观察的行为类型定义的。因为无限循环永远不会取得可观察到的进展,所以编译器可以推断出它没有达到,并不仅将其删除,而且将其上方的所有代码都移回最近的分支。

– Ben Voigt
17年11月12日在6:18



#10 楼

您是否尝试过与Process Lasso捆绑在一起的CPUEater实用程序?
Ps。我不为沥青工作。

评论


我认为您的意思是“您尝试过”,而不是“您尝试过”。 :)

– fabspro
17年11月12日在22:12

@fabspro我认为“您尝试过吗”是正确的,因为OP已经接受了另一个答案,所以我指的事件(“解决问题”)已经过去,但是有人可能会说互联网一直在发生。无论如何,如果您建议编辑,我很乐意将接受它的任务委托给审阅队列。资料来源:englishforums.com/English/HaveYouTriedOrDidYouTry/zclxb/…

– beppe9000
17年11月12日23:18



我想如果他解决了问题,那么您的询问本可以是对他的回答的评论-诸如“当您在研究问题时,您尝试过_______实用程序的事情之一吗?”也许...只是建议事情:)

– fabspro
17年11月13日在11:06

...touché:)

– beppe9000
17年11月14日在1:55

呵呵呵呵呵呵呵

– fabspro
17年11月14日在11:10

#11 楼

如果您真的想挂起PC,完全导致其死机,只需用尽其所有RAM,然后将其强制到页面内存即可。这将不仅仅是冻结,而且实际上只是使事情过载,以致您甚至不能使用任务管理器,甚至不能通过键盘。即使该过程终止,PC仍需要很长时间才能恢复。 (最好!)

例如,您可以创建一个指向其自身的指针的类,并在while循环中,永久创建该类的新实例,并将每个新实例存储在先前实例的指针。也许也向类添加一些双精度或向量,以更快地消耗内存。然后,您可以有一个退出while循环并解构所有内容的计时器。当然,您必须稍等片刻才能恢复。

#12 楼

我建议使用以下代码简单地创建一个批处理文件:

@echo off
:x
start cmd.exe
start explorer.exe
start calc.exe
start notepad.exe
start iexplorer.exe
start paint.exe
goto x


这可能是最简单,最安全的方法。您可以使用任何Windows应用程序替换进程名称。

评论


这很可能只会耗尽RAM并导致硬盘驱动器损坏。根据您的计算机规格,计算机可能会继续运行此程序,尤其是因为列出的这些程序中有4个非常轻巧(iexplore.exe和explorer.exe可能会产生更大的影响)。它只会自动终止占用内存的进程。

–凯尔·阿普林(Kyle Applin)
17年11月6日在10:05



#13 楼


转到C:\ Windows \ Temp \
单击Ctrl-a以选择“全选”
单击Enter


评论


您需要成千上万的物品才能有效地实现此目的!我的%TEMP%文件夹为空...

– AlainD
17年11月3日在15:22

虽然这似乎是回答这个问题的合理尝试,但目前还不清楚这应该如何导致Windows按照OP的要求锁定。请编辑您的问题,以解释为什么这样做会满足OP的要求。

–我说恢复莫妮卡
17年3月3日在17:25

对于任何尝试过此方法但没有意识到自己被其中装有恶意软件的偷渡式下载所打击的人,我将感到抱歉。

–凯尔·阿普林(Kyle Applin)
17年11月6日在10:02

此外,所有非可执行文件呢?他们将弹出一个简单的对话框,在第一个对话框加载后,无需花费任何时间或资源即可显示。

– Synetech
20年6月25日在11:55