Windbg ver. 6.12.2.633 release note, we find some information how to diagnose bugcheck 9F.
These information is also helpful and provide some directions when we try to check the BSOD 9F dump file.
a) Bug Check 0x9F Update Add logic to diagnose bugcheck 0x9F minidumps using new to Windows 7 data added to the 0x9F Mini Dumps by the Kernel and Networking Teams.
Data includes:
All Kernel ExWorkerThreads that process Power IRPs.
IRPs Associated with any ExWorkerThread
IRPs Associated with PnP Completion Queue.
All Kernel Power IRPs
Device Stacks for all IRPS
NT_TRIAGE_POWER Structure
NT_TRIAGE_PNP structure
BSOD 9F information in the http://msdn.microsoft.com/en-us/library/windows/hardware/ff559329(v=vs.85).asp
The most failures that we meet is the parameter1=3 condition. Actually, we can know what device driver cause the BSOD by parameter 2 and what power action cause the BSOD by parameter 4.
Here are also some suggestion in the website.
parameter 1 parameter2 parameter3 parameter4
BSOD 9F information in the http://msdn.microsoft.com/en-us/library/windows/hardware/ff559329(v=vs.85).asp
The most failures that we meet is the parameter1=3 condition. Actually, we can know what device driver cause the BSOD by parameter 2 and what power action cause the BSOD by parameter 4.
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: 00000003, A device object has been blocking an Irp for too long a time Arg2: 857d6030, Physical Device Object of the stack Arg3: 82b5dae0, nt!TRIAGE_9F_POWER on Win7, otherwise the Functional Device Object of the stack Arg4: 85086008, The blocked IRP
0: kd> dt nt!TRIAGE_9F_POWER 82b5dae0 +0x000 Signature : 0x8000 +0x002 Revision : 1 +0x004 IrpList : 0x82b78480 _LIST_ENTRY +0x008 ThreadList : 0x82b77f28 _LIST_ENTRY +0x00c DelayedWorkQueue : 0x82b715bc _TRIAGE_EX_WORK_QUEUEThe dt (Display Type) command displays the structure. You can use various debugger commands to follow the LIST_ENTRY fields to examine the list of outstanding IRPs and the power IRP worker threads. Use the !irp command to examine the IRP that was blocked. (The address of this IRP is in Parameter 4 (arg4).)
Here are also some suggestion in the website.
Use the !poaction command to display the threads that handle the power operations and any allocated power IRPs.
To help you determine the cause of the error, consider the following questions: Can you find the blocked thread? When you examine the thread with the !thread debugger command, what does the thread consist of? Is there IO associated with the thread that is blocking it? What symbols are on the stack? When you examine the blocked power IRP, what do you notice? What is the PnP minor function code of the power IRP? What are the characteristics of the physical device object (PDO) driver (Parameter 2, arg2)? Is it is a miniport driver?
parameter 1 parameter2 parameter3 parameter4
0x3 (Windows XP and later)
|
The physical device object (PDO) of the stack
|
The functional device object (FDO) of the stack. In Windows 7, this parameter points to the nt!TRIAGE_9F_POWERstructure.
|
The blocked IRP
|
A device object has been blocking an IRP for too long a time.
|