버그 검사 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 3ln 디버거 명령을 인수로 사용하여 NULL이 아닌 매개 변수가 필요한 함수를 결정합니다.

매개 변수 1이 0x7 경우 !wdfkd.wdfhandleParameter 2 확장 명령을 사용하여 핸들 유형을 확인합니다.

매개 변수 1이 0xA 같으면 WDF_QUEUE_FATAL_ERROR_DATA 구조는 문제가 있는 요청 또는 큐 핸들을 나타냅니다. 또한 사용 가능한 경우 NTSTATUS(STATUS_SUCCESS 않을 경우)를 나타냅니다.