Merhaba herkese.
Uzun bir süredir bildiğiniz üzere Mavi Ekran kategorisinde sizlerin yaşadığı sorunları çözmeye çalışıyorum.
Forumda en çok karşılaştığımız hatalardan biri şüphesiz ki DRIVER_POWER_STATE_FAILURE. (0x9F)
Adından başlayarak ne olduğunu öğrenelim. "Sürücü Güç Durum Kusuru/Bozukluğu"
Aygıt sürücülerinin birbirleriyle ve ana sistem sürücüleri ile haberleşmesi için I/O istekleri tanımlanmalıdır. Bu istekler IRP yani I/O Request Packet adı verilen veri yapıları vasıtasıyla tanımlanır. IRP kullanımının avantajı küçük paketleri tek tek iletmek yerine (Buffer bellek adresi vs.) hepsini tek bir potada eriterek kalıcı veri ortamlarına iletmesidir.
Bu IRP'lerin yönetimiyle alakalı belirli fonksiyonlar vardır. Aşağıda verdiğim linki okuyarak daha ayrıntılı bilgi edinebilirsiniz.
Günümüzde kullandığımız bileşenlerin çok büyük bir çoğunluğu ACPI tabanlı PnP yani Tak ve Çalıştır yöntemini kullanır. (ACPI, Legacy PnP'nin halefidir.)
Bu konulardan bahsetmemin sebebini ilerleyen kısımlarla anlayacaksınız.
Ufak ufak bir döküm incelemesi ile başlayalım.
Buradaki Argumentları yorumlayalım.
Arg1 için belirli türler var. Bunların ne olduğunu görebilmeniz adına aşağıya link ekledim.
Arg1: İhlalin (Violation) türünü belirtir. Burada ise 0x3 söz konusu.
03 (0x3) bir aygıt objesinin, IRP'yi normalden uzun süre engellediğini belirtir.
Buraya örnek olarak koyduğum bir dökümde ise 0x4 söz konusu.
Bu da güç geçişinin (iletiminin) PnP alt sistemiyle senkronize olamadığını gösteriyor. Yani aygıtın güç iletimi yapılmasına rağmen PCIe arayüzüyle senkronize olamıyor.
Bu ise sisteme aslında cihazın var olup olmadığını sorgulatabilir. Stack textinde IoSurpriseRemoval gibi bir ifade görürseniz, sistemin bu durumla karşı karşıya olduğunu anlayabilirsiniz.
Arg2: Bir aygıt objesinin (PDO) IRP engellemesi durumu söz konusuysa bu aygıtın ne olduğunu Arg2'yi yorumlayarak öğrenebiliriz.
Arg3: Her fonksiyon, desteklediği her bir cihaz için ayrı ayrı bir çerçeve sürücü oluşturur. Oluşturulma amacı PnP aygıtlarını, güç durumlarını sisteme kaydetmektir.
Not: Arg3 sorgulaması her zaman çalışmamaktadır.
Arg4: İletilmesi engellenen IRP'yi ifade eder.
Arg2'yi yorumlayarak çözümde ilerlemeye çalışalım.
Arg2'yi !devstack komutunu kullanarak sorguladığımızda karşımıza PCI\VEN_10EC&DEV_5287&SUBSYS_85351558&REV_01\4&d21dafc&0&00EE kimliği çıktı.
Bu kimlik Realtek RTS 5287 PCIe Card Reader aygıtına işaret etti.
Arg4'ü yorumlayalım.
Yukarıda linkini ilettiğim bazı IRP fonksiyonları vardı. Burada gördüğünüz IRP_MJ_POWER(16) gücün taşındığını belirten Power IRP, IRP_MN_SET_POWER(02) ise bu güç fonksiyonunun altında çalışan bir fonksiyon. Güç durumuyla alakalı bir değişiklik olup olmadığını sorgular.
Bu dökümden çıkarabileceğimiz sonuç şu:
Realtek SD kart okuyucusunun güç durumuyla alakalı IRP'nin iletimi sekteye uğramış. Bu nedenle de hatalı bir güç durumunda kaldığından sistem hata vermiş.
Bazen Power IRP hiçbir şekilde iletilmez, güç kesintisi yaşanırsa da bu hata oluşabilir.
Örnek bir döküm:
16/0 durumu var. Intel Graphics sürücüsünün uyanması, yanıt vermesi beklenmiş. Ancak yanıt gelmemiş.
Power IRP'nin iletimi hiçbir şekilde başlamıyor ve güç kesiliyor.
Bu nedenle de sistem hataya düşüyor.
Not: Çok aşırı teknik detaya boğmak istemediğim için biraz yüzeysel yazdım. Daha ayrıntılı öğrenmek isterseniz Microsoft Learn üzerindeki makaleleri okumanız çok daha pozitif olacaktır.
Bu hatanın çözümüne yönelik ufak da olsa bir katkı sunabilmişimdir umarım.
Bir sonraki yazıda görüşmek üzere.
Uzun bir süredir bildiğiniz üzere Mavi Ekran kategorisinde sizlerin yaşadığı sorunları çözmeye çalışıyorum.
Forumda en çok karşılaştığımız hatalardan biri şüphesiz ki DRIVER_POWER_STATE_FAILURE. (0x9F)
Adından başlayarak ne olduğunu öğrenelim. "Sürücü Güç Durum Kusuru/Bozukluğu"
Aygıt sürücülerinin birbirleriyle ve ana sistem sürücüleri ile haberleşmesi için I/O istekleri tanımlanmalıdır. Bu istekler IRP yani I/O Request Packet adı verilen veri yapıları vasıtasıyla tanımlanır. IRP kullanımının avantajı küçük paketleri tek tek iletmek yerine (Buffer bellek adresi vs.) hepsini tek bir potada eriterek kalıcı veri ortamlarına iletmesidir.
Bu IRP'lerin yönetimiyle alakalı belirli fonksiyonlar vardır. Aşağıda verdiğim linki okuyarak daha ayrıntılı bilgi edinebilirsiniz.
IRP Major Function Codes - Windows drivers
Provides information about IRP major function codes.
learn.microsoft.com
Günümüzde kullandığımız bileşenlerin çok büyük bir çoğunluğu ACPI tabanlı PnP yani Tak ve Çalıştır yöntemini kullanır. (ACPI, Legacy PnP'nin halefidir.)
Bu konulardan bahsetmemin sebebini ilerleyen kısımlarla anlayacaksınız.
Ufak ufak bir döküm incelemesi ile başlayalım.
Buradaki Argumentları yorumlayalım.
Arg1 için belirli türler var. Bunların ne olduğunu görebilmeniz adına aşağıya link ekledim.
Bug Check 0x9F DRIVER_POWER_STATE_FAILURE - Windows drivers
This bug check has a value of 0x0000009F. This bug check indicates that the driver is in an inconsistent or invalid power state.
learn.microsoft.com
Arg1: İhlalin (Violation) türünü belirtir. Burada ise 0x3 söz konusu.
03 (0x3) bir aygıt objesinin, IRP'yi normalden uzun süre engellediğini belirtir.
Kod:
DRIVER_POWER_STATE_FAILURE (9f)
A driver has failed to complete a power IRP within a specific time.
Arguments:
Arg1: 0000000000000004, The power transition timed out waiting to synchronize with the Pnp subsystem.
Arg2: 000000000000012c, Timeout in seconds.
Arg3: ffffc00603862040, The thread currently holding on to the Pnp lock.
Arg4: ffff9a034a029880, nt!TRIAGE_9F_PNP on Win7 and higher
Buraya örnek olarak koyduğum bir dökümde ise 0x4 söz konusu.
Bu da güç geçişinin (iletiminin) PnP alt sistemiyle senkronize olamadığını gösteriyor. Yani aygıtın güç iletimi yapılmasına rağmen PCIe arayüzüyle senkronize olamıyor.
Bu ise sisteme aslında cihazın var olup olmadığını sorgulatabilir. Stack textinde IoSurpriseRemoval gibi bir ifade görürseniz, sistemin bu durumla karşı karşıya olduğunu anlayabilirsiniz.
Arg2: Bir aygıt objesinin (PDO) IRP engellemesi durumu söz konusuysa bu aygıtın ne olduğunu Arg2'yi yorumlayarak öğrenebiliriz.
Arg3: Her fonksiyon, desteklediği her bir cihaz için ayrı ayrı bir çerçeve sürücü oluşturur. Oluşturulma amacı PnP aygıtlarını, güç durumlarını sisteme kaydetmektir.
Not: Arg3 sorgulaması her zaman çalışmamaktadır.
Arg4: İletilmesi engellenen IRP'yi ifade eder.
Arg2'yi yorumlayarak çözümde ilerlemeye çalışalım.
Arg2'yi !devstack komutunu kullanarak sorguladığımızda karşımıza PCI\VEN_10EC&DEV_5287&SUBSYS_85351558&REV_01\4&d21dafc&0&00EE kimliği çıktı.
Bu kimlik Realtek RTS 5287 PCIe Card Reader aygıtına işaret etti.
Arg4'ü yorumlayalım.
Yukarıda linkini ilettiğim bazı IRP fonksiyonları vardı. Burada gördüğünüz IRP_MJ_POWER(16) gücün taşındığını belirten Power IRP, IRP_MN_SET_POWER(02) ise bu güç fonksiyonunun altında çalışan bir fonksiyon. Güç durumuyla alakalı bir değişiklik olup olmadığını sorgular.
Bu dökümden çıkarabileceğimiz sonuç şu:
Realtek SD kart okuyucusunun güç durumuyla alakalı IRP'nin iletimi sekteye uğramış. Bu nedenle de hatalı bir güç durumunda kaldığından sistem hata vermiş.
Bazen Power IRP hiçbir şekilde iletilmez, güç kesintisi yaşanırsa da bu hata oluşabilir.
Örnek bir döküm:
16/0 durumu var. Intel Graphics sürücüsünün uyanması, yanıt vermesi beklenmiş. Ancak yanıt gelmemiş.
Power IRP'nin iletimi hiçbir şekilde başlamıyor ve güç kesiliyor.
Bu nedenle de sistem hataya düşüyor.
Not: Çok aşırı teknik detaya boğmak istemediğim için biraz yüzeysel yazdım. Daha ayrıntılı öğrenmek isterseniz Microsoft Learn üzerindeki makaleleri okumanız çok daha pozitif olacaktır.
I/O Request Packets - Windows drivers
Learn about I/O request packets (IRPs) and their role in communication between operating system components and device drivers.
learn.microsoft.com
Bu hatanın çözümüne yönelik ufak da olsa bir katkı sunabilmişimdir umarım.
Bir sonraki yazıda görüşmek üzere.