버그 검사 0x10D: WDF_VIOLATION
WDF_VIOLATION 버그 검사 값은 0x0000010D. 이는 Kernel-Mode 드라이버 프레임워크(KMDF)에서 Windows가 프레임워크 기반 드라이버에서 오류를 발견했음을 나타냅니다.
중요
이 문서는 프로그래머를 위한 것입니다. 컴퓨터를 사용하는 동안 블루 스크린 오류 코드를 받은 고객인 경우 블루 스크린 오류 문제 해결을 참조하세요.
WDF_VIOLATION 매개 변수
매개 변수 1은 버그 검사 특정 오류 코드를 나타냅니다. 매개 변수 4가 예약되어 있습니다.
매개 변수 1 | 매개 변수 2 | 매개 변수 3 | 오류 원인 |
---|---|---|---|
0x1 |
WDF_POWER_ROUTINE_TIMED_OUT_DATA 구조체에 대한 포인터 |
예약됨 |
전원 작동 중에 프레임워크 기반 드라이버의 시간이 초과되었습니다. 이는 일반적으로 디바이스 스택이 DO_POWER_PAGABLE 비트를 설정하지 않았고 드라이버가 페이징 디바이스 스택의 전원이 다운된 후 페이징 가능한 작업을 시도했음을 의미합니다. |
0x2 |
예약됨 |
예약됨 |
현재 보관 중인 잠금을 획득하려고 시도하고 있습니다. |
0x3 |
WDFREQUEST 핸들 |
두 버퍼에 남아 있는 미해결 참조 수 |
Windows 드라이버 프레임워크 검증 도구에 심각한 오류가 발생했습니다. 특히 I/O 요청이 완료되었지만 입력 버퍼, 출력 버퍼 또는 둘 다에 대한 미해결 참조가 있으므로 프레임워크 요청 개체를 삭제할 수 없습니다. |
0x4 |
예약됨 |
호출자의 주소 |
NULL이 아닌 값이 필요한 함수에 NULL 매개 변수가 전달되었습니다. |
0x5 |
전달된 핸들 값 |
예약됨 |
잘못된 형식의 프레임워크 개체 핸들이 프레임워크 개체 메서드에 전달되었습니다. |
0x6 |
아래 표를 참조하세요. |
||
0x7 |
프레임워크 개체의 핸들입니다. |
예약됨 |
드라이버가 WdfObjectDelete를 호출하는 대신 WdfObjectDereference를 호출하여 핸들을 삭제하여 프레임워크 개체를 잘못 삭제하려고 했습니다. |
0x8 |
DMA 트랜잭션 개체의 핸들입니다. |
예약됨 |
DMA 트랜잭션 개체가 올바른 상태가 아닌 동안 작업이 발생했습니다. |
0x9 |
현재 사용되지 않습니다. |
||
0xA |
WDF_QUEUE_FATAL_ERROR_DATA 구조체에 대한 포인터 |
예약됨 |
현재 큐에 있는 요청을 처리하는 동안 심각한 오류가 발생했습니다. |
0xB |
아래 표를 참조하세요. |
||
0xC |
WDFDEVICE 핸들 |
새 PnP IRP에 대한 포인터 |
드라이버가 다른 상태 변경 PnP IRP를 처리하는 동안 새로운 상태 변경 PnP IRP가 도착했습니다. |
0xD |
WDFDEVICE 핸들 |
전원 IRP에 대한 포인터 |
디바이스의 전원 정책 소유자가 요청하지 않은 전원 IRP를 받았습니다. 여러 전원 정책 소유자가 있을 수 있지만 하나만 허용됩니다. KMDF 드라이버는 WdfDeviceInitSetPowerPolicyOwnership을 호출하여 전원 정책 소유권을 변경할 수 있습니다. |
0xE |
이벤트 콜백 함수가 호출된 IRQL입니다. |
이벤트 콜백 함수가 반환된 IRQL입니다. |
이벤트 콜백 함수가 호출된 동일한 IRQL에서 반환되지 않았습니다. 콜백 함수는 IRQL을 직접 또는 간접적으로 변경했습니다(예: 스핀 잠금을 획득하여 IRQL을 DISPATCH_LEVEL 발생시키지만 스핀 잠금을 해제하지 않음). |
0xF를 지정합니다. |
이벤트 콜백 함수의 주소입니다. |
예약됨 |
이벤트 콜백 함수가 중요한 지역에 들어갔지만 반환하기 전에 중요한 지역을 벗어나지 않았습니다. |
매개 변수 1은 0x6
매개 변수 1이 0x6 경우 WDF 요청을 처리할 때 심각한 오류가 발생했습니다. 이 경우 매개 변수 2는 열거형 WDF_REQUEST_FATAL_ERROR 정의된 치명적인 오류 유형을 추가로 지정합니다.
매개 변수 2 | 매개 변수 3 | 오류 원인 |
---|---|---|
0x1 |
IRP의 주소 |
기본 IRP의 형식을 지정할 수 있는 I/O 스택 위치는 더 이상 없습니다. |
0x2 |
WDF 요청 핸들 값 |
IRP를 포함하지 않는 프레임워크 요청 개체의 형식을 지정하려고 했습니다. |
0x3 |
WDF 요청 핸들 값 |
드라이버가 I/O 대상에 이미 전송된 프레임워크 요청을 보내려고 했습니다. |
0x4 |
IRP에 대한 포인터, WDF 요청 핸들 값, IRP 주 함수 및 기록하려고 시도한 바이트 수를 포함하는 WDR_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA 구조체에 대한 포인터입니다. |
드라이버가 프레임워크 요청을 완료했지만 IRP에 지정된 것보다 더 많은 바이트를 출력 버퍼에 기록했습니다. |
매개 변수 1은 0xB
매개 변수 1이 0xB 경우 잠금을 획득하거나 해제하려는 시도가 잘못되었습니다. 이 경우 매개 변수 3은 발생한 오류를 추가로 지정합니다.
매개 변수 2 | 매개 변수 3 | 오류 원인 |
---|---|---|
핸들 값 |
0x0 |
WdfObjectAcquireLock 또는 WdfObjectReleaseLock에 전달된 핸들은 동기화 잠금을 지원하지 않는 개체를 나타냅니다. |
WDF 스핀 잠금 핸들 |
0x1 |
스핀 잠금은 스핀 잠금을 획득하지 않은 스레드에 의해 해제되고 있습니다. |
원인
원인에 대한 설명은 매개 변수 섹션의 각 코드 설명을 참조하세요.
해상도
!analyze 디버그 확장은 버그 검사 대한 정보를 표시하며 오류 코드 모듈과 같은 정보를 수집하는 데 유용할 수 있습니다.
일반적으로 WDF 덤프 파일은 이 버그 검사 발생시킨 드라이버에 대한 추가 정보를 생성합니다. 이 명령을 사용하여 로그 파일을 확인합니다.
kd> !wdfkd.wdflogdump <WDF_Driver_Name>
매개 변수 1이 0x2 같으면 호출자의 스택을 검사하여 문제의 잠금을 확인합니다.
매개 변수 1이 0x3 같으면 드라이버의 Kernel-Mode Driver Framework 오류 로그에 미해결 참조에 대한 세부 정보가 포함됩니다.
매개 변수 1이 0x4 동일한 경우 값이 Parameter 3인 ln 디버거 명령을 인수로 사용하여 NULL이 아닌 매개 변수가 필요한 함수를 결정합니다.
매개 변수 1이 0x7 경우 !wdfkd.wdfhandleParameter 2 확장 명령을 사용하여 핸들 유형을 확인합니다.
매개 변수 1이 0xA 같으면 WDF_QUEUE_FATAL_ERROR_DATA 구조는 문제가 있는 요청 또는 큐 핸들을 나타냅니다. 또한 사용 가능한 경우 NTSTATUS(STATUS_SUCCESS 않을 경우)를 나타냅니다.