Muszę przetestować zachowanie urządzenia w przypadku systemu Windows twarde zawiesza się / zawiesza się (np zamrożony ekran, brak diody migające, brak reakcji na wejściach, w tym Ctrl + Alt + Del , etc.). Aby mieć wystarczająco dużo eksperymentów w dość krótkim czasie, muszę zainicjować te zawieszenia programowo lub w inny sposób.
Interesuje mnie w szczególności system Windows 10, ale doceniam każdy działający w innych wersjach.
Każde wyszukiwanie, które przeprowadziłem na ten temat, nie zaskakuje mnie w dyskusji na temat tego, jak wyeliminować te sytuacje, a nie ich sprowokować. Pytanie może więc wydawać się dość dziwne.
Informacje zwrotne: Wypróbowałem wiele przepisów kulinarnych zawartych w odpowiedziach i komentarzach. Przede wszystkim nie interesowały mnie awarie, które przynoszą BSoD (dlatego opisałem zawieszenie, a nie awarię).
Muszę przyznać, że 64-bitowy system Windows 10 wykazywał dobrą odporność na wiele sposobów. Radzi sobie z prawie każdą metodą obciążenia procesora (w tym bombami widełkowymi , pętlami itp.) Całkiem dobrze. Metody wywołujące natychmiastowe błędy (większość metod zawieszania się NotMyFault) są obsługiwane przez system operacyjny z ponownym uruchomieniem lub zamknięciem systemu (co nie jest moim celem). Najlepsze wyniki osiągnięto dzięki metodom wycieku pamięci NotMyFault - prawdziwe zawieszenie bez szans na ponowne uruchomienie.
Wreszcie byłem pod wrażeniem ilości dokumentacji firmy Microsoft, która mówi o zawieszeniu systemu Windows. Wygląda na to, że znają tę część znacznie lepiej niż na odwrót (walka z zamrażaniem) ;-)
Odpowiedzi:
Może to może pomóc: Wymuszenie awarii systemu z klawiatury
Lub możesz uruchomić bombę widelcową: zobacz to SO pytanie
Istnieje również NotMyFault
źródło
Wygląda na to, że testujesz reakcję urządzenia zewnętrznego na brak reakcji systemu operacyjnego.
Jeśli Twój sprzęt można podłączyć do zwirtualizowanej instalacji systemu Windows, możesz wstrzymać i wznowić maszynę wirtualną tyle razy, ile chcesz. Zainstaluj żądany system operacyjny w środowisku VirtualBox (lub innej wirtualizacji pulpitu), ujawnij maszynie wirtualnej, niezależnie od używanego interfejsu sprzętowego (USB, Ethernet lub cokolwiek innego).
Następnie możesz dowolnie wstrzymywać i wznawiać maszynę wirtualną.
źródło
Przynajmniej w starszej wersji systemu Windows (kilka lat temu) działały:
Napisałem program C z nieskończoną pętlą:
... wtedy nadałem temu programowi „priorytet w czasie rzeczywistym” w menedżerze zadań (istnieje również interfejs API, który może to zrobić).
W systemie wielordzeniowym musiałbym to zrobić wiele razy, aby na każdym rdzeniu działała jedna pętla ...
źródło
_mm_pause()
z#include <immintrin.h>
pętli. Jest to instrukcja sprzętowa procesora, a nie jakiekolwiek wywołanie systemowe „uśpienia”; jeśli chodzi o system operacyjny, twój proces jest nie do odróżnienia od SuperPI; różnica polega na tym, ile mocy zużywa procesor podczas pracy w pętli.STI
+HLT
): stackoverflow.com/questions/3747847/…CLI; HLT
. Prawdopodobnie musisz to zrobić w trybie uprzywilejowanym. Zasadniczo nadal można go uratować przez NMI lub podobny.Najsilniejsze zawieszenie jądra (tj. Brak śledzenia myszy itp.) Ma miejsce, gdy kod przechodzi w nieskończoną pętlę w trybie jądra z wyłączonymi przerwaniami.
Można to osiągnąć za pomocą sterownika urządzenia, a jeszcze lepiej, możesz napisać sterownik, aby uruchamiał się i zatrzymywał zawieszanie pod twoją kontrolą (zakładając, że nieskończona pętla testuje warunki, nad którymi masz kontrolę).
Jak napisać i zainstalować ten sterownik byłby tematem kolejnego pytania lub trzech, ale takie podejście przyjąłem.
źródło
Sprawdź następujące pytanie na StackOverflow, które jest podobne do twojego: Jak zawiesić okna na krótki czas
Tl; dr tego jest to, że nie ma sposobu (wiarygodnie) to zrobić.
Zamiast zamrażać lub zawieszać system Windows, być może możesz po prostu przerwać komunikację ze swoim sprzętem.
Nie mam pojęcia, jaki jest twój sprzęt i jak go podłączasz. Jeśli jest to adapter USB lub Ethernet, np. Można łatwo dezaktywować go w Menedżerze urządzeń lub odłączyć? Jeśli siłą zawiesisz lub zawiesisz system, możesz uszkodzić go na różne sposoby, więc bądź ostrożny z tym, co robisz.
źródło
Czy tryb debugowania jądra nie jest opcją?
Skonfigurowałem go w systemie Windows 7, a powiązane instrukcje w tej odpowiedzi określają XP lub nowszy, więc powinien działać z Windows 10.
Mam go ustawić na FireWire / 1394 , ponieważ jest to najprostszy, moim zdaniem. Ale możesz to również zrobić przez sieć lub USB (i więcej ).
Gruntownie,
Skonfiguruj komputer docelowy, uruchamiając następujące polecenia w podwyższonym wierszu (wybierając kanał
n
):To jest to samo, co przejście do zakładki rozruchu
msconfig
i wybranie przycisku „Zaawansowane”:Następnie (po ponownym uruchomieniu komputera docelowego) uruchom program WinDbg na komputerze hosta, używając tej samej szybkości bitowej programu WinDbg na komputerze docelowym.
Następnie jest to tylko kwestia wstrzymania wykonywania jądra, kiedy tylko chcesz z komputera hosta. Jeśli testujesz sprzęt, który ma działającą asynchroniczną pracę, powinno to być tak samo skuteczne, jak inne środki.
źródło
Nie wiem, czy to kwalifikuje się jako całkowite zamrożenie, ponieważ kursor myszy nadal porusza się po ekranie, ale interfejs użytkownika systemu Windows 7 przestaje odpowiadać, jeśli wystąpią błędy we / wy urządzenia, a konkretniej awaria dysku twardego. Jednym z moich dysków twardych było zgłaszanie przez SMART nieuchronnej awarii dysku, a system Windows 7 montowałby go, ale zawiesił się, gdy próbowałem uzyskać dostęp do niektórych zapisanych na nim plików. Interfejs użytkownika zostanie zablokowany (z wyjątkiem ruchu kursora myszy) przez maksymalnie 5 minut, aż będzie mógł odczytać plik lub odinstalować dysk po upływie limitu czasu. Nie wiem, czy Windows używa zegara systemowego do przekroczenia limitu czasu, ale może jeśli w jakiś sposób zamrozisz czas, możesz wydłużyć limit czasu? Może to doprowadzi Cię do częściowego rozwiązania, ale nie w 100% szukasz odpowiedzi.
źródło
Ten błąd zawiesza system Windows dość szybko z powodu wyczerpania zasobów. Łatwe do odtworzenia.
źródło
Oto kod źródłowy aplikacji, której używam podczas lekcji debugowania. Pokazuje, jak aplikacja w trybie użytkownika może przeprowadzić rodzaj ataku DoS.
Zauważysz, że kursor myszy porusza się bardzo rzadko (raz na jedenaście sekund na moim komputerze). Potencjalnie komputer będzie nadal reagował na przycisk zasilania, jeśli będziesz czekać wystarczająco długo.
Działa przy użyciu nieskończonej pętli i ustawia najwyższy priorytet dla procesu (
0x100
„w czasie rzeczywistym”) i ustawia najwyższy priorytet dla wątków (15
„krytyczny w czasie”). Uruchomi 8 z nich, co wystarcza na komputerach z systemem i7. Jeśli potrzebujesz więcej, dostosuj pętlę. Więcej z nich potencjalnie bardziej spowolni rzeczy.źródło
ExitProcess(0)
g++
) gdyby-O0
nie było wystarczająco, możegcc -Q -O0 --help=optimizers | grep enabled
(i wyłączenie ręcznej optymalizacji, która przetrwała) może rozwiązaćExitProcess(0)
problem?return 0
instrukcję, ponieważ istnieje ona powhile(true)
. Kompilator może dowiedzieć się, że jest to nieosiągalne oświadczenie.Czy wypróbowałeś narzędzie CPUEater dołączone do Process Lasso? Ps. Nie pracuję dla Bitsum.
źródło
Jeśli naprawdę chcesz zawiesić komputer, całkowicie powodując jego zawieszenie , po prostu zużyj całą pamięć RAM i wymuś pamięć strony. To wykracza poza zwykłe zamrażanie i tak naprawdę przeciąża to, że nie można nawet używać Menedżera zadań, nawet klawiatury. Nawet po zakończeniu procesu przywrócenie komputera zajmuje dużo czasu. (To jest najlepsze!)
Możesz na przykład utworzyć klasę ze wskaźnikiem do siebie, a po pewnym czasie utworzyć nową instancję tej klasy na zawsze, przechowując każdą nową instancję we wskaźniku poprzedniej instancji. Być może dodaj do klasy również podwójne lub wektory, aby szybciej zużyć pamięć. Wtedy możesz mieć licznik czasu, który wychodzi z pętli while i wszystko dekonstruuje; oczywiście będziesz musiał trochę poczekać, aż odzyska zdrowie.
źródło
Sugerowałbym po prostu utworzenie pliku wsadowego z następującym kodem:
Jest to prawdopodobnie najłatwiejszy i najbezpieczniejszy sposób na zrobienie tego. Możesz zastąpić nazwy procesów dowolnymi aplikacjami systemu Windows.
źródło
iexplore.exe
i możeexplorer.exe
mieć większy wpływ). Po prostu automatycznie zabije procesy zapamiętywania pamięci.źródło