Hata kodlarındaki belli kısımla bir hatayla ilgili tüm bilgiyi vermezler. IRQL, sistemin kesme istek seviyesini gösterir. Eğer sistem IRQL: 2 düzeyinde geçersiz bir referans verirse uygulama modunda geçersiz erişim hatası alırsınız, aynı şekilde bunu 3.taraf bir sürücü kernel düzeyde yaparsa sistem çöker ve sistem içinde IRQL geçiren bir mavi ekran hata kodu verir. Sanıldığının aksine IRQL herhangi bir şeyi temsil etmez, herhangi bir şeyi suçlamaz. 0XA hatası buna iyi bir örnektir; bir Windows kodu, bir Windows sürücüsü bu durumda geçersiz bir erişim yapamaz. Windows buna kodlanan bir kernel değil. Bu da şu demek oluyor: 0XA hatalarında %100 bu soruna sebep olan şey 3.taraf bir sürücüdür. Şöyle bir şeyi de es geçmemek gerekiyor olsa gerek ki: Bir Windows kodunda sistem çöküyorsa bunun arka planını da incelemek gerekebilir. Zira, sistem arka planda herhangi bir anomali göstermiyor ve inatla Windows kodlarında çöküyorsa bu yine Windows'un kodlama hatası değil, sistemin donanımsal hatasını gösteriyor olabilir diye düşünmeye başlayabilirsiniz. Windows, koca bir bellek havuzu neticesinde. Bu bellek havuzlarının bağlı olduğu şeyler, tanırsal güçler değil, sisteminizdeki donanımlardan ibaretlerdir. Aynı şekilde ntoskrnl, bir sistem çekirdeğidir. Bir hatayı temsil etmez,
bir hata şundan çıkıyordur eğer ntoskrnl varsa demek de tamamen yanlış bir yönlendirme ve bilgi içerir.
Bunu en iyi şu şekilde örnekleyebiliriz:
Rich (BB code):
IRQL_NOT_LESS_OR_EQUAL (a)
An attempt was made to access a pageable (or completely invalid) address at an.
interrupt request level (IRQL) that is too high. This is usually.
caused by drivers using improper addresses.
If a kernel debugger is available get the stack backtrace.
Arguments:
Arg1: 00000000000000b9, // Referans adresi
Arg2: 0000000000000002, // IRQL seviyesi
Arg3: 0000000000000000, bitfield :
bit 0 : value 0 = read operation, 1 = write operation.
bit 3 : value 0 = not an execute operation, 1 = execute operation (only on chips which support this level of status)
Arg4: fffff806ea035d0c, // Referans adresine ilerletilen kodun yürütüldüğü bir diğer adres
Hata kodumuz 0XA'dır; tipik olarak kötü sürücü paylaşılan bir veri yapısını bozup sonlandırır ve ancak başka bir sürücü ya da işlev bu veri yapısına erişmeye çalıştığında mavi ekran oluşur. Ya da bu veri yapısı çok uzun zaman önce kötü bir donanımdan dolayı zaten bozulmuştur.
Rich (BB code):
12: kd> !pte 00000000000000b9
VA 00000000000000b9.
PXE at FFFFCC6633198000 PPE at FFFFCC6633000000 PDE at FFFFCC6600000000 PTE at FFFFCC0000000000.
contains 0A0000064DBE8867 contains 0000000000000000.
pfn 64dbe8 ---DA--UWEV contains 0000000000000000.
not valid < GEÇERSİZ
Rich (BB code):
12: kd> ln fffff806ea035d0c
Browse module.
Set bu breakpoint.
(fffff806`ea034db0) nt!MiFastLockLeafPageTable+0xf5c | (fffff806`ea035dfc) nt!KxTryToAcquireQueuedSpinLock
Rich (BB code):
12: kd> u 0xfffff806ea035d0c.
nt!MiFastLockLeafPageTable+0xf5c:
fffff806`ea035d0c 5d pop rbp.
fffff806`ea035d0d 415c pop r12.
fffff806`ea035d0f 5f pop rdi.
fffff806`ea035d10 5e pop rsi.
fffff806`ea035d11 5b pop rbx.
fffff806`ea035d12 c3 ret.
fffff806`ea035d13 cc int 3
fffff806`ea035d14 4c8b0db5f0d800 mov r9,qword ptr [nt!MxPfnAllocation (fffff806`eadc4dd0)] // Eşlenecek bir fiziksel bellek sayfasının aranması
Basit bir şekilde, sistem IRQL 2 düzeyinde, daha önce serbest bırakılan bellek sayfalarını, fiziksel bir bellek sayfasına geri eşlemeye çalışıyor. Bu bir Windows koduna aittir. Windows bunu yaparak, sayfa tablolarının ya da bir sayfa tablosunu değiştirirken başka bir süreç onu okur ya da değiştirirse, tutarsızlıklar ya da çökmelerle karşılaşılmasın ihtimalini önlemeyi hedefliyor. Bu 2 durumu içerebilir bu dosya ile ilgili, ya sayfa hatasını işlemesidir ya da boşta kalan sanal sayfalarının girdilerini güncellemesidir. Bunu da ham bellek yığınından çözebiliriz;
Rich (BB code):
0xfffff10153abc4d8 : 0xfffff806ea488fa8 : nt!KiPageFault+0x468 // Sayfa hatası
0xfffff10153abc648 : 0xfffff806ea035d0c : nt!MiFastLockLeafPageTable+0xf5c // Çöktüğümüz yer
0xfffff10153abc6b8 : 0xfffff806ea037ea4 : nt!MiDecommitPages+0x144
0xfffff10153abc818 : 0xfffff806ea760cca : nt!MiDecommitRegion+0x9a
0xfffff10153abc8c8 : 0xfffff806ea7606ee : nt!MiFreeVirtualMemory+0x196 // Sanal sayfaların MemoryManagerInternal tarafından serbest bırakılması
0xfffff10153abc958 : 0xfffff806ea760367 : nt!MmFreeVirtualMemory+0x1a7 // Sanal sayfaların MemoryManager tarafından serbest bırakılması
0xfffff10153abca78 : 0xfffff806ea76018d : nt!NtFreeVirtualMemory+0x8d // Sanal sayfaların NT tarafından serbest bırakılması
0xfffff10153abcad8 : 0xfffff806ea48d358 : nt!KiSystemServiceCopyEnd+0x28 // Kullanıcı modu işlemlerinin sonu
Bu hatanın tipik bir bellek yönetimi, dolayısıyla bu depoyla ilişkili birimlerden birinde özellikle CPU ve RAM'de sorun olmasından dolayı ortaya çıkması kuvvetle muhtemel. Diğer hatalara da bakabiliriz:
Rich (BB code):
DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)
An attempt was made to access a pageable (or completely invalid) address at an.
interrupt request level (IRQL) that is too high. This is usually.
caused by drivers using improper addresses.
If kernel debugger is available get stack backtrace.
Arguments:
Arg1: 0000000000030008, memory referenced.
Arg2: 00000000000000ff, IRQL.
Arg3: 00000000000000ff, value 0 = read operation, 1 = write operation.
Arg4: 0000000000030008, address which referenced memory.
0xD1 aynı 0XA gibi, çok yüksek bir kesme isteği düzeyinde (IRQL) sayfalanabilir (veya tamamen geçersiz) bir adrese erişilmeye çalışılıyor. Bu genellikle sürücülerin uygunsuz adresler kullanmasından ve kötü donanımdan kaynaklanır 0XA gibi.
Rich (BB code):
14: kd> !pte 0000000000030008.
VA 0000000000030008.
PXE at FFFFEEF77BBDD000 PPE at FFFFEEF77BA00000 PDE at FFFFEEF740000000 PTE at FFFFEE8000000180.
contains 8A0000017B7A1867 contains 0A00000075EA3867 contains 0000000000000000.
pfn 17b7a1 ---DA--UW-V pfn 75ea3 ---DA--UWEV contains 0000000000000000.
not valid
14: kd> !irql
Debugger saved IRQL for processor 0xe -- 15 (HIGH_LEVEL)
Rich (BB code):
0xfffff2064dfb1718 : 0xfffff80287288fa8 : nt!KiPageFault+0x468 // Sayfa hatası
0xfffff2064dfb1860 : 0xfffff802877823c9 : nt!_guard_retpoline_exit_indirect_rax+0x9
0xfffff2064dfb1868 : 0xfffff80287083cd3 : nt!HalpTimerClockStop+0x33 // CPU saatinin takılı durumda kalması
0xfffff2064dfb19d8 : 0xfffff8028700a0ba : nt!PpmIdleExecuteTransition+0x3ce // Güç durumunda bir değişiklik işlemi
0xfffff2064dfb1a18 : 0xfffff80287009cc9 : nt!PpmWakeClockOwnerIfNeeded+0xd5 // Güç Yönetiminin ihtiyacı olduğunda CPU saatinin güncellenmesi
0xfffff2064dfb1b68 : 0xfffff80287009027 : nt!PoIdle+0x187
0xfffff2064dfb1bf8 : 0xfffff80287281d3c : nt!SwapContext+0x19c
0xfffff2064dfb1c38 : 0xfffff8028727ace4 : nt!KiIdleLoop+0x54 // Sistem boşta
Bu hatada, diğerine nazaran bir açıklamamız olabilir. Sistem yüksek kesme düzeyinde bir sayfa hatası veriyor. Ana yığında bu sayfa hatasına neden olan kodu göremiyor olsak da ham yığında bunun muhtemelen CPU saatinin işlendiği ve yürütüldüğü adrese ait bir kodda ortaya çıktığını tahmin edebiliriz belki de. Şöyle ki, sistem boşta ve boşta olduğunu iyice kontrol edip, fazla güç tüketimi olmasın amacıyla işlemcinin güç durumunu değiştirmek istiyor, bir sinyal gönderiyor ama işlemci saati ya bu sinyale zamanında yanıt vermiyor ya da bu sinyalin direkt olduğu gibi, yani güç durumu değiştiği gibi sistem kilitlenip çöküyor. Burada sorun güç yöneticinin sürücüsü Ppm'de de olabilir, işlemcinin kendisinde de olabilir.
Rich (BB code):
nt!PpmIdleExecuteTransition+0x3a9:
fffff802`8700a095 418ad4 mov dl,r12b
fffff802`8700a098 88442420 mov byte ptr [rsp+20h],al
fffff802`8700a09c e807ed1600 call nt!KePrepareClockTimerForPlatformIdle (fffff802`87178da8)
fffff802`8700a0a1 eb32 jmp nt!PpmIdleExecuteTransition+0x3e9 (fffff802`8700a0d5)
fffff802`8700a0a3 44381ddba9bb00 cmp byte ptr [nt!KiClockTimerPerCpuTickScheduling (fffff802`87bc4a85)],r11b
fffff802`8700a0aa 0f8485010000 je nt!PpmIdleExecuteTransition+0x549 (fffff802`8700a235) // Güç sürücüsünü hazırlamak
fffff802`8700a0b0 488d4c2478 lea rcx,[rsp+78h]
fffff802`8700a0b5 e8d2e91600 call nt!KePrepareClockTimerForIdle (fffff802`87178a8c) // İşlemciyi "Boşta" durumuna geçirmek
Gördüğümüz kadarıyla sistem boşta durumuna geçerken çöküyor. Buna sebep olacak şeyler dediğim gibi ppm sürücüsü ya da işlemci. Ppm sürücüsünü laptop'larda kapatmak için bir BIOS ayarı yok. Bu yüzden de Windows üzerinden yapmaya çalışacağız. Ondan önce bir diğer dosyana da bakalı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: ffffffffc000001d, // İstisna kodu
Arg2: fffff8069c009b92, // Pointer'ımız
Arg3: 0000000000000001, Parameter 0 of the exception.
Arg4: 0000000000000001, Parameter 1 of the exception.
Son hata kodumuz bu'dur ve bu da çekirdek modunda bir istisna meydana geldiği ve kurtarılamadığı anlamına geliyor.
Rich (BB code):
0: kd> !error c000001d.
Error code: (NTSTATUS) 0xc000001d (3221225501) - {EXCEPTION} Illegal Instruction An attempt was made to execute an illegal instruction.
Bu istisna, geçersiz bir işlem kodu hatası nedeniyle ortaya çıkmış gibi görünüyor. Pointer yani yürütülen kodumuza bakarak neyin sebep olduğunu ve yığına bakarak geçersiz işlem hatasını görebiliriz.
Rich (BB code):
0: kd> ln fffff8069c009b92.
Browse module.
Set bu breakpoint.
(fffff806`9c0092ec) nt!PpmIdleSelectStates+0x8a6 | (fffff806`9c009bf4) nt!PpmWakeClockOwnerIfNeeded
Tekrar işlemci ve tekrar bir güç durum değişikliği isteği, yönlendirilen kod da aynı fark ettiğim kadarıyla.
Rich (BB code):
nt!PpmIdleSelectStates+0x8a6:
fffff806`9c009b92 17 ???
fffff806`9c009b93 80bc307205000000 cmp byte ptr [rax+rsi+572h],0
fffff806`9c009b9b 7416 je nt!PpmIdleSelectStates+0x8c7 (fffff806`9c009bb3)
fffff806`9c009b9d 48837c247000 cmp qword ptr [rsp+70h],0
fffff806`9c009ba3 740a je nt!PpmIdleSelectStates+0x8c3 (fffff806`9c009baf)
fffff806`9c009ba5 80bc307105000000 cmp byte ptr [rax+rsi+571h],0
fffff806`9c009bad 7404 je nt!PpmIdleSelectStates+0x8c7 (fffff806`9c009bb3) // Boşta durumda bir durum seçme isteği??
fffff806`9c009baf 32c0 xor al,al
Rich (BB code):
0: kd> k
# Child-SP RetAddr Call Site.
00 fffff806`2e1540c8 fffff806`9c16f682 nt!KeBugCheckEx // Mavi ekran
01 fffff806`2e1540d0 fffff806`9c283332 nt!KiFatalExceptionHandler+0x22
02 fffff806`2e154110 fffff806`9bf8d432 nt!RtlpExecuteHandlerForException+0x12
03 fffff806`2e154140 fffff806`9bf8e599 nt!RtlDispatchException+0x2d2
04 fffff806`2e1548a0 fffff806`9c279f52 nt!KiDispatchException+0xac9
05 fffff806`2e154fb0 fffff806`9c279f20 nt!KxExceptionDispatchOnExceptionStack+0x12
06 fffff806`2e13f568 fffff806`9c28de3e nt!KiExceptionDispatchOnExceptionStackContinue
07 fffff806`2e13f570 fffff806`9c286e8f nt!KiExceptionDispatch+0x13e // İstisna sırası
08 fffff806`2e13f750 fffff806`9c009b92 nt!KiInvalidOpcodeFault+0x34f // Geçersiz işlem istisnamız
09 fffff806`2e13f8e0 fffff806`9c008fb5 nt!PpmIdleSelectStates+0x8a6 // Hataya sebep olan kodumuz
0a fffff806`2e13fb70 fffff806`9c27ace4 nt!PoIdle+0x115
0b fffff806`2e13fc40 00000000`00000000 nt!KiIdleLoop+0x54 // Boşta
Bu da aynı 0XD1 hatamız gibi boşta güç değişimi yapan ve çöken bir sistemi mi gösteriyor? Sanırsam evet, şimdiye kadar gördüğüm 3 dosyanın 2 tanesi işlemci 1 tanesi işlemci ve RAM hataları içeriyor. Önereceğim 2 şey olacak.
- Windows üzerinden işlemcinin minimum ve maximum güç seçeneklerini 100-100 olarak değiştirip işlemcinin mümkün olduğu kadar hatta neredeyse hiç güç durumu geçişi yapmamasını sağlamak. Bunun nasıl yapılacağını internetten kolayca bulabilirsin.
- AMD ekran kartı sürücünü güncellemek? Güncel mi emin olamadım. Ekim'in başındaki sürücüde de olabilirsin. Realtek Ethernet sürücünü güncellemek. Bunun için donanım kimliğinle bir konu açarsan yardımcı olacaklardır güncel sürücü için.
- Anakart şüphen de mantıklı. Laptoplardaki donanımsal hataların çoğunun genel sebebi anakart problemleridir.