Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Katılım
16 Aralık 2023
Mesajlar
1.440
Makaleler
40
Çözümler
22
Beğeniler
4.119
Yer
Mantar Krallığı
  • Anakart: HP 81EE
  • İşlemci: Intel Core i5-7200U
  • Ekran Kartı: Intel HD Graphics 620
  • İşletim Sistemi: Windows 11 Home SL x64

Bazen oyun oynamak için DualShock 4'ümü bilgisayara bağlamam gerekiyor. Bu yüzden Bluetooth'u açıyorum, cihazı sistemden unutturup bağlıyorum.
Genel olarak hiçbir sorunla karşılaşmasam da bazen iki farklı BSOD alabiliyorum:
  • KERNEL_SECURITY_CHECK_FAILURE
  • IRQL_NOT_LESS_OR_EQUAL
Bir hata normal bir şekilde bağlarken, diğer bir hata ise DS4Windows programı DualShock 4'ü tespit ettiğinde meydana geliyor.

Minidump dosyaları aşağıdadır, şimdiden teşekkürler.
 
Çözüm
Yüksek bir IRQL durumunda, geçersiz bellek erişimi olmuş. Bu sadece buraya bakarak bile anlaşılabilecek bir durum.

[CODE lang="rich" highlight="7,8"]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: 0000000100000002, memory referenced
Arg2: 0000000000000002, IRQL
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: fffff80072070a80, address which referenced memory
[/CODE]

Geçersiz bellek erişimi neden olmuş?

Rich (BB code):
3: kd> k
 # Child-SP          RetAddr               Call Site
00 fffffd8c`19abe9f8 fffff800`7222c5e9     nt!KeBugCheckEx
01 fffffd8c`19abea00 fffff800`72227b34     nt!KiBugCheckDispatch+0x69
02 fffffd8c`19abeb40 fffff800`72070a80     nt!KiPageFault+0x474
03 fffffd8c`19abecd0 fffff800`8f4b5587     nt!KeWaitForSingleObject+0x200
04 fffffd8c`19abf070 ffffb909`8587c820     ViGEmBus+0x5587
05 fffffd8c`19abf078 00000000`00000000     0xffffb909`8587c820

[CODE highlight="11"]TRAP_FRAME: fffffd8c19abeb40 -- (.trap 0xfffffd8c19abeb40)
NOTE: The trap frame does not contain all registers.
Some register values may be zeroed or incorrect.
rax=ffffb90996f47090 rbx=0000000000000000 rcx=0000000100000002
rdx=00000000ffffffff rsi=0000000000000000 rdi=0000000000000000
rip=fffff80072070a80 rsp=fffffd8c19abecd0 rbp=fffffd8c19abedd0
r8=0000000000000001 r9=0000000000000000 r10=0000000000000000
r11=ffffb90997aa91c0 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0 nv up ei pl zr na po nc
nt!KeWaitForSingleObject+0x200:
fffff800`72070a80 483901 cmp qword ptr [rcx],rax ds:00000001`00000002=????????????????
Resetting default scope
[/CODE]

Aslında bir sayfa hatası, nt!KeWaitForSingleObject çağrısında meydana gelmiş olsa da buna sebep olan şey ViGEmBus.sys yani tam olarak konuda dert olarak yakındığın kontrolcülerle ilgili emulating game controllers programı sebep olmuş. Normalde bu dosyalarda Kernel-Mode üzerinden gelen sürücülerin sebep olduğu geçersiz bellek erişimlerini görüyoruz ama bu sürücü User-Mode uygulamalarından gelen istekleri işlemek ve sanal oyun denetleyicileri oluşturmak, giriş verilerini yönetmek ve sistem olaylarına yanıt vermek gibi görevleri yerine getirmek için bu modda çalışmıyor.

En başta işaretlediğim IRQL durumu da önemli bir etken çünkü nt!KeWaitForSingleObject fonksiyonunun sadece APC_LEVEL altındaki durumlarda çağrılması gerekiyor.

Kod:
3: kd> !irql
Debugger saved IRQL for processor 0x3 -- 2 (DISPATCH_LEVEL)

Windows, programlama esnasında DISPATCH_LEVEL'de KeWaitForSingleObject'in çağrılmasına izin vermez. DISPATCH_LEVEL'de KeWaitForSingleObject'i çağırmaya çalışırsan tam da dosyadaki IRQL_NOT_LESS_OR_EQUAL hata koduyla mavi ekran yersin. Bunun nedeni, KeWaitForSingleObject iş parçacığının DISPATCH_LEVEL veya üzerinde izin verilmeyen bir bekleme durumuna sokulmasına neden olması.

Yani aslında ViGEmBus.sys bu fonksiyonu çağırırken "Paylaşılan kaynaklara erişmi senkronize etmesini, kendisiyle alakalı bir olay bekleme sinyali oluşturmasını ve sonucunda G/Ç isteklerini tamamlasını bekliyor." ama DISPATCH_LEVEL`de bekleme işlemlerine izin verilmez çünkü iş parçacığının bloke olmasına neden olabilir ve bu IRQL'de buna izin vermez W. Ayrıca sürücü zaten DISPATCH_LEVEL konumundayken bir G/Ç işleminin tamamlanmasını beklemeye çalışması da hatalıdır çünkü bu konumda bu durumda geçersiz oluyor.

KeWaitForSingleObject, halihazırda zaten pagefile'da olan bellek adresleri üzerinden çağrılır. Bu durumda eriştiği adresin NotValid olması beklenmedik bir şey değil..


Biliyorum gereksiz uzun oldu ama birkaç gündür uzun bir şeyler yazma isteğim vardı. Diğer dosyan ise:

Kod:
KERNEL_SECURITY_CHECK_FAILURE (139)
A kernel component has corrupted a critical data structure.  The corruption
could potentially allow a malicious user to gain control of this machine.
Arguments:
Arg1: 0000000000000003, A LIST_ENTRY has been corrupted (i.e. double remove).
Arg2: fffff10251daf030, Address of the trap frame for the exception that caused the BugCheck
Arg3: fffff10251daef88, Address of the exception record for the exception that caused the BugCheck
Arg4: 0000000000000000, Reserved

Bir sürücünün eklendiği liste yapısını bozmasıyla alakalı bir durum. Bu dosyalarda tamamen istisna ve bağlam kayıtlarına bakarak da ilerleyebiliriz zira tüm olayı açıklıyorlar.

Kod:
.exr 0xfffff10251daef88
ExceptionAddress: fffff80421c4e856 (BTHport!HCI_CallPairServers+0x000000000000019a)
   ExceptionCode: c0000409 (Security check failure or stack buffer overrun)
  ExceptionFlags: 00000001
NumberParameters: 1
   Parameter[0]: 0000000000000003
Subcode: 0x3 FAST_FAIL_CORRUPT_LIST_ENTRY

BTHport!HCI_CallPairServers fonksiyonunda sistem bir 0xc0000409 durduruma koduyla beraber bir __fastfail oluşturuyor çünkü bir _LIST_ENTRY ile ilgili bir corrupted yani bozulma tespit ediliyor. Buna BT sürücüsü sebep olmuş.

Kod:
3: kd> !error c0000409
Error code: (NTSTATUS) 0xc0000409 (3221226505) - The system detected an overrun of a stack-based buffer in this application. This overrun could potentially allow a malicious user to gain control of this application.

Fastfail hatası bize hiçbir istisna işleminin çağrılmayacağını ve sistemin hemen mavi ekran yapacağını gösteriyor.

[CODE highlight="2"]BTHport!HCI_CallPairServers+0x19a:
fffff804`21c4e856 cd29 int 29h // istisna sebebi.
fffff804`21c4e858 488b4d30 mov rcx,qword ptr [rbp+30h]
fffff804`21c4e85c 4833cc xor rcx,rsp
fffff804`21c4e85f e85c49fbff call BTHport!_security_check_cookie (fffff804`21c031c0)
fffff804`21c4e864 4881c440010000 add rsp,140h
fffff804`21c4e86b 415e pop r14
fffff804`21c4e86d 5f pop rdi
fffff804`21c4e86e 5e pop rsi
[/CODE]

Fonksiyonun yürütüldüğü sırada oluşan istisnayı gördün mü? int -29h Attığım fastfail linkine tıklarsan görmüşsündür diye tahmin ediyorum.

İnt -29h özellikle MS-DOS bağlamında oluşundan dolayı kritik bir istisna/kesmedir. Bu kesme, sıfıra bölme veya geçersiz belleğe erişim gibi kritik bir hata oluştuğunda çağrılan bir kesme çeşididir.

Kod:
3: kd> !pte 0000000000000003
                                           VA 0000000000000003
PXE at FFFF92C964B25000    PPE at FFFF92C964A00000    PDE at FFFF92C940000000    PTE at FFFF928000000000
contains 0A0000012ECBE867  contains 0000000000000000
pfn 12ecbe    ---DA--UWEV  contains 0000000000000000
not valid

Çünkü sistem geçersiz sistem belleğine erişim sağlıyor. Burda yapılacak şey BT sürücülerini gözden geçirmek olur ancak.

Eklemeyi unutmuşum,,

Kod:
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: 0000000000000010, // Geçersiz adres erişimi
Arg2: 0000000000000002, IRQL // Yüksek kesme isteği.
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: fffff8020f323660, address which referenced memory

*** WARNING: Unable to verify timestamp for rtwlanu.sys <-------------------- PageFault

[CODE highlight="9"]1: kd> lmvmrtwlanu
Browse full module list
start end module name
fffff802`60390000 fffff802`60b9e000 rtwlanu T (no symbols)
Loaded symbol image file: rtwlanu.sys
Image path: rtwlanu.sys
Image name: rtwlanu.sys
Browse all global symbols functions data
Timestamp: Mon Jun 25 06:47:19 2018 (5B3065C7)
CheckSum: 007F6372
ImageSize: 0080E000
Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4
Information from resource tables:
[/CODE]

Wi-Fi sürücünü de güncellemelisin.
  • Anakart: HP 81EE
  • İşlemci: Intel Core i5-7200U
  • Ekran Kartı: Intel HD Graphics 620
  • İşletim Sistemi: Windows 11 Home SL x64

Bazen oyun oynamak için DualShock 4'ümü bilgisayara bağlamam gerekiyor. Bu yüzden Bluetooth'u açıyorum, cihazı sistemden unutturup bağlıyorum.
Genel olarak hiçbir sorunla karşılaşmasam da bazen iki farklı BSOD alabiliyorum:
  • KERNEL_SECURITY_CHECK_FAILURE
  • IRQL_NOT_LESS_OR_EQUAL
Bir hata normal bir şekilde bağlarken, diğer bir hata ise DS4Windows programı DualShock 4'ü tespit ettiğinde meydana geliyor.

Minidump dosyaları aşağıdadır, şimdiden teşekkürler.
Ben bu hatayı kolu tamir ettikten sonra içerideki donanım parçalarını tamamen doğru takamadığımda almıştım. Ama hataya biraz baktığımda donanım sorunu gibi geldi.

Ama benden daha derin bilgisi olan daha iyi yorumlayabilir onu da belirtmek isterim.

Hocam biraz internette bu hata hakkında biraz daha araştırma yaptım bazıları RAM bellek sebebiyle olabileceğini söylüyor ama bana pek mantıklı gelmedi RAM ile gamepadin alakasını çözemedim.
 
Son düzenleme:
Yüksek bir IRQL durumunda, geçersiz bellek erişimi olmuş. Bu sadece buraya bakarak bile anlaşılabilecek bir durum.

[CODE lang="rich" highlight="7,8"]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: 0000000100000002, memory referenced
Arg2: 0000000000000002, IRQL
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: fffff80072070a80, address which referenced memory
[/CODE]

Geçersiz bellek erişimi neden olmuş?

Rich (BB code):
3: kd> k
 # Child-SP          RetAddr               Call Site
00 fffffd8c`19abe9f8 fffff800`7222c5e9     nt!KeBugCheckEx
01 fffffd8c`19abea00 fffff800`72227b34     nt!KiBugCheckDispatch+0x69
02 fffffd8c`19abeb40 fffff800`72070a80     nt!KiPageFault+0x474
03 fffffd8c`19abecd0 fffff800`8f4b5587     nt!KeWaitForSingleObject+0x200
04 fffffd8c`19abf070 ffffb909`8587c820     ViGEmBus+0x5587
05 fffffd8c`19abf078 00000000`00000000     0xffffb909`8587c820

[CODE highlight="11"]TRAP_FRAME: fffffd8c19abeb40 -- (.trap 0xfffffd8c19abeb40)
NOTE: The trap frame does not contain all registers.
Some register values may be zeroed or incorrect.
rax=ffffb90996f47090 rbx=0000000000000000 rcx=0000000100000002
rdx=00000000ffffffff rsi=0000000000000000 rdi=0000000000000000
rip=fffff80072070a80 rsp=fffffd8c19abecd0 rbp=fffffd8c19abedd0
r8=0000000000000001 r9=0000000000000000 r10=0000000000000000
r11=ffffb90997aa91c0 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0 nv up ei pl zr na po nc
nt!KeWaitForSingleObject+0x200:
fffff800`72070a80 483901 cmp qword ptr [rcx],rax ds:00000001`00000002=????????????????
Resetting default scope
[/CODE]

Aslında bir sayfa hatası, nt!KeWaitForSingleObject çağrısında meydana gelmiş olsa da buna sebep olan şey ViGEmBus.sys yani tam olarak konuda dert olarak yakındığın kontrolcülerle ilgili emulating game controllers programı sebep olmuş. Normalde bu dosyalarda Kernel-Mode üzerinden gelen sürücülerin sebep olduğu geçersiz bellek erişimlerini görüyoruz ama bu sürücü User-Mode uygulamalarından gelen istekleri işlemek ve sanal oyun denetleyicileri oluşturmak, giriş verilerini yönetmek ve sistem olaylarına yanıt vermek gibi görevleri yerine getirmek için bu modda çalışmıyor.

En başta işaretlediğim IRQL durumu da önemli bir etken çünkü nt!KeWaitForSingleObject fonksiyonunun sadece APC_LEVEL altındaki durumlarda çağrılması gerekiyor.

Kod:
3: kd> !irql
Debugger saved IRQL for processor 0x3 -- 2 (DISPATCH_LEVEL)

Windows, programlama esnasında DISPATCH_LEVEL'de KeWaitForSingleObject'in çağrılmasına izin vermez. DISPATCH_LEVEL'de KeWaitForSingleObject'i çağırmaya çalışırsan tam da dosyadaki IRQL_NOT_LESS_OR_EQUAL hata koduyla mavi ekran yersin. Bunun nedeni, KeWaitForSingleObject iş parçacığının DISPATCH_LEVEL veya üzerinde izin verilmeyen bir bekleme durumuna sokulmasına neden olması.

Yani aslında ViGEmBus.sys bu fonksiyonu çağırırken "Paylaşılan kaynaklara erişmi senkronize etmesini, kendisiyle alakalı bir olay bekleme sinyali oluşturmasını ve sonucunda G/Ç isteklerini tamamlasını bekliyor." ama DISPATCH_LEVEL`de bekleme işlemlerine izin verilmez çünkü iş parçacığının bloke olmasına neden olabilir ve bu IRQL'de buna izin vermez W. Ayrıca sürücü zaten DISPATCH_LEVEL konumundayken bir G/Ç işleminin tamamlanmasını beklemeye çalışması da hatalıdır çünkü bu konumda bu durumda geçersiz oluyor.

KeWaitForSingleObject, halihazırda zaten pagefile'da olan bellek adresleri üzerinden çağrılır. Bu durumda eriştiği adresin NotValid olması beklenmedik bir şey değil..


Biliyorum gereksiz uzun oldu ama birkaç gündür uzun bir şeyler yazma isteğim vardı. Diğer dosyan ise:

Kod:
KERNEL_SECURITY_CHECK_FAILURE (139)
A kernel component has corrupted a critical data structure.  The corruption
could potentially allow a malicious user to gain control of this machine.
Arguments:
Arg1: 0000000000000003, A LIST_ENTRY has been corrupted (i.e. double remove).
Arg2: fffff10251daf030, Address of the trap frame for the exception that caused the BugCheck
Arg3: fffff10251daef88, Address of the exception record for the exception that caused the BugCheck
Arg4: 0000000000000000, Reserved

Bir sürücünün eklendiği liste yapısını bozmasıyla alakalı bir durum. Bu dosyalarda tamamen istisna ve bağlam kayıtlarına bakarak da ilerleyebiliriz zira tüm olayı açıklıyorlar.

Kod:
.exr 0xfffff10251daef88
ExceptionAddress: fffff80421c4e856 (BTHport!HCI_CallPairServers+0x000000000000019a)
   ExceptionCode: c0000409 (Security check failure or stack buffer overrun)
  ExceptionFlags: 00000001
NumberParameters: 1
   Parameter[0]: 0000000000000003
Subcode: 0x3 FAST_FAIL_CORRUPT_LIST_ENTRY

BTHport!HCI_CallPairServers fonksiyonunda sistem bir 0xc0000409 durduruma koduyla beraber bir __fastfail oluşturuyor çünkü bir _LIST_ENTRY ile ilgili bir corrupted yani bozulma tespit ediliyor. Buna BT sürücüsü sebep olmuş.

Kod:
3: kd> !error c0000409
Error code: (NTSTATUS) 0xc0000409 (3221226505) - The system detected an overrun of a stack-based buffer in this application. This overrun could potentially allow a malicious user to gain control of this application.

Fastfail hatası bize hiçbir istisna işleminin çağrılmayacağını ve sistemin hemen mavi ekran yapacağını gösteriyor.

[CODE highlight="2"]BTHport!HCI_CallPairServers+0x19a:
fffff804`21c4e856 cd29 int 29h // istisna sebebi.
fffff804`21c4e858 488b4d30 mov rcx,qword ptr [rbp+30h]
fffff804`21c4e85c 4833cc xor rcx,rsp
fffff804`21c4e85f e85c49fbff call BTHport!_security_check_cookie (fffff804`21c031c0)
fffff804`21c4e864 4881c440010000 add rsp,140h
fffff804`21c4e86b 415e pop r14
fffff804`21c4e86d 5f pop rdi
fffff804`21c4e86e 5e pop rsi
[/CODE]

Fonksiyonun yürütüldüğü sırada oluşan istisnayı gördün mü? int -29h Attığım fastfail linkine tıklarsan görmüşsündür diye tahmin ediyorum.

İnt -29h özellikle MS-DOS bağlamında oluşundan dolayı kritik bir istisna/kesmedir. Bu kesme, sıfıra bölme veya geçersiz belleğe erişim gibi kritik bir hata oluştuğunda çağrılan bir kesme çeşididir.

Kod:
3: kd> !pte 0000000000000003
                                           VA 0000000000000003
PXE at FFFF92C964B25000    PPE at FFFF92C964A00000    PDE at FFFF92C940000000    PTE at FFFF928000000000
contains 0A0000012ECBE867  contains 0000000000000000
pfn 12ecbe    ---DA--UWEV  contains 0000000000000000
not valid

Çünkü sistem geçersiz sistem belleğine erişim sağlıyor. Burda yapılacak şey BT sürücülerini gözden geçirmek olur ancak.

Eklemeyi unutmuşum,,

Kod:
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: 0000000000000010, // Geçersiz adres erişimi
Arg2: 0000000000000002, IRQL // Yüksek kesme isteği.
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: fffff8020f323660, address which referenced memory

*** WARNING: Unable to verify timestamp for rtwlanu.sys <-------------------- PageFault

[CODE highlight="9"]1: kd> lmvmrtwlanu
Browse full module list
start end module name
fffff802`60390000 fffff802`60b9e000 rtwlanu T (no symbols)
Loaded symbol image file: rtwlanu.sys
Image path: rtwlanu.sys
Image name: rtwlanu.sys
Browse all global symbols functions data
Timestamp: Mon Jun 25 06:47:19 2018 (5B3065C7)
CheckSum: 007F6372
ImageSize: 0080E000
Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4
Information from resource tables:
[/CODE]

Wi-Fi sürücünü de güncellemelisin.
 
Çözüm
Yüksek bir IRQL durumunda, geçersiz bellek erişimi olmuş. Bu sadece buraya bakarak bile anlaşılabilecek bir durum.

[CODE lang="rich" highlight="7,8"]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: 0000000100000002, memory referenced
Arg2: 0000000000000002, IRQL
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: fffff80072070a80, address which referenced memory
[/CODE]

Geçersiz bellek erişimi neden olmuş?

Rich (BB code):
3: kd> k
 # Child-SP          RetAddr               Call Site
00 fffffd8c`19abe9f8 fffff800`7222c5e9     nt!KeBugCheckEx
01 fffffd8c`19abea00 fffff800`72227b34     nt!KiBugCheckDispatch+0x69
02 fffffd8c`19abeb40 fffff800`72070a80     nt!KiPageFault+0x474
03 fffffd8c`19abecd0 fffff800`8f4b5587     nt!KeWaitForSingleObject+0x200
04 fffffd8c`19abf070 ffffb909`8587c820     ViGEmBus+0x5587
05 fffffd8c`19abf078 00000000`00000000     0xffffb909`8587c820

[CODE highlight="11"]TRAP_FRAME: fffffd8c19abeb40 -- (.trap 0xfffffd8c19abeb40)
NOTE: The trap frame does not contain all registers.
Some register values may be zeroed or incorrect.
rax=ffffb90996f47090 rbx=0000000000000000 rcx=0000000100000002
rdx=00000000ffffffff rsi=0000000000000000 rdi=0000000000000000
rip=fffff80072070a80 rsp=fffffd8c19abecd0 rbp=fffffd8c19abedd0
r8=0000000000000001 r9=0000000000000000 r10=0000000000000000
r11=ffffb90997aa91c0 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0 nv up ei pl zr na po nc
nt!KeWaitForSingleObject+0x200:
fffff800`72070a80 483901 cmp qword ptr [rcx],rax ds:00000001`00000002=????????????????
Resetting default scope
[/CODE]

Aslında bir sayfa hatası, nt!KeWaitForSingleObject çağrısında meydana gelmiş olsa da buna sebep olan şey ViGEmBus.sys yani tam olarak konuda dert olarak yakındığın kontrolcülerle ilgili emulating game controllers programı sebep olmuş. Normalde bu dosyalarda Kernel-Mode üzerinden gelen sürücülerin sebep olduğu geçersiz bellek erişimlerini görüyoruz ama bu sürücü User-Mode uygulamalarından gelen istekleri işlemek ve sanal oyun denetleyicileri oluşturmak, giriş verilerini yönetmek ve sistem olaylarına yanıt vermek gibi görevleri yerine getirmek için çekirdek modunda çalışıyor.

En başta işaretlediğim IRQL durumu da önemli bir etken çünkü nt!KeWaitForSingleObject fonksiyonunun sadece APC_LEVEL altındaki durumlarda çağrılması gerekiyor.

Kod:
3: kd> !irql
Debugger saved IRQL for processor 0x3 -- 2 (DISPATCH_LEVEL)

Windows, programlama esnasında DISPATCH_LEVEL'de KeWaitForSingleObject'in çağrılmasına izin vermez. DISPATCH_LEVEL'de KeWaitForSingleObject'i çağırmaya çalışırsan tam da dosyadaki IRQL_NOT_LESS_OR_EQUAL hata koduyla mavi ekran yersin. Bunun nedeni, KeWaitForSingleObject iş parçacığının DISPATCH_LEVEL veya üzerinde izin verilmeyen bir bekleme durumuna sokulmasına neden olması.

Yani aslında ViGEmBus.sys bu fonksiyonu çağırırken "Paylaşılan kaynaklara erişmi senkronize etmesini, kendisiyle alakalı bir olay bekleme sinyali oluşturmasını ve sonucunda G/Ç isteklerini tamamlasını bekliyor." ama DISPATCH_LEVEL`de bekleme işlemlerine izin verilmez çünkü iş parçacığının bloke olmasına neden olabilir ve bu IRQL'de buna izin vermez W. Ayrıca sürücü zaten DISPATCH_LEVEL konumundayken bir G/Ç işleminin tamamlanmasını beklemeye çalışması da hatalıdır çünkü bu konumda bu durumda geçersiz oluyor.

KeWaitForSingleObject, halihazırda zaten pagefile'da olan bellek adresleri üzerinden çağrılır. Bu durumda eriştiği adresin NotValid olması beklenmedik bir şey değil..


Biliyorum gereksiz uzun oldu ama birkaç gündür uzun bir şeyler yazma isteğim vardı. Diğer dosyan ise:

Kod:
KERNEL_SECURITY_CHECK_FAILURE (139)
A kernel component has corrupted a critical data structure.  The corruption
could potentially allow a malicious user to gain control of this machine.
Arguments:
Arg1: 0000000000000003, A LIST_ENTRY has been corrupted (i.e. double remove).
Arg2: fffff10251daf030, Address of the trap frame for the exception that caused the BugCheck
Arg3: fffff10251daef88, Address of the exception record for the exception that caused the BugCheck
Arg4: 0000000000000000, Reserved

Bir sürücünün eklendiği liste yapısını bozmasıyla alakalı bir durum. Bu dosyalarda tamamen istisna ve bağlam kayıtlarına bakarak da ilerleyebiliriz zira tüm olayı açıklıyorlar.

Kod:
.exr 0xfffff10251daef88
ExceptionAddress: fffff80421c4e856 (BTHport!HCI_CallPairServers+0x000000000000019a)
   ExceptionCode: c0000409 (Security check failure or stack buffer overrun)
  ExceptionFlags: 00000001
NumberParameters: 1
   Parameter[0]: 0000000000000003
Subcode: 0x3 FAST_FAIL_CORRUPT_LIST_ENTRY

BTHport!HCI_CallPairServers fonksiyonunda sistem bir 0xc0000409 durduruma koduyla beraber bir __fastfail oluşturuyor çünkü bir _LIST_ENTRY ile ilgili bir corrupted yani bozulma tespit ediliyor. Buna BT sürücüsü sebep olmuş.

Kod:
3: kd> !error c0000409
Error code: (NTSTATUS) 0xc0000409 (3221226505) - The system detected an overrun of a stack-based buffer in this application. This overrun could potentially allow a malicious user to gain control of this application.

Fastfail hatası bize hiçbir istisna işleminin çağrılmayacağını ve sistemin hemen mavi ekran yapacağını gösteriyor.

[CODE highlight="2"]BTHport!HCI_CallPairServers+0x19a:
fffff804`21c4e856 cd29 int 29h // istisna sebebi.
fffff804`21c4e858 488b4d30 mov rcx,qword ptr [rbp+30h]
fffff804`21c4e85c 4833cc xor rcx,rsp
fffff804`21c4e85f e85c49fbff call BTHport!_security_check_cookie (fffff804`21c031c0)
fffff804`21c4e864 4881c440010000 add rsp,140h
fffff804`21c4e86b 415e pop r14
fffff804`21c4e86d 5f pop rdi
fffff804`21c4e86e 5e pop rsi
[/CODE]

Fonksiyonun yürütüldüğü sırada oluşan istisnayı gördün mü? int -29h Attığım fastfail linkine tıklarsan görmüşsündür diye tahmin ediyorum.

İnt -29h özellikle MS-DOS bağlamında oluşundan dolayı kritik bir istisna/kesmedir. Bu kesme, sıfıra bölme veya geçersiz belleğe erişim gibi kritik bir hata oluştuğunda çağrılan bir kesme çeşididir.

Kod:
3: kd> !pte 0000000000000003
                                           VA 0000000000000003
PXE at FFFF92C964B25000    PPE at FFFF92C964A00000    PDE at FFFF92C940000000    PTE at FFFF928000000000
contains 0A0000012ECBE867  contains 0000000000000000
pfn 12ecbe    ---DA--UWEV  contains 0000000000000000
not valid

Çünkü sistem geçersiz sistem belleğine erişim sağlıyor. Burda yapılacak şey BT sürücülerini gözden geçirmek olur ancak.

Eklemeyi unutmuşum,,

Kod:
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: 0000000000000010, // Geçersiz adres erişimi
Arg2: 0000000000000002, IRQL // Yüksek kesme isteği.
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: fffff8020f323660, address which referenced memory

*** WARNING: Unable to verify timestamp for rtwlanu.sys <-------------------- PageFault

[CODE highlight="9"]1: kd> lmvmrtwlanu
Browse full module list
start end module name
fffff802`60390000 fffff802`60b9e000 rtwlanu T (no symbols)
Loaded symbol image file: rtwlanu.sys
Image path: rtwlanu.sys
Image name: rtwlanu.sys
Browse all global symbols functions data
Timestamp: Mon Jun 25 06:47:19 2018 (5B3065C7)
CheckSum: 007F6372
ImageSize: 0080E000
Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4
Information from resource tables:
[/CODE]

Wİ-Fİ sürücünü de güncellemelisin.
Valla hocam helal olsun, sizin gibisini ilk kez görüyorum. Hayatımda gördüğüm en detaylı, en karmaşık ve en uzun çözüm bu. Bilginize hayran kaldım. :)