Merhaba, konuyu açmanı ben söyledim. Bu yüzden etiketli içerikleri kaldırıyorum. Anlayışla karşılayın
Tüm dosyaların aynı olduğu için üzerine çok durmayacağım.
[CODE lang="rich" highlight="6,7"]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: fffff8001f91dd16, The address that the exception occurred at
Arg3: ffff910782e15610, Parameter 0 of the exception
Arg4: 000000000000005a, Parameter 1 of the exception[/CODE]
0xC0000094
STATUS_INTEGER_DIVIDE_BY_ZERO | {EXCEPTION} Integer division by zero. |
Sistem bir işlemin "sıfıra bölünmesi" sırasında çökmüş, çok ucu açık bir açıklama olmuş. Şöyle diyebiliriz; bu hata o an işlediği Komut'u genellikle yürütme sırasında meydana gelen bir istisna veya hataya eşlik ediyor sadece. Peki, o an yürütülen yani sistemin çöktüğü komut adresi ne?
Yukarıda işaretlediğim Arg2 adresine dikkat et:
| fffff8001f91dd16 | The address that the exception occurred at |
İstisnanın oluştuğu, yürütüldüğü komut adresi imiş, peki bu adres hangi fonksiyonla ilişkili? Bakalım:
[CODE highlight="5,11"]0: kd> TRAP:
09 fffff800`25e746a0 fffff800`1f91db3e nt!PpmPerfSelectProcessorState+0x1a6
rax=000000000d7bcefe rbx=fffff8001e0ea2e8 rcx=0000000000000000
rdx=0000000000000000 rsi=fffff8002021ed88 rdi=0000000000000064
rip=fffff8001f91dd16 rsp=fffff80025e746a0 rbp=fffff80025e74759
r8=0000000000000001 r9=ffff910782e15610 r10=000000000000005a
r11=000000000d7bcefe r12=0000000000000064 r13=ffff910786396920
r14=ffff910786396c20 r15=0000000000000028
iopl=0 nv up ei ng nz na po nc
cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b efl=00000286
nt!PpmPerfSelectProcessorState+0x1a6:
[/CODE]
nt!PpmPerfSelectProcessorState+0x1a6komutu yürütülürken sistem çöküyor, Bu fonksiyon/Çağrı nedir diye sorabilirsin evet, işlemci ile alakalı olduğunu tahmin etmişsindir zaten.
Burada kasıt, şöyle diyelim; Windows gibi işletim sistemlerinde PPM, performans ve güç tüketimi arasında denge kurmak için işlemcinin performansını yönetiyor. Amaç ihtiyaç duyulduğunda performansı optimize ederken, sistem boştayken veya hafif yük altındayken gücü korumasıdır.
nt!PpmPerfSelectProcessorState+0x1a6 çağrısı da burada sistemin mevcut performans gereksinimlerini karşılamak için işlemci çekirdeklerinin çalışma frekansının ve voltajının nasıl ayarlanacağını belirlerken muhtemelen çekirdek tarafından çağrılıyor.
Yiğit'lara bakalım:
Kod:
0: kd> k
# Child-SP RetAddr Call Site
00 fffff800`25e89158 fffff800`1fafb19e nt!KeBugCheckEx
01 fffff800`25e89160 fffff800`1fa07fb2 nt!HvlpVtlCallExceptionHandler+0x22
02 fffff800`25e891a0 fffff800`1f8ab207 nt!RtlpExecuteHandlerForException+0x12
03 fffff800`25e891d0 fffff800`1f9394f6 nt!RtlDispatchException+0x297
04 fffff800`25e898f0 fffff800`1f9fe822 nt!KiDispatchException+0x186
05 fffff800`25e89fb0 fffff800`1f9fe7f0 nt!KxExceptionDispatchOnExceptionStack+0x12
06 fffff800`25e74328 fffff800`1fa11be5 nt!KiExceptionDispatchOnExceptionStackContinue
07 fffff800`25e74330 fffff800`1fa09e04 nt!KiExceptionDispatch+0x125
08 fffff800`25e74510 fffff800`1f91dd16 nt!KiDivideErrorFault+0x304
09 fffff800`25e746a0 fffff800`1f91db3e nt!PpmPerfSelectProcessorState+0x1a6
0a fffff800`25e747c0 fffff800`1f8b41b0 nt!PpmPerfSelectProcessorStates+0x5e
0b fffff800`25e747f0 fffff800`1f8c166e nt!PpmCheckRun+0x40
0c fffff800`25e74860 fffff800`1f8c0954 nt!KiExecuteAllDpcs+0x30e
0d fffff800`25e749d0 fffff800`1fa020ee nt!KiRetireDpcList+0x1f4
0e fffff800`25e74c60 00000000`00000000 nt!KiIdleLoop+0x9e
nt!PpmPerfSelectProcessorState+0x1a6 çağrısında sistemin çöktüğünü söylemiştik zaten öncesinde. Bu güç yönetimi planı değiştirme sonrasında
nt!KiDivideErrorFault+0x304 ile sistem çöküyor. Bu çağrı mevcut Ntstatus kodumuzun da aynısıdır bir nevi çünkü Bir program veya çekirdek bir sayıyı sıfıra bölmeye çalıştığında,
bölme hatası oluşur. Sıfıra bölme işlemini hepimiz matematikten de biliyoruz matematikte 0'a bölmek tanımsız sayılıyor, burada da aynısı. Sıfıra bölüm yasa dışı bir işlemdir. Windows'ta, çekirdek modunda böyle bir hata oluştuğunda (örneğin bir çekirdek modu sürücüsünde veya çekirdek yürütmesi sırasında), istisnayı işlemek için çekirdeğin bölme hatası işleyicisi olan
c0000094
Hatası devreye girer.
Bir çekirdek modu sürücüsü ya da çekirdeğin kendisi bu çağrıya
çokca süre yanıtsız kaldığı için sistemin çökmesinde ciddi bir etki bırakmış olabilir. Askıda kalarak yani.
Kod:
0: kd> !irql
Debugger saved IRQL for processor 0x0 -- 2 (DISPATCH_LEVEL)
Yiğit'ın devamına bakarsan bu sıfıra bölme işleminden sonra sadece istisna kaydı tutan sistem
nt!HvlpVtlCallExceptionHandler+0x22 çağrısından sonra mavi ekrana düşüyor. Bu da işlemci sanallaştırma/Hyper-V ile ilgili bir durum. Sanallaştırmayı da kontrol edebiliriz bu bağlamda.
Asıl burada göze çarpan iş parçacığı çağrıları oldu.
Kod:
rsp : 0xfffff80025e89158 : 0xfffff8001fafb19e : nt!HvlpVtlCallExceptionHandler+0x22
0xfffff80025e74010 : 0xfffff80026e61870 : USBPORT!USBPORTSVC_LogEntry
0xfffff80025e74018 : 0xfffff80026e484dc : usbehci!EHCI_iEnableAsyncList+0x1f0
0xfffff80025e74038 : 0xfffff800249a20ea : Wdf01000!FxIoTarget::SubmitLocked+0x15a
0xfffff80025e74058 : 0xfffff8001f835cf5 : nt!IofCallDriver+0x55
0xfffff80025e74068 : 0xfffff80026e45437 : usbehci!EHCI_AcquireAsyncDoorbellLock+0x23
0xfffff80025e74098 : 0xfffff80026e46183 : usbehci!EHCI_EnableAsyncList+0x3f
0xfffff80025e740c8 : 0xfffff80026e4979a : usbehci!EHCI_sMode_Transfer+0x3f6
0xfffff80025e74108 : 0xfffff8001f83dcda : nt!KeSetEvent+0xea
0xfffff80025e74148 : 0xfffff80026e4eaa8 : usbehci!EHCI_SubmitTransfer+0x88
0xfffff80025e74188 : 0xfffff80026e710a9 : USBPORT!USBPORT_iSetGlobalEndpointStateTx+0x389
0xfffff80025e741e8 : 0xfffff80026e7083f : USBPORT!USBPORT_Core_iSubmitTransferToMiniport+0x20f
0xfffff80025e74278 : 0xfffff80026e6e26b : USBPORT!USBPORT_Core_ProcessScatterGatherList+0x67b
0xfffff80025e74328 : 0xfffff8001fa11be5 : nt!KiExceptionDispatch+0x125
0xfffff80025e74418 : 0xfffff8001f9a0253 : nt!HalpBuildScatterGatherList+0x1af
0xfffff80025e74440 : 0xfffff8002021ed88 : nt!PpmDefaultProfile+0x28
0xfffff80025e74478 : 0xfffff8001f91dd16 : nt!PpmPerfSelectProcessorState+0x1a6
0xfffff80025e744d8 : 0xfffff80026e71b4f : USBPORT!USBPORT_Xdpc_End+0x19f
0xfffff80025e74508 : 0xfffff8001fa09e04 : nt!KiDivideErrorFault+0x304
0xfffff80025e74510 : 0xffff910786dc0df4 : Trap @ fffff80025e74510
0xfffff80025e74528 : 0xfffff80026e70028 : USBPORT!USBPORT_Core_iMapTransfer+0x578
0xfffff80025e74578 : 0xfffff80026f311be : intelppm!PerfReadWrappingCounter+0x3e
0xfffff80025e74638 : 0xfffff8001f9189b5 : nt!PpmPerfRecordUtility+0x255
0xfffff80025e74678 : 0xfffff8001f91dd16 : nt!PpmPerfSelectProcessorState+0x1a6
0xfffff80025e746a8 : 0xfffff8001f918b5e : nt!PpmParkRecordNodeStatistics+0x14e
0xfffff80025e74760 : 0xfffff80020220fa0 : nt!PpmCheckDpc
0xfffff80025e74798 : 0xfffff80020220fa0 : nt!PpmCheckDpc
USB çağrılarını görüyorsun, USB çağrılarından önce işlemcinin kendini iyice belli etiği
IntelPPM çağrıları da cabası. Her şeyden önce şu çağrılar dikkatimi çekti zira;
Kod:
0xfffff80025e74278 : 0xfffff80026e6e26b : USBPORT!USBPORT_Core_ProcessScatterGatherList+0x67b
0xfffff80025e74328 : 0xffff8001fa11be5 : nt!KiExceptionDispatch+0x125
0xfffff80025e74418 : 0xfffff8001f9a0253 : nt!HalpBuildScatterGatherList+0x1af
Burada bahsi geçen GatherList,
doğrudan bellek erişimi işlemlerinde kullanılan veri yapılarından bahsediliyor.
Ağ arabirim kartları, AHCI SATA gibi disk denetleyicilerinin ve ekran kartları gibi aygıtların, her veri aktarım işlemine işlemciyi dahil etmeden sistem belleğine ve sistem belleğinden verimli bir şekilde veri aktarması için bir yol sağlıyor.
nt!HalpBuildScatterGatherList+0x1af çağrısı, bir aygıt sürücüsü bir doğrudan bellek aktarımı için bir Gatherlist istediğinde HAL tarafından çağrılır. İşlev, aktarılan verileri içeren fiziksel bellek sayfalarını aygıtın direkt bellek erişimi için kullanabileceği bir biçime bir GatherList oluşturmak sorumlu oluyor anladığım kadarıyla.
Zaten bundan sonra da sistem
pagefault'a düşüyor. 2 suçlu var şu ana kadar fark ettiğin gibi.
Bu internet sağlayıcının sürücüsü çok çok eski. Bunu güncellemek gerek.
Kod:
0: kd> lmDvmnetr28ux
Browse full module list
start end module name
fffff800`29770000 fffff800`29999000 netr28ux (deferred)
Mapped memory image file: C:\ProgramData\dbg\sym\netr28ux.sys\55672624229000\netr28ux.sys
Image path: \SystemRoot\System32\drivers\netr28ux.sys
Image name: netr28ux.sys
Browse all global symbols functions data
Timestamp: Thu May 28 17:28:52 2015 (55672624)
(....)
CompanyName: MediaTek Inc.
ProductName: MediaTek 802.11n Wireless Adapters
Buna ek olarak farklı bir dosyanda
intelppm!GetFFHThrottleState çağrısı mevcut burada anladığım; işlemci güç planını değiştirirken yani düşürürken, daha düşük bir plana geçerken sistemin çöktüğü.
2 şey denenebilir:
- USB internet sağlayıcı güncellenebilir, güncellenmeden önce sistemden çıkarılıp sistem kontrol edilebilir.
- İşlemci güç planı hiç düşmeyeceği bir plana çekilebilir, bu şekilde de işlemci kendi güç planını değiştirmeyecek bir duruma düşmüş olur.
Hangisinden başlarsan, bana kalırsa ilk iş USB ile bağladığın internet arabirimini çıkar ve sistemi normalen aç ve kontrol et, acaba maviye düşüyor mu diye... Düşmezse anlarız bir şeyleri.