Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Mienaki

Uzman
Katılım
26 Eylül 2024
Mesajlar
49
Beğeniler
6

Merhaba, iyi geceler. Tekrardan rahatsız ettim kusura bakmayınız.. Ayın 27'sinde hata almıştım en son 13 gün önce ve şu an tekrarladı. Minidump dosyasını paylaşmak istedim. Portların yerini değiştirip kullanıyordum ve hiçbir sorun yoktu ama birden takıldı tekrar "tııır" sesi ve siyah ekran ile reset atmak zorunda kaldım.
 
Son düzenleyen: Moderatör:
Çözü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: ffffffff80000003, The exception code that was not handled
Arg2: fffff807dfe79470, The address that the exception occurred at
Arg3: 0000000000000000, Parameter 0 of the exception
Arg4: fffff807dfe79470, Parameter 1 of the exception

Gördüğümüz gibi oldukça genel bir hata kontrolümüz var. Bunlar, kendileri için işleyici yazılmamış ya da yapılandırılmış istisna işleme kullanılarak yakalanamayan istisnaların atılmasından kaynaklanıyor. Örneğin, PageFault, try-catch deyimi ile ele alınamayan bir istisnadır.

İşlenmeyen istisna nedir?

Rich (BB code):
0: kd> !error 80000003
Error code: (HRESULT) 0x80000003 (2147483651) - Bir veya daha fazla bağımsız değişken geçersiz

İstisnaya sebep olan fonksiyon nedir?

Rich (BB code):
0: kd> ln fffff807dfe79470
Browse module
Set bu breakpoint

(fffff807`dfe79470)   nt!DbgBreakPoint   |  (fffff807`dfe79480)   nt!DbgUserBreakPoint
Exact matches:

Microsoft'un bunun hakkındaki belgelemesine bakarsak:

The DbgBreakPoint routine is the kernel-mode equivalent of DebugBreak.

This routine raises an exception that is handled by the kernel debugger if one is installed; otherwise, it is handled by the debug system. If a debugger is not connected to the system, the exception can be handled in the standard way.

In kernel mode, a break exception that is not handled will cause a bug check. You can, however, connect a kernel-mode debugger to a target computer that has stopped responding and has kernel debugging enabled.

Bu neden sistemin mavi ekran verdiğini açıklıyor. Lakin ne yüzünden verdiğini açıklamıyor, Yığıtlara bakarak bunu çözebiliriz;


Rich (BB code):
0: kd> k
 # Child-SP RetAddr Call Site
00 fffff807`71b950c8 fffff807`dff2a112 nt!KeBugCheckEx
01 fffff807`71b950d0 fffff807`e003d172 nt!KiFatalExceptionHandler+0x22
02 fffff807`71b95110 fffff807`dfd52302 nt!RtlpExecuteHandlerForException+0x12
03 fffff807`71b95140 fffff807`dfd53469 nt!RtlDispatchException+0x2d2
04 fffff807`71b958a0 fffff807`e0033d92 nt!KiDispatchException+0xac9
05 fffff807`71b95fb0 fffff807`e0033d60 nt!KxExceptionDispatchOnExceptionStack+0x12
06 fffff807`71b84128 fffff807`e0047c3e nt!KiExceptionDispatchOnExceptionStackContinue
07 fffff807`71b84130 fffff807`e003fe9b nt!KiExceptionDispatch+0x13e
08 fffff807`71b84310 fffff807`dfe79471 nt!KiBreakpointTrap+0x35b < Çökme 
09 fffff807`71b844a8 fffff807`71532260 nt!DbgBreakPoint+0x1
0a (Inline Function) --------`-------- Wdf01000!Mx::MxDbgBreakPoint+0xc
0b fffff807`71b844b0 fffff807`714c6f0d Wdf01000!FxVerifierDbgBreakPoint+0x50
0c (Inline Function) --------`-------- Wdf01000!FxVerifierCheckIrqlLevel+0xc43 < Doğrulama kontrolü 
0d fffff807`71b844f0 fffff807`65932fab  Wdf01000!imp_WdfUsbTargetDeviceSendControlTransferSynchronously+0xf7d
0e fffff807`71b848c0 00000000`00000000 sshid+0x2fab

Verifier'in önemini şimdi anlamış olduk. Sorunun sebebini ilk çökmede verdi kendi dosyası olmasa bile. SteelSeries sürücüsü dediğim gibi, en başından beri. Bir USB aygıtına Senkranizasyon kontrolü yapılıyor ve burada bir breakpoint yakalıyor sistem/Verifier. Nerede çöktüğümüzü ve ayrıca önceden çağrılan sorunlu bir sürücüyü görebiliyoruz kırmızı ile. Yığına dikkat edersen Wdf01000!FxVerifierCheckIrqlLevel ve Wdf01000!FxVerifierDbgBreakPoint. Artık kesme noktasının neden çağrıldığını biliyoruz, FxVerifierCheckIrqlLevel işlevi tarafından bir hata ayıklayıcının içeri girmesini ve geliştiricinin sürücüsünün neden çöktüğünü görmesini sağlamak için kullanılıyor. SSHID, yanlış IRQL düzeyinde çağırılıyor bu da çökmeye direkt olarak sebep olması için yeterlidir çünkü IRQL 2 düzeyinde Kernel bir sürücünün herhangi bir işlevinin yaptığı bir yanlış sistemi çökertecek düzeyde olur.

Rich (BB code):
0: kd> !irql
Debugger saved IRQL for processor 0x0 -- 2 (DISPATCH_LEVEL)

Sürücünün doğrulama kontrolünde başarısız olduğunu ve bu nedenle kesme noktasının çağrıldığını varsayabiliriz, ancak bunu !wdflogdump komutunu kullanarak kesin olarak doğrulayabilirdik ama,

Dosya da her zamanki gibi yetersiz:[

Rich (BB code):
0: kd> !wdflogdump sshid
ReadListEntry failed
Warning: It looks like you're using the WDF debugger extension on a WDM
         driver. Framework logs will not be available

Muhtemelen karşılaşacağımız hata bu olacaktı:

Rich (BB code):
38: FxPkgPnp::HandleQueryBusRelations - WDFDEVICE 00001BF908FB2F68 returning 3 devices in relations FFFF820D1551C5D0
39: FxVerifierCheckIrqlLevel - Called at wrong IRQL; at level 2, should be at level 0


Sshid, açıkça çökmeye sebep oluyor. SS klavye sürücüsünü kaldırmalısın. Aygıt yöneticisi üzerinde bulabiliyor olman lazım ilgili sürücüyü, HID olmadan SS Keyboard aygıtı olarak ekli olması lazım...

Rich (BB code):
0: kd> lmvmsshid
Browse full module list
start             end                 module name
fffff807`65930000 fffff807`6593d000   sshid    T (no symbols)           
    Loaded symbol image file: sshid.sys
    Image path: sshid.sys
    Image name: sshid.sys
    Browse all global symbols  functions  data
    Timestamp:        Thu Feb 24 06:09:08 2022 (6216F6D4) 
    CheckSum:         00018401
    ImageSize:        0000D000
    Translations:     0000.04b0 0000.04e4 0409.04b0 0409.04e4
    Information from resource tables:
Maalesef. Emin olmadığım için sansürlemiştim zaten ve üzerinden uzunca bir süre geçmesine rağmen herhangi bir hataya zorlamadı beni. Çok güvenli bir yol değil System32 içine erişim sağlamak için.

Bu sırada basit bir wdf tabanlı sürücü yazıp açıkçası birkaç hataya zorladım ve aldığın hatanın bir benzerini aldım. Kodlamada ne tür bir hatanın bu tür bir soruna sebep olabileceğini anlamak içindi ve üzerinden 2-3 denemeden fazla da durmadım açıkçası. Yazdığım kod sshid gibi bir sürücü için yazılan koddan çok daha düşük seviye bir koddu çünkü. Yine de durumu az buz anlamış sayılırım.

Rich (BB code):
1: kd> !wdflogdump bicy.sys
Trace searchpath is:

Trace format prefix is: %7!u!: %!FUNC! -
Trying to extract TMF information from - C:\ProgramData\dbg\sym\Wdf01000.pdb\066683F62DF745C1C6CD389F00F53E281\Wdf01000.pdb
Gather log: Please wait, this may take a moment (reading 4024 bytes).
% read so far ... 10, 20, 30, 40, 50, 100.
There are 39 log entries.
--- start of log ---
1: FxIFRStart - FxIFR logging started.
[.....]
37: FxVerifierCheckIrqlLevel - FxVerifierCheckIrqlLevel - Called at wrong IRQL; at level 2, should be at level 0
---- end of log ----

Tabii bu çok incelikli bir kod değil. Basit olarak kontrol mekanizmasına sahip olmayan bir hatada IRQL hatasını yakalayabildim.

Handlequerybusrelations fonksiyonunu özellikle kullandım çünkü bir PnP aygıtı ile ilgili en olasılıklı cevabı bu şekilde alabilirdim. Kısacası; bu fonksiyon çağrıldığında, IRQL seviyesinin 0'dan daha yüksek olduğu bir durumda exallocatepoolwithtag fonksiyonu ile sayfalanabilen belleğe (pagedpool) erişmeye çalıştım. Lakin bu durum, yalnızca IRQL = 0 seviyesinde yapılabilecek bir işlem olduğu için verifier bunu tespit edip senin aldığın hatanın aynısını verdi. Tabii ki bir IRQL kontrol mekanizması bile olmayan basit bir koddan ibaretti. Nihayetinde bu kontrol sağlanınca sorun çözülüyordu.

Sshıd gibi bir sürücü bu kontrolden daha nitelikli bir hataya sahip olmalı ki verifier çalışmıyorken bile sistemi çökertiyor... IRQL yükseltme, IRQL düşürme ya da belleğe erişim. Açıkçası bus ile her şeye bunlar sebep olabilir ve sürücü kapalı kaynakken bunu tespit etmem imkansız. Ek olarak senin hatan da hangi fonksiyonda çöküyor da bu hatayı yaratıyor ondan bile emin değiliz, fonksiyon o an kaç aygıtla ilişkide, kaç kere çağrılıyor ya da çağrılmadan önce fxverifier hangi kontrolleri yapıyor bilmiyoruz çünkü buna sahip bir dump dosyası sahibi de hiç olmadık. Özetle:

Sürücünün tüm dosyaları silinip baştan yüklendi. / çözülmedi.
Sürücüyü kullanan aygıt çıkartıldı. / çözüldü.

Belki de sorun klavye değil de sürücü derken ben hatalıydım. Bunu bilemem ama göründüğü kadarıyla zaten hem format attın hem sürücüyü sildin yükledin ama tek olumlu sonucu klavye takılı değilken aldın. SteelSeries ile iletişime geçip bir sürücü desteği de almadığın sürece bir Windows geliştiricisi olmadığımız için sana hangi PnP aygıtının hangi ırq kullanımını değiştirmeyi buradan anlatamayacağımdan da dolayı klavyeni değiştirmek isteyebilirsin.

Şu an değiştirmekten başka bir cözüm yolu izleyemiyor muyuz?
 
Sistem yedeği alırsan [TOOLTIP=Güvenli bir yöntem olmadığı için.]System32 içindeki sshid dosyalarını silebileceğin bir kod yazıp .bat halinde sana sağlayabilirim.[/TOOLTIP] Dosyayı kullanmadan önce klavyeyi çıkarmalı ve öncesinde olduğu gibi Aygıt Yöneticisi'nden kendisini kaldırmalısın. Konunun öncesine baktığımda System32 içindeki dosyaları silmediğini fark ettim. Bu da elimizde kalan tek deneme yolu.
 
Sistem yedeği alırsan System32 içindeki sshid dosyalarını silebileceğin bir kod yazıp .bat halinde sana sağlayabilirim. Dosyayı kullanmadan önce klavyeyi çıkarmalı ve öncesinde olduğu gibi Aygıt Yöneticisi'nden kendisini kaldırmalısın. Konunun öncesine baktığımda System32 içindeki dosyaları silmediğini fark ettim. Bu da elimizde kalan tek deneme yolu.
Bir de 40 gün kadar kullandık, 32 gün sonra başladı. Eskiden ortalama 14+ günden sonra her an yapma ihtimali vardı ve her yaptığında CMD /Restore /Health /Scannow komtularını kullanarak, dosya birleştirme ile, ekran kartı sürücüsünü sil yükle yaptığımda vs. 1-2 hafta daha kazanırdım. Çok nadir gün aşırı verirdi, bu süreçten sonra hemen hemen 3 gün üst üste yaptı. Hatta Windows boştayken bile, dün çıkarttım klavyeyi ve sistemdeki her şeyi sildim Aygıt Yöneticisi'nden. Umarım unutmamışımdır bir şeyleri. Başka klavye taktım, şu an acaba diyorum 30+ gün harici kullandık ve 30 gün hata vermedi mi? Anlamıyorum saçma olacak ama stackleniyor falan mı ne çok tuhaf.

Temiz formatta bile her şeyi yapmamıza rağmen neden bu problem düzelmiyor anlamış değilim. Bu yapacak olduğumuz tam olarak nedir ve cözüm ihtimali % kaç? Ya da olası ihtimaller neler?
 
Son düzenleyen: Moderatör:
Takıldığın şey doğru değil. Hata bir süre zarfında tekrarlamıyor, aksine hatanın sebebini bulduğumuz gün ya da son 3 günden zaten bir süre beklediğini görmüyoruz. Tam bilmediğimiz için muhtemelen hataya sebep olan kodu yanlış seviyede çağırdığında ya da yüksek bir seviyede stuck'landığında ya da yanlış bir seviyede bir bellek aralığı açtığında hata oluyor. Bu da bir süre zarfını beklemiyor, stacklenme durumundan kastın ne bilmiyorum ama muhtemelen anladığın şey değil o. Normal bir şekilde oluyor yani. 5 gün de oldu 10 gün de oldu 15 gün de oldu 3 ay da oldu. Yani oluyor.

Temiz formatta bile her şeyi yapmamıza rağmen neden bu problem düzelmiyor anlamış değilim. Bu yapacak olduğumuz tam olarak nedir ve cözüm ihtimali % kaç? Ya da olası ihtimaller neler?
Yüzde bilmiyorum. Olası büyük bir ihtimal olduğunu sanmıyorum ama yedek her zaman alınabilir. Sildiğin sürücü sistemin işleyişini etkilemeyecek sonuçta. Dümdüz gibi system32 içinde sshid ile ilgili her şeyi kendin de silebilirsin. Yaptığımız şey tüm sürücü dosyalarını silip baştan sisteme kurmak. PnP bir fonksiyon hataya sebep oluyorsa BUS fonksiyonu gibi, direkt olarak sürücü hatası değil klavyenin kendi hatasından da olabiliyor. Bu da tahminden ibaret sadece. Görmedim.
 
Takıldığın şey doğru değil. Hata bir süre zarfında tekrarlamıyor, aksine hatanın sebebini bulduğumuz gün ya da son 3 günden zaten bir süre beklediğini görmüyoruz. Tam bilmediğimiz için muhtemelen hataya sebep olan kodu yanlış seviyede çağırdığında ya da yüksek bir seviyede stuck'landığında ya da yanlış bir seviyede bir bellek aralığı açtığında hata oluyor. Bu da bir süre zarfını beklemiyor, stacklenme durumundan kastın ne bilmiyorum ama muhtemelen anladığın şey değil o. Normal bir şekilde oluyor yani. 5 gün de oldu 10 gün de oldu 15 gün de oldu 3 ay da oldu. Yani oluyor.

Yüzde bilmiyorum. Olası büyük bir ihtimal olduğunu sanmıyorum ama yedek her zaman alınabilir. Sildiğin sürücü sistemin işleyişini etkilemeyecek sonuçta. Dümdüz gibi System32 içinde sshid ile ilgili her şeyi kendin de silebilirsin. Yaptığımız şey tüm sürücü dosyalarını silip baştan sisteme kurmak. PnP bir fonksiyon hataya sebep oluyorsa bus fonksiyonu gibi, direkt olarak sürücü hatası değil klavyenin kendi hatasından da olabiliyor. Bu da tahminden ibaret sadece. Görmedim.

Şu an işteyim halk ettiğim de haber vereceğım.