Bagaimana saya bisa memprovokasi Windows untuk hang (membeku)?


180

Saya perlu menguji perilaku peralatan dalam hal bahwa Windows keras hang / macet (misalnya layar beku, tidak ada LED berkedip, tidak ada reaksi terhadap masukan, termasuk Ctrl + Alt + Del , dll). Untuk mendapatkan percobaan yang cukup dalam waktu yang cukup singkat, saya perlu memulai hang ini baik secara terprogram atau tidak.

Saya tertarik pada Windows 10 pada khususnya tetapi cara kerja untuk versi lain dihargai.

Setiap pencarian yang saya lakukan pada topik ini tidak mengherankan membawa saya ke diskusi tentang cara menghilangkan situasi ini, tidak memprovokasi mereka. Jadi pertanyaannya mungkin terlihat cukup aneh.

Umpan Balik: Saya sudah mencoba banyak resep yang ditawarkan dalam jawaban dan komentar. Pertama-tama, saya tidak tertarik pada crash yang membawa BSoD (itu sebabnya saya menggambarkan pembekuan, bukan crash).

Saya harus mengakui bahwa Windows 10 64-bit menunjukkan ketahanan yang baik terhadap banyak cara. Ia mengatasi hampir semua metode beban CPU (termasuk fork-bomb , loop, dll.) Dengan cukup baik. Metode yang meningkatkan kesalahan langsung (sebagian besar metode hang NotMyFault) ditangani oleh OS dengan reboot atau shutdown (yang bukan yang saya kejar). Hasil terbaik dicapai dengan metode kebocoran memori NotMyFault - pembekuan nyata tanpa ada kesempatan untuk reboot.

Akhirnya, saya terkesan dengan jumlah dokumentasi oleh Microsoft yang berbicara tentang membuat Windows beku. Sepertinya mereka tahu bagian ini jauh lebih baik daripada sebaliknya (pertarungan membeku) ;-)


Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
DavidPostill

3
Ada perhitungan yang bisa Anda lakukan menggunakan kalkulator, yang membekukan inti pada CPU sampai selesai. Pada mesin quad core, Anda akan melakukannya empat kali. Tetapi saya tidak bisa seumur hidup saya mengingat persamaan matematika yang menyebabkannya.
mickburkejnr

6
@mickburkejnr Ini faktorial dari 100000. Beralih ke "Scientific View" ketik 100000 dan tekan "n!". Ini bekerja dengan baik pada versi Windows lama. Saat ini Anda akan mendapat peringatan bahwa perhitungan ini mungkin memakan waktu lama dan Anda dapat membatalkannya.
duenni

25
Mulai gunakan saja.
samazi

5
Memasang peningkatan selalu berhasil bagi saya.
Daniel R Hicks

Jawaban:


230

Mungkin ini bisa membantu: Memaksa Sistem Crash dari Keyboard

Dengan keyboard USB, Anda harus mengaktifkan crash yang diprakarsai keyboard dalam registri. Di kunci registri HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ kbdhid \ Parameters, buat nilai bernama CrashOnCtrlScroll, dan atur sama dengan nilai REG_DWORD 0x01.

Anda harus memulai ulang sistem agar pengaturan ini berlaku.

Setelah ini selesai, keyboard crash dapat dimulai dengan menggunakan urutan tombol pintas berikut: Tahan tombol CTRL paling kanan, dan tekan tombol SCROLL LOCK dua kali.

Atau Anda bisa memulai bom fork: lihat pertanyaan SO ini

Ada juga NotMyFault

Notmyfault adalah alat yang dapat Anda gunakan untuk crash, hang, dan menyebabkan kebocoran memori kernel pada sistem Windows Anda. Ini berguna untuk mempelajari cara mengidentifikasi dan mendiagnosis driver perangkat dan masalah perangkat keras, dan Anda juga dapat menggunakannya untuk menghasilkan file dump layar biru pada sistem yang mengalami gangguan.


9
Mencoba ForkBomb dan NotMyFault. Salah satu metode kebocoran tampaknya melakukan apa yang saya inginkan. Lainnya tidak berguna karena mereka membawa untuk reboot / shutdown tidak membeku. Terima kasih banyak.
hypers

6
CtrlScroll memberi Anda BSOD. Apakah itu membekukan sistem untuk debugging atau hanya reboot, tergantung pada pengaturan boot.
grawity

51
Duenni Aaannnddd tidak pernah diizinkan di dekat komputer saya. Pernah.
corsiKa

25

Sepertinya Anda sedang menguji reaksi perangkat eksternal terhadap OS yang menjadi tidak responsif.

Jika perangkat keras Anda dapat dihubungkan ke instalasi Windows tervirtualisasi, maka Anda dapat menjeda dan melanjutkan mesin virtual sebanyak yang Anda suka. Instal OS yang diinginkan di lingkungan VirtualBox (atau virtualisasi desktop lainnya), paparkan antarmuka perangkat keras apa pun yang digunakan (USB, Ethernet, atau apa pun) ke VM.

Anda kemudian dapat menjeda dan melanjutkan mesin virtual sesuka hati.


24

Setidaknya di bawah versi Windows yang lebih lama (beberapa tahun yang lalu) yang berikut ini berfungsi:

Saya menulis program C dengan loop tanpa akhir:

while(1) {}

... lalu saya berikan program itu "prioritas waktu nyata" di task manager (ada juga API yang bisa melakukan ini).

Pada sistem multi-core saya perlu melakukan ini beberapa kali sehingga satu loop berjalan pada setiap core ...


39
Untuk memanaskan CPU Anda lebih sedikit saat melakukan itu: masukkan _mm_pause()dari #include <immintrin.h>dalam loop. Itu adalah instruksi perangkat keras CPU, bukan panggilan sistem "tidur" dalam bentuk apa pun; sejauh menyangkut OS, proses Anda tidak dapat dibedakan dari SuperPI; perbedaannya hanya pada seberapa besar daya yang dikonsumsi CPU saat menjalankan loop.
Peter Cordes

5
Saya tidak yakin apakah itu menghentikan bagian mode kernel windows dari bekerja.
CodesInChaos

2
@CodesInChaos: Sebagian besar utas kernel berjalan pada prioritas normal. Salah satunya per CPU dan kernel juga cukup banyak dilakukan.
Joshua

Teknik lain yang melibatkan perakitan x86 ( STI+ HLT): stackoverflow.com/questions/3747847/…
meklarian

3
@meklarian: Seharusnya begitu CLI; HLT. Namun, mungkin Anda harus melakukannya dari mode istimewa. Pada prinsipnya masih bisa diselamatkan oleh NMI atau serupa.
Nate Eldredge

10

Kernel hang terkuat (yaitu, tidak ada pelacakan mouse, dll.) Adalah ketika kode masuk ke loop tak terbatas dalam mode kernel dengan interupsi mati.

Dimungkinkan untuk mencapai ini dengan driver perangkat, dan bahkan lebih baik lagi, Anda dapat menulis driver itu sehingga memulai dan menghentikan hang di bawah kendali Anda (dengan asumsi loop tak terbatas sedang menguji kondisi yang Anda kendalikan).

Cara menulis dan menginstal driver ini akan menjadi topik satu atau tiga pertanyaan lain, tetapi itulah pendekatan yang akan saya ambil.


9

Silakan periksa pertanyaan berikut tentang StackOverflow yang mirip dengan Anda: Cara membuat windows membeku untuk jangka waktu singkat

Yang pertama adalah bahwa tidak ada cara untuk (andal) melakukannya.

Daripada membekukan atau membuat Windows hang, mungkin Anda bisa mengganggu komunikasi dengan peralatan Anda.

Saya tidak tahu apa peralatan Anda dan bagaimana Anda menghubungkannya. Jika itu USB atau adaptor Ethernet, misalnya, Anda dapat dengan mudah menonaktifkannya di Device Manager atau mencabut? Jika Anda secara paksa crash atau menggantung sistem, Anda dapat merusak sistem Anda dengan berbagai cara, jadi berhati-hatilah dengan apa yang Anda lakukan.


1
Saya akan mempertimbangkan pemutusan fisik peralatan jika saya tidak puas dengan hasil perangkat lunak. Terima kasih.
hypers

5

Apakah mode debug kernel bukan opsi?

Saya telah mengaturnya di Windows 7, dan instruksi yang ditautkan dalam jawaban ini menentukan XP atau yang lebih baru, jadi itu harus bekerja dengan Windows 10.

Saya telah mengaturnya di FireWire / 1394 , karena ini yang paling mudah, menurut saya. Tetapi Anda juga dapat melakukannya melalui jaringan atau USB (dan banyak lagi ).

Pada dasarnya,

Atur komputer target dengan menjalankan perintah ini dalam prompt yang ditinggikan (memilih saluran n):

bcdedit /debug on
bcdedit /dbgsettings 1394 channel:n

Yang sama dengan pergi ke tab boot msconfig, dan memilih tombol 'Advanced':

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Kemudian (setelah me-reboot komputer target), jalankan WinDbg di komputer host menggunakan bitness yang sama dari WinDbg dari komputer target.

Maka itu hanya masalah menjeda eksekusi kernel setiap kali Anda inginkan dari komputer host. Jika Anda menguji peralatan memiliki beberapa operasi asinkron yang sedang berjalan ini harus sama efektifnya dengan cara lain.


Cara yang menarik. Perlu PC kedua. Tetapi akan mencoba bila memungkinkan.
hypers

2

Saya tidak tahu apakah ini memenuhi syarat sebagai pembekuan total karena kursor mouse masih bergerak di layar, tetapi Windows 7 UI menjadi tidak responsif jika Anda memiliki kesalahan perangkat I / O lebih khusus kegagalan hard drive. Salah satu hard drive saya melaporkan kegagalan drive segera yang dilaporkan melalui SMART dan Windows 7 akan memasangnya tetapi hang setiap kali saya mencoba mengakses file tertentu yang tersimpan di dalamnya. UI akan mengunci (kecuali untuk gerakan kursor mouse) hingga 5 menit sampai ia dapat membaca file atau turun dari drive setelah waktu habis. Saya tidak tahu apakah Windows menggunakan jam sistem untuk waktu habis, tetapi mungkin jika Anda entah bagaimana membekukan waktu Anda dapat memperpanjang panjang waktu tunggu? Mungkin ini akan membuat Anda berpisah di sana, tetapi tidak 100% jawaban yang Anda cari.


2

Bug ini membekukan Windows cukup cepat karena sumber daya melelahkan. Mudah direproduksi juga.

Ternyata, ini sebenarnya bug dalam bagaimana baris perintah (lebih khusus cmd.exe) mem-parsing file batch dan dapat menyebabkan penolakan cepat terhadap serangan tipe layanan; menempatkan baris berikut dalam file batch (tanpa baris baru) akan mengkonsumsi memori dalam jumlah besar dengan sangat cepat karena bug ini (sebagai contoh):

^ nul<^

Singkatnya, ketika tanda sisipan berada di akhir file, akhir sebenarnya file 'diabaikan' dan pegangan file 'reset' ke 0 (pada dasarnya) sehingga batch diurai lagi (ad infinitum).


2

Inilah kode sumber aplikasi yang saya gunakan dalam pelajaran debugging saya. Ini menunjukkan bagaimana aplikasi mode pengguna dapat melakukan semacam serangan DoS.

Anda akan melihat bahwa kursor mouse Anda bergerak sangat jarang (sekali setiap sebelas detik di komputer saya). Berpotensi PC Anda masih akan bereaksi pada tombol Power jika Anda menunggu cukup lama.

Ia bekerja menggunakan loop tanpa akhir dan mengatur prioritas tertinggi untuk proses ( 0x100"realtime") dan mengatur prioritas tertinggi untuk utas ( 15"kritis waktu"). Ini akan mulai 8 dari mereka, yang cukup untuk komputer i7. Jika Anda membutuhkan lebih banyak, sesuaikan loop. Semakin banyak dari mereka yang berpotensi memperlambat segalanya.

#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;
}

Berhati-hatilah karena program ini memiliki perilaku tidak terdefinisi dalam C ++, jadi di bawah pengaturan optimisasi tertentu kompiler dapat menggantikan semuanya denganExitProcess(0)
Ben Voigt

@ BenVoigt Dalam hal itu (yaitu dengan g++) jika -O0tidak cukup, mungkin gcc -Q -O0 --help=optimizers | grep enabled (dan menonaktifkan optimasi yang selamat dengan tangan) dapat menyelesaikan ExitProcess(0)masalah?
Hastur

@ BenVoigt: bisakah Anda menguraikan, bagian mana yang Anda anggap sebagai perilaku tidak terdefinisi?
Thomas Weller

@BenVoigt IMHO, kompiler hanya dapat mengoptimalkan return 0pernyataan, karena itu ada setelah while(true). Kompilator dapat mengetahui bahwa ini adalah pernyataan yang tidak dapat dijangkau.
Thomas Weller

Bahasa C ++ menuntut agar setiap utas akhirnya membuat kemajuan, didefinisikan dalam beberapa jenis perilaku yang dapat diamati. Karena infinite loop tidak pernah membuat kemajuan yang dapat diamati, kompiler dapat menyimpulkan bahwa itu tidak tercapai, dan menghapus tidak hanya itu, tetapi semua kode di atasnya kembali ke cabang terdekat.
Ben Voigt

0

Apakah Anda mencoba utilitas CPUEater yang dibundel dengan Process Lasso? Ps. Saya tidak bekerja untuk bitum.


Saya pikir maksud Anda "Sudahkah Anda mencoba", bukan "Sudahkah Anda mencoba". :)
fabspro

@fabspro Saya pikir "Apakah Anda mencoba" sudah benar karena OP sudah menerima jawaban lain sehingga acara yang saya maksudkan ("menyelesaikan masalah") ada di masa lalu, tetapi orang mungkin bisa mengatakan internet selalu terjadi. Bagaimanapun, jika Anda menyarankan suntingan, saya dengan senang hati akan mendelegasikan tugas untuk menerimanya ke antrian peninjauan. Sumber: englishforums.com/English/HaveYouTriedOrDidYouTry/zclxb/…
beppe9000

Saya kira jika dia telah memecahkan masalah, pertanyaan Anda bisa menjadi komentar atas jawabannya saat itu - sesuatu seperti "ketika Anda meneliti masalah Anda, apakah salah satu hal yang Anda coba _______ utilitas?" mungkin ... hanya menyarankan hal-hal :)
fabspro

... touché :)
beppe9000

huehuehuehuehue
fabspro

-2

Jika Anda benar - benar ingin menggantung PC Anda, benar-benar menyebabkannya hanya membeku , cukup gunakan semua RAM-nya dan paksa ke memori halaman. Itu akan melampaui pembekuan dan benar-benar hanya membebani hal itu sehingga Anda bahkan tidak bisa menggunakan Task Manager, bahkan dengan keyboard. Bahkan ketika proses ini dihentikan, akan memakan waktu lama bagi PC untuk pulih. (Itu yang terbaik!)

Misalnya Anda bisa membuat kelas dengan pointer ke dirinya sendiri, dan dalam loop sementara, buat instance baru dari kelas itu selamanya, menyimpan setiap instance baru dalam pointer instance sebelumnya. Mungkin menambahkan beberapa dobel atau vektor ke kelas juga, untuk mengkonsumsi memori lebih cepat. Maka Anda bisa memiliki timer yang keluar dari while loop dan mendekonstruksi segalanya; tentu saja, Anda harus menunggu sedikit agar pulih.


-4

Saya sarankan hanya membuat file batch dengan kode berikut:

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

Ini mungkin cara termudah dan teraman untuk melakukannya. Anda dapat mengganti nama proses dengan aplikasi windows apa pun.


3
Ini kemungkinan besar hanya akan menghabiskan RAM dan menyebabkan hard drive meronta-ronta. Tergantung pada spesifikasi komputer Anda, ada kemungkinan bahwa komputer akan terus bekerja melalui ini, terutama karena 4 dari program-program yang terdaftar cukup ringan ( iexplore.exedan mungkin explorer.exeakan memiliki dampak yang lebih besar). Itu hanya akan mematikan proses memonopoli memori secara otomatis.
MoonRunestar

-10
  1. Pergi ke C: \ Windows \ Temp \
  2. Tekan Ctrl-a untuk Select All
  3. Tekan Enter

8
Anda akan membutuhkan ribuan item agar ini menjadi efektif secara samar-samar! Folder% TEMP% saya kosong ...
AlainD

6
Meskipun ini tampaknya merupakan upaya yang sah untuk menjawab pertanyaan, sama sekali tidak jelas bagaimana sebenarnya ini mengakibatkan penguncian Windows seperti yang diminta oleh OP. Harap edit pertanyaan Anda untuk menjelaskan mengapa ini akan melakukan apa yang diinginkan OP.
Peniru Twisty

9
Saya akan merasa kasihan kepada siapa pun yang telah mencoba ini dan tidak menyadari bahwa mereka telah terkena unduhan drive-by dengan perangkat lunak berbahaya di sana.
MoonRunestar
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.