Paylaştığın için sağ ol. Dosyalarını inceledim, neredeyse hepsi aynı zaten. Biri üzerinden anlatacağım.
Rich (BB code):
KMODE_EXCEPTION_NOT_HANDLED (1e)
This is a very common BugCheck. Usually the exception address pinpoints
the driver/function that caused the problem. Always note this address
as well as the link date of the driver/image that contains this address.
Arguments:
Arg1: ffffffffc0000094, The exception code that was not handled
Arg2: fffff8037ff1dd16, The address that the exception occurred at
Arg3: ffffc604ee5f5a30, Parameter 0 of the exception
Arg4: 000000000000005a, Parameter 1 of the exception
İlk olarak kırmızı ile işaretlediğim 1.parametre dikkatimi çekti. Çok sık rastlanan bir istisna kodu olmadığını söyleyebilirim sadece.
Rich (BB code):
kd> !error c0000094
Error code: (NTSTATUS) 0xc0000094 (3221225620) - {ZORUNLU DURUM} Tamsayı türü değeri sıfıra bölme hatası.
Bu aslında bir şekilde bir Stack Pointer'ın bozulduğu anlamına geliyor. Buradaki istisna kodundan da anlayacağımız gibi, muhtemelen dosyadaki sorun pointer hatası nedeniyle sıfıra bölme girişimi olmasıdır. Bunu şu şekilde dökebiliyoruz:
Rich (BB code):
2: kd> u 0xfffff8037ff1dd16
nt!PpmPerfSelectProcessorState:
fffff803`7ff1dd16 f7f1 div eax,ecx
fffff803`7ff1dd18 8945a7 mov dword ptr [rbp-59h],eax
fffff803`7ff1dd1b 8bd0 mov edx,eax
fffff803`7ff1dd1d 4183f802 cmp r8d,2
fffff803`7ff1dd21 0f84dd3b1500 je nt!PpmPerfSelectProcessorState+0x153d94 (fffff803`80071904)
fffff803`7ff1dd27 448bc7 mov r8d,edi
fffff803`7ff1dd2a 3b55af cmp edx,dword ptr [rbp-51h]
fffff803`7ff1dd2d 0f866a010000 jbe nt!PpmPerfSelectProcessorState+0x32d (fffff803`7ff1de9d)
0xfffff8037ff1dd16 bellek adresini unassemble komutu ile dökersek bu bellek bölgesinde F7 Opcode'unu görebiliriz. (Bu Division'un karşılığıdır.)
F7 OC işlemciye bir bölme komutu gönderiyor. Burada tam Assembly olmasa da bir nevi C karşılığıyla div eax, ecx komutunu görebiliyoruz. >> eax/ecx bölme komutu çalışıyor ve kalan Edx'e yazılır. Bu noktada şöyle bir sorun oluyor:
Rich (BB code):
2: kd> r ecx
Last set context:
ecx=0
Ecx = 0 olduğu için bir sıfıra bölme hatası oluşuyor yığının pointer'ında ve sistem bunu istisna kaydı ile beraber kaydediyor. Bu noktada sadece buna kafa yordum.
Eğer ki senin için devam etmek gerekirse bu Pointer'ın unassemble edilen halinde NT! PpmPerfSelectProcessorState fonksiyonu ile karşılaşıyoruz. Buradan elde edebileceğimiz diğer önemli bilgi ise sorumlu çekirdek fonksiyonunun adı oluyor; NT! Ppm. PPM işlevi işlemci güç yönetimi işlevini ifade ediyor.
Bunu iyice görmek için dosyadaki yığınlara bakmak lazım:
Rich (BB code):
2: kd> k
# Child-SP RetAddr Call Site
00 ffff8d80`8253c158 fffff803`800fb19e nt!KeBugCheckEx // mavi ekran
01 ffff8d80`8253c160 fffff803`80007fb2 nt!HvlpVtlCallExceptionHandler+0x22
02 ffff8d80`8253c1a0 fffff803`7feab207 nt!RtlpExecuteHandlerForException+0x12
03 ffff8d80`8253c1d0 fffff803`7ff394f6 nt!RtlDispatchException+0x297
04 ffff8d80`8253c8f0 fffff803`7fffe822 nt!KiDispatchException+0x186
05 ffff8d80`8253cfb0 fffff803`7fffe7f0 nt!KxExceptionDispatchOnExceptionStack+0x12
06 ffffeb06`13837238 fffff803`80011be5 nt!KiExceptionDispatchOnExceptionStackContinue
07 ffffeb06`13837240 fffff803`80009e04 nt!KiExceptionDispatch+0x125
08 ffffeb06`13837420 fffff803`7ff1dd16 nt!KiDivideErrorFault+0x304 // Sıfıra bölme hatası
09 ffffeb06`138375b0 fffff803`7ff1db3e nt!PpmPerfSelectProcessorState+0x1a6 // Güç planı değişikliği
0a ffffeb06`138376d0 fffff803`7feb41b0 nt!PpmPerfSelectProcessorStates+0x5e
0b ffffeb06`13837700 fffff803`7feb4136 nt!PpmCheckRun+0x40
0c ffffeb06`13837770 fffff803`7feb400e nt!PpmCheckStart+0x106
0d ffffeb06`13837810 fffff803`7fec166e nt!PpmCheckPeriodicStart+0x3e
0e ffffeb06`13837860 fffff803`7fec0954 nt!KiExecuteAllDpcs+0x30e
0f ffffeb06`138379d0 fffff803`800020ee nt!KiRetireDpcList+0x1f4
10 ffffeb06`13837c60 00000000`00000000 nt!KiIdleLoop+0x9e // Sistem boşta
İşlemci boş döngüde (NT! KiIdleLoop) başlıyor, bu da işlemcinin yapacak bir işi olmadığı anlamına geliyor. Boşta durumunda işlemci güç yönetimi, gücü korumak ve ısıyı azaltmak için işlemciyi daha düşük bir güç durumuna geçiriyor...
Daha sonra NT! KiExecuteAllDpcs fonksiyon çağrısını görüyoruz, bu da DPC kuyruğunun işlenmesini başlatıyor (DPC'ler cihaz kesmelerinin arka plan işlemini ifade ediyorlar). Bu durum işlemcinin tekrar çalışmaya başlamasına neden oluyor ve işlemci güç yönetimi onu düşük güç durumundan normal çalışma durumuna geçirmeye başlıyor ki
ve işte sorun tam burada başlıyor.
NT! KiExecuteAllDpcs fonksiyon çağrısından sonra bir dizi NT! Ppm çağrısı görüyorsun --- bunlar işlemci güç yöneticisinin işlemciyi normal güç durumuna yükseltmesini ifade ediyorlar sadece. Hemen ardından NT! PpmPerfSelectProcessorState fonksiyon çağrısı geliyor ve ardından problem oluşuyor:
NT! KiDivideErrorFault.
Bu tamamen bir işlemci sorunu gibi duruyor, güç durumlarını değiştirirken problem yaşıyor. Bu durum istisna gibi çok da nadir olan bir durum değil. Forumda bununla alakalı bir sürü konu da var.
Eki Görüntüle 148818
Bu noktada senden istediğim şey Eğer BIOS'un izin veriyorsa C-State'leri (işlemcinin farklı güç durumları) devre dışı bırakman, bunu yap. Aksi takdirde, Windows'un varsayılan
Yüksek Performans güç planını kullanmayı dene. Bu planda C-State'ler zaten devre dışı durumundalar.
Bu şekilde bilgisayarı kullanıp mavi ekran sorunu hakkında bir bilgilendirme yapmanı isteyeceğim.