버그 검사 0x9F: DRIVER_POWER_STATE_FAILURE

DRIVER_POWER_STATE_FAILURE 버그 검사 값은 0x0000009F. 이 버그 검사 드라이버가 일관되지 않거나 잘못된 전원 상태에 있음을 나타냅니다.

중요

이 문서는 프로그래머를 위한 것입니다. 컴퓨터를 사용하는 동안 블루 스크린 오류 코드를 받은 고객인 경우 블루 스크린 오류 문제 해결을 참조하세요.

DRIVER_POWER_STATE_FAILURE 매개 변수

매개 변수 1은 위반 유형을 나타냅니다.

매개 변수 1 매개 변수 2 매개 변수 3 매개 변수 4 원인
0x1 디바이스 개체 예약됨 예약됨 해제되는 디바이스 개체에는 아직 완료되지 않은 미해결 전원 요청이 있습니다.
0x2 대상 디바이스의 디바이스 개체(사용 가능한 경우) 디바이스 개체 드라이버 개체(사용 가능한 경우) 디바이스 개체가 시스템 전원 상태 요청에 대한 IRP(I/O 요청 패킷)를 완료했지만 PoStartNextPowerIrp를 호출하지 않았습니다.
0x3 스택의 PDO(물리적 디바이스 개체) nt!_TRIAGE_9F_POWER. 차단된 IRP 디바이스 개체가 너무 오랫동안 IRP를 차단하고 있습니다.
0x4 제한 시간 값(초)입니다. 현재 PnP(플러그 앤 플레이) 잠금을 유지하는 스레드입니다. Nt! TRIAGE_9F_PNP. PnP 하위 시스템과의 동기화를 기다리는 동안 전원 상태 전환 시간이 초과되었습니다.
0x5 스택의 물리적 디바이스 개체 POP_FX_DEVICE 개체 예약됨 - 0 디바이스가 필요한 시간 내에 직접 전원 전환을 완료하지 못했습니다.
0x6 POP_FX_DEVICE 개체 Directed Power Down(1) 또는 Power Up(0) 완료인지 여부를 나타냅니다. 예약됨 - 0 디바이스가 Directed Power Transition 콜백을 성공적으로 완료하지 못했습니다.
0x500 예약됨 대상 디바이스의 디바이스 개체(사용 가능한 경우) 디바이스 개체 디바이스 개체가 시스템 전원 상태 요청에 대한 IRP를 완료했지만 PoStartNextPowerIrp를 호출하지 않았습니다.

원인

가능한 원인에 대한 설명은 매개 변수 섹션의 각 코드에 대한 설명을 참조하세요. 일반적인 원인은 다음과 같습니다.

  • 미해결 완료되지 않은 전원 요청으로 해제된 디바이스 개체
  • 전원 상태 전환 시간이 초과됨
  • IRP를 차단하는 디바이스 개체
  • IRP를 완료했지만 PoStartNextPowerIrp를 호출하지 않았습니다.

해상도

특정 원인을 확인하고 코드 수정을 만들려면 프로그래밍 환경 및 오류 모듈의 소스 코드에 대한 액세스가 필요합니다.

매개 변수 1이 0x3 경우 디버깅 버그 검사 0x9F

  • 커널 디버거에서 !analyze -v 명령을 사용하여 초기 버그 검사 분석을 수행합니다. 자세한 분석에서는 nt! Arg3 에 있는 TRIAGE_9F_POWER 구조체입니다.
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

오류를 담당하는 드라이버를 식별할 수 있는 경우 해당 이름은 파란색 화면에 인쇄되고 위치(PUNICODE_STRING) KiBugCheckDriver의 메모리에 저장됩니다. 디버거 명령인 dx (디버거 개체 모델 식 표시)를 사용하여 를 dx KiBugCheckDriver표시할 수 있습니다.

nt! TRIAGE_9F_POWER 구조는 이 버그 검사 원인을 확인하는 데 도움이 될 수 있는 추가 버그 검사 정보를 제공합니다. 구조체는 모든 미해결 전원 IRP 목록, 모든 전원 IRP 작업자 스레드 목록 및 지연된 시스템 작업자 큐에 대한 포인터를 제공할 수 있습니다.

  • dt(표시 유형) 명령을 사용하고 nt! Arg3의 주소를 사용하여 구조체를 TRIAGE_9F_POWER.
    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

dt(표시 형식) 명령은 구조를 표시합니다. 다양한 디버거 명령을 사용하여 LIST_ENTRY 필드를 따라 미해결 IRP 및 전원 IRP 작업자 스레드 목록을 검사할 수 있습니다.

  • !irp 명령을 사용하여 차단된 IRP를 검사합니다. 이 IRP의 주소는 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
  • Arg2의 PDO 주소와 함께 !devstack 명령을 사용하여 오류 드라이버와 관련된 정보를 표시합니다.
    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"
  • !poaction 명령을 사용하여 전원 작업 및 할당된 전원 IRP를 처리하는 스레드를 표시합니다.
    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
  • KMDF 드라이버로 작업하는 경우 Windows 드라이버 프레임워크 확장 (!wdfkd)을 사용하여 추가 정보를 수집합니다.

    !wdfkd.wdflogdump<드라이버 이름을> 사용하여 KMDF가 보류 중인 요청을 ACK할 때까지 대기하고 있는지 확인합니다.

    !wdfkd.wdfdevicequeues<WDFDEVICE>를 사용하여 모든 미해결 요청과 해당 요청의 상태를 검사합니다.

  • !stacks 확장을 사용하여 모든 스레드의 상태를 검사하고 전원 상태 전환을 보류할 수 있는 스레드를 찾습니다.

  • 오류의 원인을 파악하는 데 도움이 되도록 다음 질문을 고려하세요.

    • PDO(물리적 디바이스 개체) 드라이버(Arg2)의 특징은 무엇인가요?
    • 차단된 스레드를 찾을 수 있나요? !thread 디버거 명령을 사용하여 스레드를 검사할 때 스레드는 무엇으로 구성되나요?
    • 이를 차단하는 스레드와 연결된 IO가 있나요? 스택에 있는 기호는 무엇인가요?
    • 차단된 전원 IRP를 검사할 때 어떤 것을 알 수 있나요?
    • 전원 IRP의 PnP 부 함수 코드란?

매개 변수 1이 0x4 경우 디버깅 버그 검사 0x9F

  • 커널 디버거에서 !analyze -v 명령을 사용하여 초기 버그 검사 분석을 수행합니다. 자세한 분석에서는 nt! 매개 변수 4(arg4)에 있는 TRIAGE_9F_PNP 구조체입니다.
    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 구조는 오류의 원인을 확인하는 데 도움이 될 수 있는 추가 버그 검사 정보를 제공합니다. nt! TRIAGE_9F_PNP 구조체는 디스패치된(완료되지 않음) PnP IRP 목록을 포함하고 지연된 시스템 작업자 큐에 대한 포인터를 제공하는 구조체에 대한 포인터를 제공합니다.

  • dt(표시 유형) 명령을 사용하고 nt! TRIAGE_9F_PNP 구조체 및 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

dt(표시 형식) 명령은 구조를 표시합니다. 디버거 명령을 사용하여 LIST_ENTRY 필드를 따라 미해결 PnP IRP 목록을 검사할 수 있습니다.

오류의 원인을 파악하는 데 도움이 되도록 다음 질문을 고려하세요.

  • 스레드와 연결된 IRP가 있나요?

  • CompletionQueue에 IO가 있나요?

  • 스택에 있는 기호는 무엇인가요?

  • 매개 변수 0x3 위에서 설명한 추가 기술을 참조하세요.

설명

위에서 설명한 기술을 사용하여 이 문제를 디버그할 준비가 되지 않은 경우 몇 가지 기본 문제 해결 기술을 사용할 수 있습니다.

  • 최근에 새 디바이스 드라이버 또는 시스템 서비스가 추가된 경우 제거하거나 업데이트해 보세요. 시스템에서 새 버그 검사 코드가 표시되도록 변경된 내용을 확인합니다.

  • 장치 관리자 확인하여 느낌표(!)로 표시된 디바이스가 있는지 확인합니다. 드라이버 속성에 표시되는 이벤트 로그에서 오류가 있는 드라이버를 검토합니다. 관련 드라이버를 업데이트해 보세요.

  • 시스템 로그인 이벤트 뷰어 오류를 일으키는 디바이스 또는 드라이버를 정확히 찾아내는 데 도움이 될 수 있는 추가 오류 메시지를 확인합니다. 자세한 내용은 이벤트 뷰어 열기를 참조하세요. 블루 스크린과 같은 시간 범위에서 발생한 시스템 로그에서 치명적인 오류를 찾습니다.

  • 원인을 격리하려면 제어판, 전원 옵션을 사용하여 일시적으로 절전 모드를 사용하지 않도록 설정합니다. 일부 드라이버 문제는 시스템 최대 절전 모드 및 전원 일시 중단 및 다시 시작의 다양한 상태와 관련이 있습니다.

  • 최근에 시스템에 하드웨어를 추가했다면 제거하거나 교체해 보세요. 또는 사용 가능한 패치가 있는지 제조업체에 문의합니다.

  • 시스템 제조업체에서 제공한 하드웨어 진단 프로그램을 실행할 수 있습니다.

  • 업데이트된 시스템 ACPI/BIOS 또는 기타 펌웨어를 사용할 수 있는지 제조업체에 문의하세요.

참고 항목

Windows 디버거를 사용한 크래시 덤프 분석(WinDbg)

WinDbg를 사용하여 Kernel-Mode 덤프 파일 분석

오류 검사 코드 참조