IoRequestDeviceEject 함수(wdm.h)
IoRequestDeviceEject 루틴은 PnP 관리자에게 디바이스 꺼내기 단추를 눌렀다는 것을 알립니다.
구문
void IoRequestDeviceEject(
[in] PDEVICE_OBJECT PhysicalDeviceObject
);
매개 변수
[in] PhysicalDeviceObject
디바이스의 PDO에 대한 포인터입니다.
반환 값
없음
설명
이 루틴은 미디어 배출이 아닌 디바이스 배출에 대한 요청을 보고합니다.
일반적으로 PnP 버스 드라이버는 IoRequestDeviceEject 를 호출하여 PnP 관리자에게 사용자가 자식 디바이스 중 하나에서 디바이스 배출 단추를 눌렀다는 사실을 알립니다.
이 루틴을 사용하면 PnP 관리자가 IRP 를 보내는 것 외에 배출에 대한 추가 작업을 조정할 수 있으므로 드라이버는 IRP_MN_EJECT 요청을 보내는 대신 이 루틴을 호출합니다. 예를 들어 PnP 관리자는 디바이스의 변경 내용 알림을 위해 등록된 사용자 모드 및 커널 모드 구성 요소에 알릴 수 있습니다.
PnP 관리자는 디바이스를 순서대로 종료하도록 지시합니다. PnP 관리자:
-
이 디바이스가 배출되는 영향을 받는 다른 디바이스 목록을 만듭니다.
PnP 관리자는 디바이스의 제거 관계, 배출 관계 및 버스 관계(자식 디바이스)를 쿼리합니다.
-
디바이스 및 관련 디바이스를 소프트웨어 제거할 수 있는지 여부를 결정합니다.
PnP 관리자는 디바이스 및 관련 디바이스의 드라이버에 IRP_MN_QUERY_REMOVE_DEVICE IRP를 보냅니다. 또한 PnP 관리자는 디바이스 또는 관련 디바이스에서 디바이스 변경 알림을 위해 등록된 모든 사용자 모드 및 커널 모드 구성 요소에 알림을 보냅니다. 드라이버 또는 사용자 모드 구성 요소가 쿼리 제거에 실패하면 PnP 관리자가 대화 상자를 팝업하여 사용자에게 배출이 실패했음을 알립니다.
-
소프트웨어는 디바이스 및 관련 디바이스를 제거합니다.
이전 단계가 성공하면 PnP 관리자는 등록된 드라이버 및 애플리케이션에 디바이스 및 관련 디바이스가 소프트웨어 제거 중임을 알 수 있습니다. 그런 다음 PnP 관리자는 디바이스 및 관련 디바이스의 드라이버에 IRP_MN_REMOVE_DEVICE IRP를 보냅니다. 함수 및 필터 드라이버는 디바이스 스택에서 분리되고 디바이스에 대한 디바이스 개체를 삭제합니다. 버스 드라이버는 디바이스가 물리적으로 사라졌고 버스 드라이버가 디바이스의 부모 버스에 대한 IRP_MN_QUERY_DEVICE_RELATIONS/BusRelations 에 대한 가장 최근의 응답에서 디바이스를 생략하지 않는 한 디바이스에 대한 PDO를 유지합니다.
-
버스 드라이버가 디바이스를 꺼내도록 지시합니다(가능한 경우).
PnP 관리자는 디바이스의 배출 기능에 따라 다른 단계를 수행합니다.
-
핫 배출이 지원됩니다.
디바이스에 대해 EjectSupported 기능이 설정된 경우 시스템이 실행 중일 때 디바이스를 배출할 수 있습니다( PowerSystemWorking 상태임). PnP 관리자는 디바이스의 버스 드라이버에 IRP_MN_EJECT 요청을 보냅니다. IRP 제거에 대한 응답으로 이전에 스택에서 분리된 모든 함수 및 필터 드라이버가 버스 드라이버가 IRP 배출을 처리합니다. 버스 드라이버가 IRP를 완료하면 PnP 관리자는 디바이스가 시스템에 물리적으로 없을 것으로 예상합니다.
-
핫 배출은 지원 되지 않습니다 .
이 경우 디바이스는 이동식 이지만 배출을 지원하지 않습니다. PnP 관리자는 디바이스가 존재하지 않거나 제대로 작동하지 않는 것으로 표시합니다. PnP 관리자는 사용자가 디바이스를 물리적으로 제거하고 다시 삽입할 때까지 디바이스를 다시 시작하지 않습니다. 이 경우 PnP 관리자는 IRP_MN_EJECT 보내지 않습니다.
-
핫 배출이 지원됩니다.
사용자 모드 애플리케이션은 디바이스 배출을 시작할 수 있습니다. 이 경우 드라이버가 이 루틴을 호출하지 않지만 운영 체제는 PnP 관리자를 호출하여 위에 나열된 단계를 시작합니다.
IoRequestDeviceEject의 호출자는 IRQL <= DISPATCH_LEVEL 실행되어야 합니다. PnP 관리자는 IRQL = PASSIVE_LEVEL 위에 나열된 대부분의 디바이스 배출 작업을 수행합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000부터 사용할 수 있습니다. |
대상 플랫폼 | 유니버설 |
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL(주의 섹션 참조) |