Saya perlu alat uji perilaku dalam acara yang Windows keras hang/macet (misalnya layar beku, tidak ada Led berkedip, tidak ada reaksi terhadap masukan-masukan, termasuk Ctrl+Alt+Del, dll.). Dalam rangka untuk memiliki cukup percobaan dalam waktu yang cukup singkat, saya harus memulai ini tergantung baik pemrograman atau sebaliknya.
Saya tertarik pada Windows 10 secara khusus, tetapi setiap cara kerja untuk versi lain lebih dihargai.
Setiap pencarian I've dilakukan pada topik ini tidak mengherankan membawa saya untuk diskusi tentang cara menghilangkan situasi ini, tidak memprovokasi mereka. Jadi pertanyaan mungkin tampak aneh cukup.
Umpan balik: I've mencoba banyak resep ditawarkan dalam jawaban dan komentar. Pertama-tama, saya tidak tertarik dalam kecelakaan yang membawa BSoD (yang's mengapa saya dijelaskan membekukan, bukan kecelakaan).
Saya harus mengakui bahwa Windows 10 64-bit menunjukkan ketahanan yang baik dengan banyak cara. Ia bekerja baik dengan hampir semua CPU-load metode (termasuk fork-bom, loop, dll.) cukup baik. Metode yang menaikkan segera kesalahan (sebagian besar NotMyFault hang metode) yang ditangani oleh OS dengan reboot atau shutdown (yang tidak apa yang saya dikejar). Hasil terbaik yang dicapai oleh kebocoran memori metode NotMyFault — real membekukan dengan tidak ada kesempatan untuk reboot.
Akhirnya, saya terkesan oleh jumlah dokumentasi oleh Microsoft yang berbicara tentang membuat Windows membeku. Sepertinya mereka tahu bagian ini jauh lebih baik dari yang berlawanan (fighting membeku) ;-)
Mungkin ini dapat membantu: Memaksa Sistem Crash dari Keyboard
Dengan keyboard USB, anda harus mengaktifkan keyboard yang diprakarsai kecelakaan di registry. Dalam kunci registri HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\kbdhid\Parameters, menciptakan nilai yang bernama CrashOnCtrlScroll, dan mengatur hal yang sama untuk REG_DWORD nilai 0x01.
Anda harus me-restart sistem ini pengaturan untuk mengambil efek.
Setelah ini selesai, keyboard kecelakaan dapat dimulai dengan menggunakan berikut hotkey urutan: Tahan tombol paling kanan tombol CTRL, dan tekan tombol SCROLL LOCK dua kali.
Atau anda bisa memulai fork bomb: lihat ini JADI pertanyaan
Ada juga NotMyFault
Notmyfault adalah alat yang dapat anda gunakan untuk crash, hang, dan menyebabkan kernel memori kebocoran pada sistem Windows anda. Itu berguna untuk belajar bagaimana mengidentifikasi dan mendiagnosa perangkat driver dan hardware masalah, dan anda juga dapat menggunakannya untuk menghasilkan blue screen dump file pada nakal sistem.
Kedengarannya seperti anda're pengujian reaksi dari perangkat eksternal ke OS menjadi tidak responsif.
Jika perangkat keras anda dapat terhubung ke virtual Windows install, maka anda dapat mem-pause dan resume mesin virtual sebanyak yang anda suka. Menginstal diinginkan OS di VirtualBox (atau lainnya virtualisasi desktop) lingkungan, mengekspos apapun antarmuka perangkat keras yang digunakan (USB, Ethernet, atau apapun) untuk VM.
Anda kemudian dapat pause dan resume mesin virtual di akan.
Setidaknya di bawah versi Windows yang lebih tua (beberapa tahun lalu) berikut ini bekerja:
Saya menulis program C dengan lingkaran tak berujung:
while(1) {}
... kemudian saya berikan bahwa program "realtime prioritas" di task manager (ada juga API yang dapat melakukan hal ini).
Pada multi-core system yang saya perlu lakukan ini beberapa kali jadi satu lingkaran yang berjalan pada masing-masing core...
Terkuat kernel menggantung (yaitu, tidak ada pelacakan mouse, dll.) ketika kode masuk ke dalam loop tak terbatas dalam mode kernel dengan interupsi off.
It's mungkin untuk mencapai hal ini dengan driver perangkat, dan bahkan lebih baik, anda dapat menulis pengemudi sehingga mulai dan berhenti menggantung di bawah kendali anda (dengan asumsi infinite loop adalah pengujian kondisi anda're di kontrol).
Bagaimana menulis dan menginstal driver ini akan menjadi topik pertanyaan lain atau tiga, tapi yang's pendekatan I'd ambil.
Silahkan periksa berikut pertanyaan di StackOverflow yang serupa dengan anda: Cara membuat windows membeku untuk waktu yang singkat time
Tl;dr itu adalah bahwa ada's tidak ada cara untuk (andal) melakukannya.
Daripada pembekuan atau masuk Windows hang, mungkin anda hanya bisa mengganggu komunikasi dengan peralatan anda.
Aku tidak tahu apa peralatan anda dan bagaimana anda terhubung. Jika itu's USB atau Ethernet adapter, e.g, anda bisa dengan mudah menonaktifkannya di Device Manager atau cabut? Jika anda tegas crash atau hang sistem anda mungkin merusak sistem anda dengan berbagai cara, jadi berhati-hatilah dengan apa yang anda lakukan.
Adalah kernel mode debug bukan pilihan?
I've memasangnya di Windows 7, dan terkait instruksi dalam jawaban ini menentukan XP atau yang lebih baru, sehingga harus bekerja dengan Windows 10.
I've mengaturnya melalui FireWire/1394, karena itu's termudah, menurut pendapat saya. Tetapi anda dapat juga melakukannya melalui jaringan]2 atau USB (dan lebih).
Pada dasarnya,
Setup komputer target dengan menjalankan perintah ini di tempat yang tinggi prompt (memilih channel n
):
bcdedit /debug on
bcdedit /dbgsettings 1394 channel:n
Yang sama seperti pergi ke tab boot dari msconfig
, dan pilih 'Canggih' tombol:
Kemudian (setelah reboot komputer target), menjalankan WinDbg pada komputer host menggunakan yang sama bitness dari WinDbg dari komputer target.
Maka itu's hanya masalah berhenti kernel eksekusi kapanpun anda inginkan dari komputer host. Jika anda test equipment memiliki beberapa asynchronous operasi yang sedang berjalan ini harus efektif sebagai sarana lainnya.
Bug membeku Windows cukup cepat karena sumber daya yang melelahkan. Mudah untuk mereproduksi juga.
ternyata, ini sebenarnya adalah a bug bagaimana command line (lebih khusus
cmd.exe
) mem-parsing batch file dan bisa menyebabkan cepat denial of service jenis serangan, puting baris berikut ke dalam batch file (dengan tidak ada garis baru) akan mengkonsumsi sejumlah besar memori yang sangat cepat karena bug ini (sebagai contoh):^ nul<^
singkat cerita, ketika sebuah sisipan pada akhir file, yang sebenarnya akhir dari file 'diabaikan' dan menangani file 'reset' untuk 0 (pada dasarnya) sehingga batch diurai lagi (ad infinitum).
Saya don't tahu apakah ini memenuhi syarat sebagai total membeku karena kursor mouse masih bergerak di layar, tapi Windows 7 UI menjadi tidak responsif jika anda memiliki perangkat I/O error lebih khusus kegagalan hard drive. Salah satu hard disk saya adalah self-pelaporan yang akan segera terjadi kegagalan drive melalui SMART dan Windows 7 akan gunung itu tapi hang setiap kali saya mencoba untuk mengakses file tertentu yang tersimpan di dalamnya. UI akan mengunci (kecuali untuk gerakan kursor mouse) sampai 5 menit sampai bisa membaca file atau turun drive setelah time-out. Saya don't tahu jika Windows menggunakan sistem jam untuk timeout, tapi mungkin jika anda entah bagaimana membekukan waktu, anda dapat memperpanjang waktu yang panjang? Mungkin ini akan membuat anda bagian jalan di sana, tapi tidak 100% jawaban anda're looking for.
Berikut ini's source code dari aplikasi yang saya gunakan dalam debugging pelajaran. Ini menunjukkan bagaimana sebuah modus pengguna aplikasi dapat melakukan semacam serangan DoS.
Anda'll melihat bahwa kursor mouse anda bergerak sangat jarang (sekali setiap sebelas detik pada mesin saya). Berpotensi PC anda masih akan bereaksi pada tombol Power jika anda menunggu cukup lama.
Ia bekerja dengan menggunakan lingkaran tak berujung dan pengaturan prioritas tertinggi untuk proses (0x100
"realtime") dan menetapkan prioritas tertinggi untuk benang (15
"waktu kritis"). Itu akan mulai 8 dari mereka, yang cukup untuk komputer i7. Jika anda membutuhkan lebih, beradaptasi loop. Lebih dari mereka akan berpotensi memperlambat hal-hal yang lebih.
#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;
}
Jika anda benar-benar ingin untuk menggantung di PC anda, benar-benar menyebabkan ia hanya beku, hanya menggunakan semua RAM dan memaksa untuk halaman memori. Yang akan melampaui sekedar pembekuan dan benar-benar hanya membebani hal seperti yang dapat anda't bahkan menggunakan Task Manager, bahkan tidak oleh keyboard. Bahkan ketika proses ini dihentikan, itu akan mengambil waktu yang lama untuk PC untuk pulih. (Itu's the best!)
Anda bisa misalnya membuat kelas dengan pointer untuk dirinya sendiri, dan dalam while loop, membuat sebuah instance baru dari class tersebut selamanya, menyimpan setiap instance baru pada contoh sebelumnya's pointer. Mungkin menambahkan beberapa ganda atau vektor ke kelas juga, untuk mengkonsumsi memori yang lebih cepat. Kemudian anda bisa memiliki timer yang keluar dari while loop dan menghancurkan segalanya, tentu saja, anda'll harus menunggu sedikit untuk itu untuk pulih.
Saya akan menyarankan hanya membuat batch file 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 adalah cara termudah dan paling aman untuk melakukannya. Anda dapat mengganti nama proses dengan semua aplikasi windows.