Мне нужно проверить поведение оборудования в случае, если Windows сильно зависает / зависает (например, зависший экран, нет мигания светодиодов, нет реакции на вводы, включая Ctrl + Alt + Del и т. Д.). Чтобы провести достаточно экспериментов за достаточно короткое время, мне нужно инициировать эти зависания либо программно, либо иным образом.
В частности, меня интересует Windows 10, но любой способ работы с другими версиями приветствуется.
Каждый поиск, который я проводил по этой теме, не удивительно приводит меня к обсуждению того, как устранить эти ситуации, а не провоцировать их. Так что вопрос может показаться достаточно странным.
Обратная связь: Я перепробовал многие рецепты, предлагаемые в ответах и комментариях. Прежде всего, меня не интересовали сбои, которые приводят к BSoD (именно поэтому я описал замораживание, а не сбой).
Должен признаться, что 64-битная Windows 10 показала хорошую устойчивость ко многим способам. Он неплохо справляется практически с любым методом загрузки процессора (включая форк-бомбу , петли и т. Д.). Методы, которые вызывают немедленные ошибки (большинство методов зависания NotMyFault) обрабатываются ОС с перезагрузкой или выключением (что я не преследовал). Наилучшие результаты были достигнуты путем утечке памяти методов NotMyFault - реальное замораживание без возможности перезагрузки.
Наконец, я был впечатлен количеством документации Microsoft, в которой говорится о заморозке Windows. Похоже, они знают эту часть намного лучше, чем противоположность (борьба с замораживанием) ;-)
Ответы:
Может быть, это может помочь: принудительное падение системы с клавиатуры
Или вы можете запустить вилочную бомбу: посмотрите этот ТАК вопрос
Также есть NotMyFault
источник
Похоже, вы тестируете реакцию внешнего устройства на то, что ОС перестает отвечать на запросы.
Если ваше оборудование может быть подключено к виртуализированной установке Windows, вы можете приостановить и возобновить работу виртуальной машины столько раз, сколько захотите. Установите желаемую ОС в среде VirtualBox (или другой виртуализации десктопов), предоставьте доступ к любому используемому аппаратному интерфейсу (USB, Ethernet или любой другой) для виртуальной машины.
Затем вы можете приостановить и возобновить работу виртуальной машины по своему желанию.
источник
По крайней мере, в более старой версии Windows (несколько лет назад) работало следующее:
Я написал программу на C с бесконечным циклом:
... затем я дал этой программе "приоритет в реальном времени" в диспетчере задач (есть также API, который может сделать это).
В многоядерной системе мне нужно делать это несколько раз, чтобы на каждом ядре работал один цикл ...
источник
_mm_pause()
из#include <immintrin.h>
в петле. Это аппаратная инструкция процессора, а не системный вызов "сна"; Что касается ОС, то ваш процесс неотличим от SuperPI; разница только в том, сколько энергии потребляет процессор во время работы цикла.STI
+HLT
): stackoverflow.com/questions/3747847/…CLI; HLT
. Предположительно, вы должны сделать это из привилегированного режима. В принципе, он все еще может быть спасен NMI или подобным.Самое сильное зависание ядра (то есть отсутствие отслеживания мыши и т. Д.) - это когда код переходит в бесконечный цикл в режиме ядра с отключенными прерываниями.
Этого можно добиться с помощью драйвера устройства, и, что еще лучше, вы можете написать драйвер так, чтобы он запускался и останавливал зависание под вашим контролем (предполагая, что бесконечный цикл проверяет состояние, которым вы управляете).
Как написать и установить этот драйвер, было бы темой другого или трех вопросов, но я бы выбрал этот подход.
источник
Пожалуйста, проверьте следующий вопрос на StackOverflow, который похож на ваш: Как заставить Windows зависнуть на короткий промежуток времени
Дело в том, что нет способа (надежно) сделать это.
Вместо того, чтобы зависать или заставлять Windows зависать, возможно, вы можете просто прервать связь с вашим оборудованием.
Я понятия не имею, какое у вас оборудование и как вы его подключаете. Например, если это адаптер USB или Ethernet, вы можете легко отключить его в диспетчере устройств или отключить? Если вы принудительно сломаете или повесите систему, вы можете повредить ее различными способами, поэтому будьте осторожны с тем, что вы делаете.
источник
Режим отладки ядра не вариант?
Я установил его в Windows 7, и в связанных инструкциях в этом ответе указан XP или более поздняя версия, поэтому он должен работать с Windows 10.
Я настроил его на FireWire / 1394 , так как, на мой взгляд, он самый простой. Но вы также можете сделать это по сети или через USB (и многое другое ).
В основном,
Настройте целевой компьютер, выполнив эти команды в режиме с повышенными привилегиями (выбирая канал
n
):Это то же самое, что перейти на вкладку загрузки
msconfig
и нажать кнопку «Дополнительно»:Затем (после перезагрузки целевого компьютера) запустите WinDbg на главном компьютере, используя ту же битность WinDbg целевого компьютера.
Тогда нужно просто приостановить выполнение ядра, когда вы захотите с хост-компьютера. Если на тестируемом оборудовании выполняется какая-то асинхронная операция, она должна быть такой же эффективной, как и другие средства.
источник
Я не знаю, считается ли это полной остановкой, потому что курсор мыши все еще движется на экране, но пользовательский интерфейс Windows 7 перестает отвечать на запросы, если у вас есть ошибки ввода-вывода устройства, в частности, сбой жесткого диска. Один из моих жестких дисков - самоотчет о неминуемой неисправности диска через SMART, и Windows 7 будет его монтировать, но зависает всякий раз, когда я пытаюсь получить доступ к определенным файлам, сохраненным на нем. Пользовательский интерфейс блокируется (за исключением движения курсора мыши) на срок до 5 минут, пока он не сможет прочитать файл или отключить диск после истечения времени ожидания. Я не знаю, использует ли Windows системные часы для тайм-аута, но, может быть, если вы как-то заморозите время, вы можете увеличить продолжительность тайм-аута? Может быть, это поможет вам частично, но не 100% ответ, который вы ищете.
источник
Эта ошибка довольно быстро замораживает Windows из-за истощения ресурсов. Легко воспроизвести тоже.
источник
Вот исходный код приложения, которое я использую на уроках отладки. Он показывает, как приложение в пользовательском режиме может выполнять своего рода DoS-атаку.
Вы заметите, что ваш курсор мыши перемещается очень редко (один раз каждые одиннадцать секунд на моем компьютере). Потенциально ваш компьютер все равно будет реагировать на кнопку питания, если вы будете ждать достаточно долго.
Он работает, используя бесконечный цикл и устанавливая наивысший приоритет для процесса (
0x100
«в реальном времени») и устанавливая наивысший приоритет для потоков (15
«критичный ко времени»). Запустится 8 из них, чего достаточно для компьютеров i7. Если вам нужно больше, адаптируйте цикл. Больше из них потенциально замедлит вещи больше.источник
ExitProcess(0)
g++
), если-O0
этого недостаточно, может бытьgcc -Q -O0 --help=optimizers | grep enabled
(и отключение выжившей оптимизации руками) может быть решитьExitProcess(0)
проблему?return 0
оператор, потому что он существует послеwhile(true)
. Компилятор может узнать, что это недостижимое утверждение.Вы пробовали утилиту CPUEater, входящую в комплект поставки Process Lasso? Ps. Я не работаю на битум.
источник
Если вы действительно хотите , чтобы повесить ваш компьютер, полностью , заставляя его просто заморозить , просто использовать все его памяти и заставить его страницы памяти. Это будет выходить за рамки простого замораживания и просто перегрузить объект, так что вы даже не сможете использовать диспетчер задач, даже с клавиатуры. Даже после завершения процесса восстановление ПК займет много времени. (Это лучшее!)
Например, вы можете создать класс с указателем на себя и в цикле while создать новый экземпляр этого класса навсегда, сохраняя каждый новый экземпляр в указателе предыдущего экземпляра. Возможно, добавьте в класс несколько двойников или векторов, чтобы быстрее использовать память. Тогда у вас может быть таймер, который выходит из цикла while и деконструирует все; конечно, вам придется немного подождать, пока он восстановится.
источник
Я бы предложил просто создать командный файл со следующим кодом:
Это, наверное, самый простой и безопасный способ сделать это. Вы можете заменить имена процессов на любые приложения Windows.
источник
iexplore.exe
и, возможно,explorer.exe
окажут большее влияние). Это просто уничтожит процессы захвата памяти автоматически.источник