Dalam kasus ini, utas menemui pengecualian
C0000096: STATUS_PRIVILEGED_INSTRUCTION
Executing an instruction not allowed in current machine mode.
Kesalahan ini dimunculkan oleh CPU itu sendiri. Beberapa kode mencoba menjalankan instruksi yang tidak boleh dilakukan. Kemungkinan ini disebabkan oleh korupsi memori; di mana kode kernel mencoba mengeksekusi data sampah.
Kesalahan semacam ini benar-benar tidak mungkin untuk ditentukan. Ada kesalahan dalam kode "kernel" yang seharusnya tidak terjadi. Sangat tidak mungkin ada bug perangkat lunak dalam kode Microsoft apa pun; yaitu ketika Anda mulai mencari di tempat lain.
- Pengemudi Pihak Ketiga . Drive mode kernel memiliki akses penuh ke perangkat keras fisik. Bug yang tersesat di driver pihak ke-3 (mis. Video, suara, jaringan, USB 3.0, SATA) dan dapat merusak kode atau data apa pun yang ada di sistem. Langkah berikutnya : coba hapus perangkat keras yang baru ditambahkan (sehingga beberapa driver pihak ketiga tidak dimuat), coba boot dalam safe mode (sehingga beberapa driver pihak ketiga tidak dimuat), atau instal ulang Windows (sehingga beberapa driver pihak ketiga tidak dimuat)
- RAM buruk . Jika sedikit dibalik, dan itu mengubah instruksi yang sangat jinak menjadi instruksi yang berbeda, tidak valid, Anda bisa mendapatkan kesalahan ini. Langkah selanjutnya : Keluarkan RAM stick, pindahkan RAM ke slot lain, lepas RAM, ganti catu daya
Overclocking . Terkadang hal-hal yang sangat aneh dapat terjadi ketika Anda melakukan overclock. Semoga semua orang mengirimkan Microsoft dump crash mereka; karena Microsoft memang menyelidiki mereka. Kesalahan umum yang akan mereka dapatkan adalah ketika CPU mengeksekusi instruksi:
xor eax, eax;
Ini adalah operasi yang sangat sederhana yang dapat dijalankan CPU; itu hanya mengatur register CPU internal EAX
ke nol. Tidak mungkin itu bisa gagal; kecuali saat Anda melakukan overclock - atau masalah fisik lainnya.
tl; dr: Jika Anda telah menghapus perangkat lunak, maka itu perangkat kerasnya.
Pembaruan : Metodologi Pemecahan Masalah
Saya ingin menyebutkan detail yang saya lalui, hampir tanpa berpikir ketika melihat kesalahan ini.
Yang pertama adalah kode bugcheck yang sebenarnya:
0x1000007E - SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M
Binging yang di Google memberikan halaman dokumentasi Microsoft
Pemeriksaan Bug 0x1000007E: SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M
Ini menunjukkan bahwa utas sistem menghasilkan pengecualian yang tidak ditangkap oleh penangan kesalahan.
saya tahu, dari pengalaman menjadi pengembang, bahwa jika aplikasi saya (atau salah satu utasnya) mengalami "pengecualian" , dan saya tidak "menangani " pengecualian, Windows akhirnya akan menanganinya dengan mematikan aplikasi. Jika pengecualian tidak tertangani terjadi saat dalam mode kernel, OS tidak punya pilihan selain menanganinya dengan mematikan kernel. Apa yang saya tertarik adalah yang pengecualian sedang dilempar. saya berasumsi (salah, ternyata) itu adalah "Pelanggaran Akses" .
saya tahu bahwa semua bugcheck disertai dengan empat parameter yang menggambarkan apa yang sebenarnya terjadi:
- Parameter 1: 0xFFFFFFFFC0000096
- Parameter 2: 0xFFFFF80003610698
- Parameter 3: 0xFFFFF8800614C7B8
- Parameter 4: 0xFFFFF8800614C010
Tapi apa artinya ini ?! Saat itulah kita kembali ke halaman dokumentasi, yang tidak menggambarkannya. Tapi itu tidak mengatakan:
Pemeriksaan bug 0x1000007E memiliki arti dan parameter yang sama dengan pemeriksaan bug 0x7E (SYSTEM_THREAD_EXCEPTION_NOT_HANDLED).
Luar biasa. Dan halaman lain ini mendokumentasikan parameter:
SYSTEM_THREAD_EXCEPTION_NOT_HANDLED Parameter
Parameter berikut ini muncul di layar biru.
- Parameter 1: Kode pengecualian yang tidak ditangani
- Parameter 2: Alamat tempat pengecualian terjadi
- Parameter 3: Alamat catatan pengecualian
- Parameter 4: Alamat catatan konteks
Ini yang saya inginkan, kode pengecualian yang tidak ditangani . Dalam kasus Anda itu adalah kode pengecualian:
0xFFFFFFFFC0000096
saya tahu, dari pengalaman, bahwa Anda menjalankan Windows 64-bit, karena kode itu panjangnya 64-bit. Sungguh saya hanya ingin 32-bit yang lebih rendah:
0xC0000096
Biasanya saya akan berharap untuk menemukan kode kesalahan di winerror.h
dalam direktori pengembangan saya; tapi itu tidak ada di sana. Butuh beberapa Binging, tetapi saya menemukan bahwa mencari:
winerror C0000096
arahkan saya ke sebuah halaman di winehq , yang menyatakan konstanta:
STATUS_PRIVILEGED_INSTRUCTION = 0xC0000096
Binging untuk konstanta itu menuntun saya halaman dokumentasi Microsoft kanonik :
Pengecualian Perangkat Keras
STATUS_PRIVILEGED_INSTRUCTION
: Menjalankan instruksi yang tidak diizinkan dalam mode mesin saat ini.
Saya juga tahu bahwa pengecualian ini dilemparkan oleh CPU itu sendiri . Saya tahu itu karena "Privileged Instruction" berarti Anda mencoba menjalankan instruksi CPU yang tidak diizinkan. saya juga dapat mengetahui hal ini karena halaman tersebut disebut Pengecualian Perangkat Keras .
Jadi kita pada intinya adalah beberapa kode berjalan yang mencoba menjalankan instruksi CPU yang tidak seharusnya. Ada dua kemungkinan:
- memori rusak; perangkat lunak tidak ditulis untuk mencoba mengeksekusi kode itu, tetapi itulah yang akhirnya berakhir dengan RAM
- itu benar-benar perangkat lunak kereta, dan ia mencoba melakukan sesuatu yang tidak diizinkan.
Karena kode Microsoft terus diuji di jutaan mesin setiap hari, kemungkinan besar:
- menjadi masalah dengan perangkat keras Anda
- bug dalam kode orang lain yang menyebabkan masalah
Bagaimanapun, begitulah cara saya mengerjakan bugcheck itu. Mungkin dengan mengetahui bagaimana saya melewatinya, ini dapat membantu Anda saat berikutnya Anda memiliki bugcheck.