0x9F Pemeriksaan Bug: DRIVER_POWER_STATE_FAILURE
Pemeriksaan bug DRIVER_POWER_STATE_FAILURE memiliki nilai 0x0000009F. Pemeriksaan bug ini menunjukkan bahwa driver dalam status daya yang tidak konsisten atau tidak valid.
Penting
Artikel ini untuk programmer. Jika Anda adalah pelanggan yang telah menerima kode kesalahan layar biru saat menggunakan komputer Anda, lihat Memecahkan masalah kesalahan layar biru.
Parameter DRIVER_POWER_STATE_FAILURE
Parameter 1 menunjukkan jenis pelanggaran.
Parameter 1 | Parameter 2 | Parameter 3 | Parameter 4 | Penyebab |
---|---|---|---|---|
0x1 | Objek perangkat | Telah dipesan | Telah dipesan | Objek perangkat yang sedang dibebaskan masih memiliki permintaan daya yang luar biasa yang belum selesai. |
0x2 | Objek perangkat perangkat target, jika tersedia | Objek perangkat | Objek pengandar, jika tersedia | Objek perangkat menyelesaikan paket permintaan I/O (IRP) untuk permintaan status daya sistem, tetapi tidak memanggil PoStartNextPowerIrp. |
0x3 | Objek perangkat fisik (PDO) dari tumpukan | nt!_TRIAGE_9F_POWER. | IRP yang diblokir | Objek perangkat telah memblokir IRP terlalu lama. |
0x4 | Nilai waktu habis, dalam detik. | Utas saat ini memegang kunci Plug-and-Play (PnP). | Nt! TRIAGE_9F_PNP. | Waktu transisi status daya habis menunggu untuk disinkronkan dengan subsistem PnP. |
0x5 | Objek Perangkat Fisik tumpukan | Objek POP_FX_DEVICE | Dicadangkan - 0 | Perangkat gagal menyelesaikan transisi daya yang diarahkan dalam jumlah waktu yang diperlukan. |
0x6 | Objek POP_FX_DEVICE | Menunjukkan apakah ini adalah Penyelesaian Power Down(1) atau Power Up(0) yang Diarahkan. | Dicadangkan - 0 | Perangkat tidak berhasil menyelesaikan panggilan balik Transisi Daya Terarahnya. |
0x500 | Dicadangkan | Objek perangkat perangkat target, jika tersedia | Objek perangkat | Objek perangkat menyelesaikan IRP untuk permintaan status daya sistem, tetapi tidak memanggil PoStartNextPowerIrp. |
Penyebab
Untuk deskripsi kemungkinan penyebabnya, lihat deskripsi setiap kode di bagian Parameter. Penyebab umumnya meliputi:
- Objek perangkat dibebaskan dengan permintaan daya yang belum selesai
- Waktu transisi status daya habis
- Objek perangkat memblokir IRP
- Menyelesaikan IRP tetapi tidak memanggil PoStartNextPowerIrp
Resolusi
Untuk menentukan penyebab spesifik dan untuk membuat perbaikan kode, pengalaman pemrograman dan akses ke kode sumber modul yang rusak diperlukan.
Penelusuran kesalahan pemeriksaan bug 0x9F ketika Parameter 1 sama dengan 0x3
- Dalam debugger kernel, gunakan perintah !analyze -v untuk melakukan analisis pemeriksaan bug awal. Analisis verbose menampilkan alamat nt! TRIAGE_9F_POWER struktur, yang ada di Arg3.
kd>!analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
DRIVER_POWER_STATE_FAILURE (9f)
A driver has failed to complete a power IRP within a specific time.
Arguments:
Arg1: 0000000000000003, A device object has been blocking an Irp for too long a time
Arg2: fffffa8007b13440, Physical Device Object of the stack
Arg3: fffff8000386c3d8, nt!_TRIAGE_9F_POWER on Win7 and higher, otherwise the Functional Device Object of the stack
Arg4: fffffa800ab61bd0, The blocked IRP
Jika driver yang bertanggung jawab atas kesalahan dapat diidentifikasi, namanya dicetak di layar biru dan disimpan dalam memori di lokasi (PUNICODE_STRING) KiBugCheckDriver. Anda dapat menggunakan dx (ekspresi model objek debugger tampilan), perintah debugger, untuk menampilkan ini: dx KiBugCheckDriver
.
Nt! TRIAGE_9F_POWER struktur menyediakan informasi pemeriksaan bug tambahan yang mungkin membantu Anda menentukan penyebab pemeriksaan bug ini. Struktur dapat menyediakan daftar semua runtime integrasi daya yang luar biasa, daftar semua utas pekerja IRP daya, dan penunjuk ke antrean pekerja sistem yang tertunda.
- Gunakan perintah dt (Jenis Tampilan) dan tentukan nt! TRIAGE_9F_POWER struktur menggunakan alamat dari Arg3.
0: kd> dt nt!_TRIAGE_9F_POWER fffff8000386c3d8
+0x000 Signature : 0x8000
+0x002 Revision : 1
+0x008 IrpList : 0xfffff800`01c78bd0 _LIST_ENTRY [ 0xfffffa80`09f43620 - 0xfffffa80`0ad00170 ]
+0x010 ThreadList : 0xfffff800`01c78520 _LIST_ENTRY [ 0xfffff880`009cdb98 - 0xfffff880`181f2b98 ]
+0x018 DelayedWorkQueue : 0xfffff800`01c6d2d8 _TRIAGE_EX_WORK_QUEUE
Perintah dt (Jenis Tampilan) menampilkan struktur. Anda dapat menggunakan berbagai perintah debugger untuk mengikuti bidang LIST_ENTRY untuk memeriksa daftar IRP yang luar biasa dan utas pekerja IRP daya.
- Gunakan perintah !irp untuk memeriksa IRP yang diblokir. Alamat IRP ini ada di Arg4.
0: kd> !irp fffffa800ab61bd0
Irp is active with 7 stacks 6 is current (= 0xfffffa800ab61e08)
No Mdl: No System Buffer: Thread 00000000: Irp stack trace.
cmd flg cl Device File Completion-Context
[N/A(0), N/A(0)]
0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[N/A(0), N/A(0)]
0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[N/A(0), N/A(0)]
0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[N/A(0), N/A(0)]
0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[N/A(0), N/A(0)]
0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
>[IRP_MJ_POWER(16), IRP_MN_SET_POWER(2)]
0 e1 fffffa800783f060 00000000 00000000-00000000 pending
\Driver\HidUsb
Args: 00016600 00000001 00000004 00000006
[N/A(0), N/A(0)]
0 0 00000000 00000000 00000000-fffffa800ad00170
Args: 00000000 00000000 00000000 00000000
- Gunakan perintah !devstack dengan alamat PDO di Arg2, untuk menampilkan informasi yang terkait dengan driver yang rusak.
0: kd> !devstack fffffa8007b13440
!DevObj !DrvObj !DevExt ObjectName
fffffa800783f060 \Driver\HidUsb fffffa800783f1b0 InfoMask field not found for _OBJECT_HEADER at fffffa800783f030
> fffffa8007b13440 \Driver\usbhub fffffa8007b13590 Cannot read info offset from nt!ObpInfoMaskToOffset
!DevNode fffffa8007ac8a00 :
DeviceInst is "USB\VID_04D8&PID_0033\5&46fa7b7&0&1"
ServiceName is "HidUsb"
- Gunakan perintah !poaction untuk menampilkan utas yang menangani operasi daya dan runtime integrasi daya yang dialokasikan.
3: kd> !poaction
PopAction: fffff801332f3fe0
State..........: 0 - Idle
Updates........: 0
Action.........: None
Lightest State.: Unspecified
Flags..........: 10000003 QueryApps|UIAllowed
Irp minor......: ??
System State...: Unspecified
Hiber Context..: 0000000000000000
Allocated power irps (PopIrpList - fffff801332f44f0)
IRP: ffffe0001d53d8f0 (wait-wake/S0), PDO: ffffe00013cae060
IRP: ffffe0001049a5d0 (wait-wake/S0), PDO: ffffe00012d42050
IRP: ffffe00013d07420 (set/D3,), PDO: ffffe00012daf840, CURRENT: ffffe00012dd5040
IRP: ffffe0001e5ac5d0 (wait-wake/S0), PDO: ffffe00013d33060
IRP: ffffe0001ed3e420 (wait-wake/S0), PDO: ffffe00013c96060
IRP: ffffe000195fe010 (wait-wake/S0), PDO: ffffe00012d32050
Irp worker threads (PopIrpThreadList - fffff801332f3100)
THREAD: ffffe0000ef5d040 (static)
THREAD: ffffe0000ef5e040 (static), IRP: ffffe00013d07420, DEVICE: ffffe00012dd5040
PopAction: fffff801332f3fe0
State..........: 0 - Idle
Updates........: 0
Action.........: None
Lightest State.: Unspecified
Flags..........: 10000003 QueryApps|UIAllowed
Irp minor......: ??
System State...: Unspecified
Hiber Context..: 0000000000000000
Allocated power irps (PopIrpList - fffff801332f44f0)
IRP: ffffe0001d53d8f0 (wait-wake/S0), PDO: ffffe00013cae060
IRP: ffffe0001049a5d0 (wait-wake/S0), PDO: ffffe00012d42050
IRP: ffffe00013d07420 (set/D3,), PDO: ffffe00012daf840, CURRENT: ffffe00012dd5040
IRP: ffffe0001e5ac5d0 (wait-wake/S0), PDO: ffffe00013d33060
IRP: ffffe0001ed3e420 (wait-wake/S0), PDO: ffffe00013c96060
IRP: ffffe000195fe010 (wait-wake/S0), PDO: ffffe00012d32050
Irp worker threads (PopIrpThreadList - fffff801332f3100)
THREAD: ffffe0000ef5d040 (static)
THREAD: ffffe0000ef5e040 (static), IRP: ffffe00013d07420, DEVICE: ffffe00012dd5040
Jika Anda bekerja dengan driver KMDF, gunakan Windows Driver Framework Extensions (!wdfkd) untuk mengumpulkan informasi tambahan.
Gunakan !wdfkd.wdflogdump<nama> driver Anda, untuk melihat apakah KMDF menunggu Anda untuk ACK permintaan yang tertunda.
Gunakan !wdfkd.wdfdevicequeues<WDFDEVICE> Anda untuk memeriksa semua permintaan yang luar biasa dan statusnya.
Gunakan ekstensi !stacks untuk memeriksa status setiap utas dan cari utas yang mungkin menahan transisi status daya.
Untuk membantu Anda menentukan penyebab kesalahan, pertimbangkan pertanyaan berikut:
- Apa karakteristik driver objek perangkat fisik (PDO) (Arg2)?
- Dapatkah Anda menemukan utas yang diblokir? Ketika Anda memeriksa utas dengan perintah debugger !thread , apa yang terdiri dari utas?
- Apakah ada IO yang terkait dengan utas yang memblokirnya? Simbol apa yang ada di tumpukan?
- Ketika Anda memeriksa IRP daya yang diblokir, apa yang Anda perhatikan?
- Apa kode fungsi minor PnP dari power IRP?
Penelusuran kesalahan pemeriksaan bug 0x9F saat Parameter 1 sama dengan 0x4
- Dalam debugger kernel, gunakan perintah !analyze -v untuk melakukan analisis pemeriksaan bug awal. Analisis verbose menampilkan alamat nt! TRIAGE_9F_PNP struktur, yang ada di Parameter 4 (arg4).
kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
DRIVER_POWER_STATE_FAILURE (9f)
A driver has failed to complete a power IRP within a specific time (usually 10 minutes).
Arguments:
Arg1: 00000004, The power transition timed out waiting to synchronize with the Pnp
subsystem.
Arg2: 00000258, Timeout in seconds.
Arg3: 84e01a70, The thread currently holding on to the Pnp lock.
Arg4: 82931b24, nt!TRIAGE_9F_PNP on Win7
Nt! TRIAGE_9F_PNP struktur menyediakan informasi pemeriksaan bug tambahan yang mungkin membantu Anda menentukan penyebab kesalahan. Nt! TRIAGE_9F_PNP struktur menyediakan pointer ke struktur yang berisi daftar IRP PnP yang dikirim (tetapi tidak selesai) dan menyediakan pointer ke antrean pekerja sistem yang tertunda.
- Gunakan perintah dt (Jenis Tampilan) dan tentukan nt! TRIAGE_9F_PNP struktur dan alamat yang Anda temukan di Arg4.
kd> dt nt!TRIAGE_9F_PNP 82931b24
+0x000 Signature : 0x8001
+0x002 Revision : 1
+0x004 CompletionQueue : 0x82970e20 _TRIAGE_PNP_DEVICE_COMPLETION_QUEUE
+0x008 DelayedWorkQueue : 0x829455bc _TRIAGE_EX_WORK_QUEUE
Perintah dt (Jenis Tampilan) menampilkan struktur. Anda dapat menggunakan perintah debugger untuk mengikuti bidang LIST_ENTRY untuk memeriksa daftar IRP PnP yang luar biasa.
Untuk membantu Anda menentukan penyebab kesalahan, pertimbangkan pertanyaan berikut:
Apakah ada IRP yang terkait dengan utas?
Apakah ada IO dalam CompletionQueue?
Simbol apa yang ada di tumpukan?
Lihat teknik tambahan yang dijelaskan di atas di bawah parameter 0x3.
Keterangan
Jika Anda tidak dilengkapi untuk men-debug masalah ini menggunakan teknik yang dijelaskan di atas, Anda dapat menggunakan beberapa teknik pemecahan masalah dasar.
Jika driver atau layanan sistem baru perangkat telah ditambahkan baru-baru ini, coba hapus atau perbarui. Cobalah untuk menentukan apa yang berubah dalam sistem yang menyebabkan kode pemeriksaan bug baru muncul.
Lihat di Manajer Perangkat untuk melihat apakah ada perangkat yang ditandai dengan tanda seru (!). Tinjau log peristiwa yang ditampilkan di properti driver untuk driver yang rusak. Cobalah memperbarui driver terkait.
Periksa Pemantau Peristiwa Masuk Sistem untuk pesan kesalahan tambahan yang mungkin membantu menentukan perangkat atau driver yang menyebabkan kesalahan. Untuk informasi selengkapnya, lihat Membuka Pemantau Peristiwa. Cari kesalahan kritis dalam log sistem yang terjadi di kurun waktu yang sama dengan layar biru.
Untuk mencoba dan mengisolasi penyebabnya, nonaktifkan penghematan daya secara sementara menggunakan panel kontrol, opsi daya. Beberapa masalah driver terkait dengan berbagai status hibernasi sistem dan penangguhan dan dimulainya kembali daya.
Jika Anda baru saja menambahkan perangkat keras ke sistem, coba hapus atau menggantinya. Atau periksa dengan produsen untuk melihat apakah ada patch yang tersedia.
Anda dapat mencoba menjalankan diagnostik perangkat keras yang disediakan oleh produsen sistem.
Tanyakan kepada produsen untuk melihat apakah sistem ACPI/BIOS yang diperbarui atau firmware lainnya tersedia.
Lihat juga
Analisis crash dump menggunakan debugger Windows (WinDbg)
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk