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 관리자:

  1. 이 디바이스가 배출되는 영향을 받는 다른 디바이스 목록을 만듭니다.

    PnP 관리자는 디바이스의 제거 관계, 배출 관계 및 버스 관계(자식 디바이스)를 쿼리합니다.

  2. 디바이스 및 관련 디바이스를 소프트웨어 제거할 수 있는지 여부를 결정합니다.

    PnP 관리자는 디바이스 및 관련 디바이스의 드라이버에 IRP_MN_QUERY_REMOVE_DEVICE IRP를 보냅니다. 또한 PnP 관리자는 디바이스 또는 관련 디바이스에서 디바이스 변경 알림을 위해 등록된 모든 사용자 모드 및 커널 모드 구성 요소에 알림을 보냅니다. 드라이버 또는 사용자 모드 구성 요소가 쿼리 제거에 실패하면 PnP 관리자가 대화 상자를 팝업하여 사용자에게 배출이 실패했음을 알립니다.

  3. 소프트웨어는 디바이스 및 관련 디바이스를 제거합니다.

    이전 단계가 성공하면 PnP 관리자는 등록된 드라이버 및 애플리케이션에 디바이스 및 관련 디바이스가 소프트웨어 제거 중임을 알 수 있습니다. 그런 다음 PnP 관리자는 디바이스 및 관련 디바이스의 드라이버에 IRP_MN_REMOVE_DEVICE IRP를 보냅니다. 함수 및 필터 드라이버는 디바이스 스택에서 분리되고 디바이스에 대한 디바이스 개체를 삭제합니다. 버스 드라이버는 디바이스가 물리적으로 사라졌고 버스 드라이버가 디바이스의 부모 버스에 대한 IRP_MN_QUERY_DEVICE_RELATIONS/BusRelations 에 대한 가장 최근의 응답에서 디바이스를 생략하지 않는 한 디바이스에 대한 PDO를 유지합니다.

  4. 버스 드라이버가 디바이스를 꺼내도록 지시합니다(가능한 경우).

    PnP 관리자는 디바이스의 배출 기능에 따라 다른 단계를 수행합니다.

    • 핫 배출이 지원됩니다.

      디바이스에 대해 EjectSupported 기능이 설정된 경우 시스템이 실행 중일 때 디바이스를 배출할 수 있습니다( PowerSystemWorking 상태임). PnP 관리자는 디바이스의 버스 드라이버에 IRP_MN_EJECT 요청을 보냅니다. IRP 제거에 대한 응답으로 이전에 스택에서 분리된 모든 함수 및 필터 드라이버가 버스 드라이버가 IRP 배출을 처리합니다. 버스 드라이버가 IRP를 완료하면 PnP 관리자는 디바이스가 시스템에 물리적으로 없을 것으로 예상합니다.

    • 핫 배출은 지원 되지 않습니다 .

      이 경우 디바이스는 이동식 이지만 배출을 지원하지 않습니다. PnP 관리자는 디바이스가 존재하지 않거나 제대로 작동하지 않는 것으로 표시합니다. PnP 관리자는 사용자가 디바이스를 물리적으로 제거하고 다시 삽입할 때까지 디바이스를 다시 시작하지 않습니다. 이 경우 PnP 관리자는 IRP_MN_EJECT 보내지 않습니다.

    디바이스의 부모 버스 드라이버는 IRP_MN_QUERY_CAPABILITIES 요청에 대한 응답으로 배출 기능을 포함하여 디바이스에 대한 기능을 설정합니다. 함수 또는 필터 드라이버는 필요에 따라 기능을 지정할 수 있습니다.
디바이스가 배출되면 해당 자식 디바이스가 시스템과 함께 시스템에서 물리적으로 제거됩니다.

사용자 모드 애플리케이션은 디바이스 배출을 시작할 수 있습니다. 이 경우 드라이버가 이 루틴을 호출하지 않지만 운영 체제는 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(주의 섹션 참조)

추가 정보

IRP_MN_EJECT

IRP_MN_QUERY_DEVICE_RELATIONS

IRP_MN_QUERY_REMOVE_DEVICE

IRP_MN_REMOVE_DEVICE