꺼내기 가능 디바이스 지원
꺼내기 가능한 디바이스 는 도킹 스테이션에 삽입하고 도킹 스테이션에서 배출할 수 있는 디바이스입니다. 일반적으로 디바이스를 제거하려면 먼저 배출 가능한 디바이스의 버스 전원을 사용하지 않도록 설정해야 합니다.
디바이스를 배출할 수 있는 경우 디바이스 버스의 버스 드라이버는 디바이스의 WDF_DEVICE_PNP_CAPABILITIES 구조에서 EjectSupported 멤버를 설정해야 합니다.
버스 드라이버가 열거된 자식 디바이스 중 하나가 배출될 예정임을 확인하면 WdfPdoRequestEject 또는 WdfChildListRequestChildEject를 호출합니다. 예를 들어 버스 드라이버는 사용자가 배출 단추를 눌렀다는 것을 감지할 수 있습니다.
드라이버가 WdfChildListRequestChildEject 또는 WdfPdoRequestEject를 호출하면 PnP 관리자는 순서대로 제거 시나리오를 사용하여 디바이스가 제거되고 있음을 디바이스의 드라이버에 알릴 수 있습니다. 프레임워크가 디바이스 버스에 대한 버스 드라이버에서 EvtDeviceReleaseHardware 콜백 함수를 호출한 후 프레임워크는 버스 드라이버의 EvtDeviceEject 콜백 함수를 호출하여 디바이스를 물리적으로 꺼내는 데 필요한 모든 작업을 수행합니다.
디바이스를 꺼내면 추가 디바이스도 배출되는 경우 버스 드라이버는 배출 관계 목록을 유지할 수 있습니다. 사용자가 디바이스를 제거하면 PnP 관리자는 목록에 있는 디바이스의 드라이버에게 디바이스도 제거되고 있음을 알릴 수 있습니다. 배출 관계 목록을 유지하기 위해 버스 드라이버는 WdfPdoAddEjectionRelationsPhysicalDevice, WdfPdoRemoveEjectionRelationsPhysicalDevice 및 WdfPdoClearEjectionRelationsDevices 메서드를 사용할 수 있습니다.
도킹 스테이션에서 디바이스를 잠글 수 있는 경우 버스 드라이버는 디바이스의 WDF_DEVICE_PNP_CAPABILITIES 구조에서 LockSupported 멤버를 설정해야 합니다. 또한 버스 드라이버는 EvtDeviceSetLock 콜백 함수를 제공해야 합니다. 이 콜백 함수는 디바이스가 배출을 사용하지 않도록 잠그거나 디바이스를 잠금 해제하여 배출을 사용하도록 설정해야 합니다.