다음을 통해 공유


디바이스 오류 보고

디바이스 오류를 보고하는 세 가지 방법이 있습니다.

  • 디바이스 개체 콜백 함수에서 반환하는 경우 드라이버는 NT_SUCCESS(상태)가 false 반환 값을 제공할 수 있습니다.

  • 드라이버는 WdfDeviceSetFailed호출할 수 있습니다.

  • 함수 드라이버가 EvtDriverDeviceAdd 콜백 루틴을 종료할 때, NT_SUCCESS(상태)가 FALSE와 같을 때 반환할 수 있는 값을 제공할 수 있습니다. 필터 설치된 드라이버가 EvtDriverDeviceAdd실패하면 운영 체제는 필터 디바이스 개체를 건너뛰고 PnP 오류를 나타내지 않습니다.

위의 각 메서드는 프레임워크에서 디바이스를 효과적으로 제거합니다. 디바이스의 드라이버가 시스템에서 다른 디바이스를 지원하지 않는 경우 I/O 관리자가 드라이버를 언로드합니다.

드라이버의 디바이스 개체 콜백 함수가 NT_SUCCESS(상태)가 FALSE 값을 반환하는 경우 프레임워크는 PnP 관리자에게 알린 다음, 버스 드라이버에 디바이스를 다시 열거하도록 요청하여 디바이스를 다시 시작하려고 시도합니다. 드라이버가 언로드된 경우 다시 로드됩니다.

드라이버가 WdfDeviceSetFailed호출하는 경우 디바이스를 다시 시작할지 여부를 결정하는 입력 인수를 제공합니다. 인수 값은 WdfDeviceFailedAttemptRestartWdfDeviceFailedNoRestart입니다.

UMDF UMDF 2.15 이전에는 UMDF 드라이버가 이 값을 WdfDeviceFailedNoRestart 설정해야 합니다. UMDF 버전 2.15부터 UMDF 드라이버는 WdfDeviceFailedAttemptRestart 설정된 FailedActionWdfDeviceSetFailed 호출하여 기본 버스 드라이버가 다시 열거하도록 요청할 수 있습니다. 자세한 내용은 WdfDeviceSetFailed를 참조하세요.

이러한 인수 값에 대한 자세한 내용은 WDF_DEVICE_FAILED_ACTION참조하세요. 드라이버의 디바이스 객체 콜백 함수가 NT_SUCCESS(상태)이 FALSE인 값을 반환하기 전에, 콜백 함수는 입력 인수로 WdfDeviceFailedNoRestart를 사용하여 WdfDeviceSetFailed를 호출함으로써 다시 시작을 방지할 수 있습니다. 그렇지 않으면 이러한 콜백 함수는 WdfDeviceSetFailed 호출할 필요가 없습니다.

짧은 기간 내에 여러 번의 연속 다시 시작 시도가 실패하는 경우(다시 시작한 드라이버가 다시 오류를 보고하기 때문에) 프레임워크는 디바이스 다시 시작 시도를 중지합니다.

버스 드라이버의 EvtDeviceD0Entry 함수가 NT_SUCCESS(상태)가 FALSE 로 평가되는 값을 반환하는 경우에도, 프레임워크는 여전히 버스 드라이버의 자식 디바이스와 연결된 드라이버의 EvtDeviceD0Entry 함수를 호출할 수 있습니다.