버그 검사 0x133: DPC_WATCHDOG_VIOLATION
DPC_WATCHDOG_VIOLATION 버그 검사의 값은 0x00000133. 이 버그 검사는 DPC watchdog가 DPC(장기 실행 지연 프로시저 호출)를 하나 감지했거나 시스템이 DISPATCH_LEVEL 이상의 IRQL(인터럽트 요청 수준)에서 장기간 소요되었기 때문에 실행되었음을 나타냅니다.
매개 변수 1의 값은 단일 DPC가 시간 제한을 초과했는지 또는 시스템이 IRQL DISPATCH_LEVEL 이상에서 누적적으로 연장된 기간을 보냈는지 여부를 나타냅니다. DPC는 100 마이크로초보다 오래 실행해서는 안 되며 ISR은 25 마이크로초보다 오래 실행되지 않아야 하지만 시스템의 실제 시간 제한 값은 훨씬 더 높게 설정됩니다.
DPC에 대한 자세한 내용은 파벨 요시포비치, 마크 E. 루시노비치, 데이비드 A. 솔로몬, 알렉스 이온스쿠의 DPC 개체 및 Windows Internals 7판 1부 소개를 참조하세요.
Important
이 문서는 프로그래머를 위한 것입니다. 컴퓨터를 사용하는 동안 파란색 화면 오류 코드를 받은 고객인 경우 파란색 화면 오류 문제 해결을 참조하세요.
DPC_WATCHDOG_VIOLATION 매개 변수
매개 변수 1 은 위반 유형을 나타냅니다. 다른 매개 변수의 의미는 매개 변수 1의 값에 따라 달라집니다.
매개 변수 1입니다. | 매개 변수 2 | 매개 변수 3 | 매개 변수 4 | 오류 원인 |
---|---|---|---|---|
0 | DPC 시간 수(틱) | DPC 시간 할당(틱)입니다. | nt로 캐스팅! 이 단일 DPC 시간 제한에 대한 추가 정보가 포함된 DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK | 단일 DPC 또는 ISR이 시간 할당을 초과했습니다. 일반적으로 잘못된 구성 요소는 스택 추적을 사용하여 식별할 수 있습니다. |
1 | 감시 기간 | nt로 캐스팅! 이 단일 DPC 시간 제한에 대한 추가 정보가 포함된 DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK | 예약됨 | 시스템은 IRQL DISPATCH_LEVEL 이상에서 누적적으로 오랜 시간을 보냈습니다. 일반적으로 잘못된 구성 요소는 스택 추적을 사용하여 식별할 수 있습니다. |
원인
원인을 확인하려면 Windows 디버거, 프로그래밍 환경 및 오류 모듈의 소스 코드에 대한 액세스 권한이 필요합니다.
자세한 내용은 아래 항목을 참조하세요.
Windows 디버거를 사용한 크래시 덤프 분석(WinDbg)
!analyze Extension 및 !analyze 사용
Windows DPC에 대한 자세한 내용은 파벨 요시포비치, 마크 E. 루시노비치, 데이비드 A. 솔로몬, 알렉스 이온스쿠의 Windows Internals 7 버전 1부를 참조하세요.
예 1
!analyze 디버그 확장은 버그 검사에 대한 정보를 표시하며 근본 원인을 확인하는 데 도움이 될 수 있습니다.
매개 변수 1 = 0
이 예제에서 틱 개수 501은 DPC 시간 할당 500을 초과합니다. 이미지 이름은 버그 검사가 발생했을 때 이 코드가 실행 중임을 나타냅니다.
0: kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
DPC_WATCHDOG_VIOLATION (133)
The DPC watchdog detected a prolonged run time at an IRQL of DISPATCH_LEVEL
or above.
Arguments:
Arg1: 0000000000000000, A single DPC or ISR exceeded its time allotment. The offending
component can usually be identified with a stack trace.
Arg2: 0000000000000501, The DPC time count (in ticks).
Arg3: 0000000000000500, The DPC time allotment (in ticks).
Arg4: 0000000000000000
...
IMAGE_NAME: BthA2DP.sys
...
다음 디버거 명령을 사용하여 매개 변수가 0인 오류에 대한 자세한 정보를 수집합니다.
k(Stack Backtrace 표시) 를 사용하여 중지 코드가 발생했을 때 실행 중인 코드를 확인합니다.
u, ub, uu(Unassemble) 명령을 사용하여 실행 중인 코드의 세부 사항을 자세히 살펴볼 수 있습니다.
!pcr 확장은 특정 프로세서에서 PCR(프로세서 제어 영역)의 현재 상태를 표시합니다. 출력에서 Prcb의 주소가 됩니다.
0: kd> !pcr
KPCR for Processor 0 at fffff8035f5a4000:
Major 1 Minor 1
NtTib.ExceptionList: fffff80368e77fb0
NtTib.StackBase: fffff80368e76000
NtTib.StackLimit: 0000000000000000
NtTib.SubSystemTib: fffff8035f5a4000
NtTib.Version: 000000005f5a4180
NtTib.UserPointer: fffff8035f5a4870
NtTib.SelfTib: 000000b6d3086000
SelfPcr: 0000000000000000
Prcb: fffff8035f5a4180
Irql: 0000000000000000
IRR: 0000000000000000
IDR: 0000000000000000
InterruptMode: 0000000000000000
IDT: 0000000000000000
GDT: 0000000000000000
TSS: 0000000000000000
CurrentThread: fffff80364926a00
NextThread: ffffe40b77c12040
IdleThread: fffff80364926a00
dt(표시 형식) 명령을 사용하여 DPC 및 DPC Watchdog에 대한 추가 정보를 표시할 수 있습니다. 주소의 경우 !pcr 출력에 나열된 Prcb를 사용합니다.
dt nt!_KPRCB fffff80309974180 Dpc*
0: kd> dt nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK fffff803648fa320
+0x000 Signature : 0xaebecede
+0x004 Revision : 1
+0x006 Size : 0x10
+0x008 DpcWatchdogProfileOffset : 0x84a8
+0x00c DpcWatchdogProfileLength : 0x8200
예제 2
매개 변수 1 = 1
매개 변수 1의 경우 코드가 잘못된 코드 영역에서 중지되지 않을 수 있습니다. 이 경우 한 가지 방법은 이벤트 추적을 사용하여 정상 실행 기간을 초과하는 드라이버를 추적하려고 시도하는 것입니다.
!analyze 디버그 확장을 사용하여 버그 검사에 대한 정보를 표시합니다.
0: kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
DPC_WATCHDOG_VIOLATION (133)
The DPC watchdog detected a prolonged run time at an IRQL of DISPATCH_LEVEL
or above.
Arguments:
Arg1: 0000000000000001, The system cumulatively spent an extended period of time at
DISPATCH_LEVEL or above. The offending component can usually be
identified with a stack trace.
Arg2: 0000000000001e00, The watchdog period.
Arg3: fffff803648fa320, cast to nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK, which contains
additional information regarding the cumulative timeout
Arg4: 0000000000000000
nt의 주소를 캐스팅합니다! DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK 정보를 표시합니다.
0: kd> dt nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK fffff803648fa320
+0x000 Signature : 0xaebecede
+0x004 Revision : 1
+0x006 Size : 0x10
+0x008 DpcWatchdogProfileOffset : 0x84a8
+0x00c DpcWatchdogProfileLength : 0x8200
!dpcs 명령을 사용하여 대기하는 DPC를 표시합니다.
3: kd> !dpcs
CPU Type KDPC Function
0: Normal : 0xfffff8035f5ac290 0xfffff80363e15630 nt!PpmPerfAction
Failed to read DPC at 0xffffe40b77190dd8
0: Threaded: 0xfffff8035f5ac3d8 0xfffff80363f27d70 nt!KiDpcWatchdog
해결
특정 원인을 확인하고 코드 수정을 만들려면 오류 모듈의 소스 코드에 대한 프로그래밍 환경 및 액세스가 필요합니다.
설명
일반적으로 이 중지 코드는 특정 조건에서 할당된 시간 프레임 내에서 작업을 완료하지 않는 잘못된 드라이버 코드로 인해 발생합니다.
이 문제에 Windows 디버거를 사용할 준비가 되지 않은 경우 몇 가지 기본적인 문제 해결 기술을 사용해야 합니다.
버그 확인 메시지에서 드라이버가 식별되면 문제를 격리하려면 드라이버를 사용하지 않도록 설정합니다. 드라이버 업데이트는 제조업체에 문의하세요.
이벤트 뷰어 시스템 로그에서 버그 확인 0x133 발생시키는 디바이스 또는 드라이버를 식별하는 데 도움이 될 수 있는 추가 오류 메시지를 확인합니다.
설치된 새 하드웨어가 설치된 Windows 버전과 호환되는지 확인합니다. 예를 들어 Windows 10의 경우 Windows 10 사양에서 필요한 하드웨어에 대한 정보를 얻을 수 있습니다.
일반적인 추가 문제 해결 정보는 버그 검사 블루 스크린 데이터 분석을 참조 하세요.