다음을 통해 공유


IRP_MN_CANCEL_REMOVE_DEVICE

모든 PnP 드라이버는 이 IRP를 처리해야 합니다.

0x03

주 코드

IRP_MJ_PNP

보낸 경우

PnP 관리자는 이 IRP를 보내 디바이스를 제거하지 않을 디바이스에 대해 드라이버에 알릴 수 있습니다.

PnP 관리자는 시스템 스레드의 컨텍스트에서 IRQL PASSIVE_LEVEL 이 IRP를 보냅니다.

입력 매개 변수

None

출력 매개 변수

없음

I/O 상태 블록

드라이버는 이 IRP에 대해 Irp-IoStatus.Status>를 STATUS_SUCCESS 설정해야 합니다. 드라이버가 이 IRP에 실패하면 디바이스가 일관되지 않은 상태로 남습니다.

작업

이 IRP는 먼저 디바이스에 대한 부모 버스 드라이버에 의해 처리된 다음 디바이스 스택의 각 상위 드라이버에 의해 처리되어야 합니다.

이 IRP에 대한 응답으로 드라이버는 IRP_MN_QUERY_REMOVE_DEVICE 요청을 받기 전의 상태로 디바이스를 반환합니다.

드라이버가 이 IRP를 수신할 때 디바이스가 이미 시작된 경우 드라이버는 단순히 상태 성공으로 설정하고 IRP를 다음 드라이버에 전달합니다(또는 드라이버가 버스 드라이버인 경우 IRP를 완료). 이러한 취소 제거 IRP의 경우 함수 또는 필터 드라이버가 완료 루틴을 설정할 필요가 없습니다. 예를 들어 드라이버가 이전 IRP_MN_QUERY_REMOVE_DEVICE 실패했기 때문에 디바이스가 제거 보류 중 상태가 아닐 수 있습니다.

PnP 관리자는 IRP_MN_CANCEL_REMOVE_DEVICE 요청이 완료된 후 GUID_TARGET_DEVICE_REMOVE_CANCELLED EventCategoryTargetDeviceChange 알림 콜백을 호출합니다. 이러한 콜백은 IoRegisterPlugPlayNotification을 호출하여 디바이스에 등록되었습니다. 또한 PnP 관리자는 RegisterDeviceNotification을 호출하여 디바이스에서 알림을 위해 등록된 모든 사용자 모드 구성 요소를 호출합니다.

파일 시스템이 디바이스에 탑재된 경우 쿼리 제거 알림에 대한 응답으로 수행한 작업을 실행 취소해야 합니다.

제거 IRP 처리에 대한 자세한 내용과 모든 플러그 앤 플레이 사소한 IRP를 처리하기 위한 일반적인 규칙은 플러그 앤 플레이 참조하세요.

이 IRP 보내기

시스템에서 사용하도록 예약되었습니다. 드라이버는 이 IRP를 보내지 않아야 합니다.

요구 사항

헤더

Wdm.h(Wdm.h, Ntddk.h 또는 Ntifs.h 포함)

추가 정보

IoRegisterPlugPlayNotification

IRP_MN_QUERY_REMOVE_DEVICE