디바이스 인터페이스 변경 이벤트 처리
드라이버 또는 사용자 모드 구성 요소가 instance 디바이스 인터페이스를 사용하거나 사용하지 않도록 설정하면 PnP 관리자는 디바이스 인터페이스 클래스에서 EventCategoryDeviceInterfaceChange 이벤트에 등록된 모든 알림 콜백 루틴을 호출합니다. 알림의 이유를 나타내기 위해 PnP 관리자는 콜백 루틴의 NotificationStructure 매개 변수의 이벤트 멤버를 GUID_DEVICE_INTERFACE_ARRIVAL 또는 GUID_DEVICE_INTERFACE_REMOVAL 설정합니다.
GUID_DEVICE_INTERFACE_ARRIVAL 이벤트를 처리할 때 알림 콜백 루틴은 다음을 수행해야 합니다.
새 인터페이스를 처리하기 위해 드라이버 정의 작업을 수행합니다.
일반적으로 알림 콜백 루틴은 콜백 컨텍스트에서 디바이스를 직접 엽니다. 그러나 디바이스를 열면 후속 PnP 이벤트(예: 자식 디바이스 열거)가 발생할 수 있는 경우 콜백 루틴은 대신 작업자 루틴을 큐에 대기하여 디바이스를 열어야 합니다. 그렇지 않으면 교착 상태가 발생할 수 있습니다.
콜백 루틴은 새 인터페이스의 가용성에 대한 응답으로 자체 인터페이스를 사용하도록 설정할 수 있습니다.
GUID_DEVICE_INTERFACE_REMOVAL 이벤트를 처리할 때 알림 콜백 루틴은 다음을 수행해야 합니다.
- 인터페이스를 사용할 때 수행한 작업을 실행 취소합니다. 인터페이스 도착 이벤트에 대한 응답으로 열린 파일 핸들을 닫습니다.
EventCategoryDeviceInterfaceChange 외에도 드라이버는 EventCategoryTargetDeviceChange에 등록하고 GUID_TARGET_DEVICE_QUERY_REMOVE 이벤트 콜백에서 파일 핸들을 닫아야 합니다. 파일 핸들을 열어 두면 제거 프로세스가 거부되고 순서대로 제거가 취소됩니다.