다음을 통해 공유


디바이스 오류 보고

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

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

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

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

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

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

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

버스 드라이버의 EvtDeviceD0Entry 함수가 NT_SUCCESS(상태)가 FALSE와 같은 값을 반환하는 경우 프레임워크는 버스 드라이버의 자식 디바이스와 연결된 드라이버의 EvtDeviceD0Entry 함수를 계속 호출할 수 있습니다.