IRP_MN_REMOVE_DEVICE

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

0x02

주 코드

IRP_MJ_PNP

보낸 경우

PnP 관리자는 이 IRP를 사용하여 드라이버에 디바이스의 소프트웨어 표현(디바이스 개체 등)을 제거하도록 지시합니다. PnP 관리자는 디바이스가 순서대로 제거된 경우(예: 플러그 뽑기 또는 하드웨어 프로그램에서 사용자가 시작함), 놀랍게도(사용자가 사전 경고 없이 슬롯에서 디바이스를 끌어오기), 또는 사용자가 드라이버 업데이트를 요청할 때 이 IRP를 보냅니다.

Windows 2000 이상 시스템에서 PnP 관리자는 디바이스 스택의 드라이버 중 하나가 디바이스에 대한 IRP_MN_START_DEVICE 요청에 실패하는 경우에도 이 IRP를 보냅니다.

질서 정연한 디바이스 제거를 위해 PnP 관리자는 IRP를 제거하기 전에 IRP_MN_QUERY_REMOVE_DEVICE 보냅니다. 이 경우 제거 IRP가 도착하면 디바이스가 제거 보류 중 상태입니다. Microsoft Windows 2000 이상에서 디바이스를 깜짝 제거하려면 PnP 관리자가 IRP를 제거하기 전에 IRP_MN_SURPRISE_REMOVAL 보냅니다. 이 경우 제거 IRP가 도착하면 디바이스가 깜짝 제거 상태입니다. 드라이버는 디바이스가 시작되기 전에 IRP 제거를 받을 수도 있습니다. 이 경우 IRP가 도착하면 디바이스가 시작되지 않은 상태입니다.

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

입력 매개 변수

None

출력 매개 변수

없음

I/O 상태 블록

드라이버는 Irp-IoStatus.Status>를 STATUS_SUCCESS 설정해야 합니다. 드라이버는 이 IRP에 실패하지 않아야 합니다.

작업

이 IRP는 먼저 디바이스 스택의 맨 위에 있는 드라이버에 의해 처리된 다음 스택의 각 하위 드라이버에 의해 처리됩니다.

이 IRP에 대한 응답으로 드라이버는 디바이스 전원을 빼고, 디바이스의 소프트웨어 표현(디바이스 개체 등)을 제거하고, 디바이스에 대한 리소스를 해제하는 등의 작업을 수행합니다.

이 IRP를 처리하는 방법에 대한 자세한 내용은 IRP_MN_REMOVE_DEVICE 요청 처리를 참조하세요. 디바이스 제거 지원에 대한 일반적인 내용은 디바이스 제거를 참조하세요.

이 IRP 보내기

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

버스 드라이버가 하나 이상의 자식 디바이스(자식 PDO)가 컴퓨터에서 물리적으로 제거된 것을 감지하면 버스 드라이버는 IoInvalidateDeviceRelations 를 호출하여 PnP 관리자에게 변경 내용을 보고합니다. 그런 다음 PnP 관리자는 사라진 모든 디바이스에 대해 제거 IRP를 보냅니다.

요구 사항

헤더

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

추가 정보

IoInvalidateDeviceRelations

IoRegisterPlugPlayNotification

IRP_MN_CANCEL_REMOVE_DEVICE

IRP_MN_QUERY_REMOVE_DEVICE

IRP_MN_SURPRISE_REMOVAL