스틸 이미지 디바이스 이벤트

스틸 이미지 디바이스 이벤트는 해당 소프트웨어가 이러한 알림을 요청한 경우 상위 수준 소프트웨어에 대해 알림을 받아야 하는 디바이스 수준 발생입니다. 사용자 모드 미니드라이버에서는 대부분의 디바이스 이벤트를 정의하고 이벤트가 발생할 때 알림을 전달합니다. 일반적으로 이벤트는 일부 작업을 수행하려면 상위 수준 소프트웨어가 필요함을 나타냅니다.

일반적인 스틸 이미지 디바이스 이벤트는 누르는 단추를 감지하는 것입니다. 예를 들어 스캐너는 사용자에게 텍스트 및 사진 스캔을 시작하기 위한 별도의 단추를 제공할 수 있습니다. 단추를 누르면 이미지를 표시하거나 저장하기 위해 상위 수준 소프트웨어가 필요합니다. 스틸 이미지 이벤트 모니터는 이벤트가 발생했음을 감지하고( IStiDevice COM 인터페이스 사용) 이전에 등록된 스틸 이미지 애플리케이션을 호출할 수 있습니다( IStillImage COM 인터페이스 사용).

스틸 이미지 디바이스 이벤트는 GUID로 표시됩니다. sti.h에서 Microsoft는 다음 스틸 이미지 디바이스 이벤트를 정의합니다.

이벤트 GUID 목적
GUID_DeviceArrivedLaunch 스틸 이미지 디바이스가 시스템에 방금 연결되었습니다.
GUID_ScanImage 이미지를 컴퓨터로 스캔해야 합니다.
GUID_ScanFaxImage 이미지를 컴퓨터로 스캔한 다음 팩스로 보내야 합니다.
GUID_ScanPrintImage 이미지를 컴퓨터로 스캔한 다음 인쇄해야 합니다.
GUID_STIUserDefined1 사용자가 정의할 수 있는 단추를 눌렀습니다.
GUID_STIUserDefined2 사용자가 정의할 수 있는 단추를 눌렀습니다.
GUID_STIUserDefined3 사용자가 정의할 수 있는 단추를 눌렀습니다.

사용자 모드 미니드라이버 개발자는 가능하면 이러한 미리 정의된 이벤트 GUID를 사용해야 합니다. 이러한 GUID가 적절하지 않은 경우 디바이스별 이벤트에 대한 GUID를 정의해야 합니다.

스틸 이미지 디바이스 이벤트를 정의하려면 다음을 수행해야 합니다.

  • 각 이벤트에 대한 GUID를 지정합니다.

  • 사용자 모드 드라이버의 INF 파일에 각 GUID를 포함합니다.

드라이버의 INF 파일 내에서 각 GUID 사양에는 별표("모든 애플리케이션"을 의미함) 또는 이벤트가 발생할 때 시작해야 하는 애플리케이션을 나타내는 특정 애플리케이션 목록이 포함되어야 합니다. 스틸 이미지 이벤트 모니터는 이 목록을 사용하여 이벤트에 애플리케이션의 기본 할당을 제공합니다. 사용자는 스캐너 및 카메라 제어판 사용하여 이러한 할당을 수정할 수 있습니다.

이벤트 알림

드라이버는 디바이스(비동기 I/O 또는 폴링 사용)를 모니터링하여 각 GUID와 연결된 이벤트가 발생하는 시기를 확인해야 합니다. 디바이스 기능에 따라 드라이버는 비동기적으로 또는 디바이스 폴링 요청에 응답하여 클라이언트에 디바이스 이벤트 발생을 알릴 수 있습니다. 디바이스 이벤트 알림을 전달할 수 있는 모든 드라이버는 디바이스의 STI_DEV_CAPS 구조에서 STI_GENCAP_NOTIFICATIONS 플래그를 설정해야 합니다. 비동기 알림이 아닌 폴링을 지원하는 드라이버도 동일한 구조에서 STI_GENCAP_POLLING_NEEDED 플래그를 설정해야 합니다. (이러한 기능은 스틸 이미지 디바이스에 대한 INF 파일기능 키워드(keyword) 사용하여 표시해야 합니다.)

드라이버가 이벤트의 비동기 알림을 지원하는 경우 이벤트 모니터는 IStiUSD::SetNotificationHandle 을 호출하여 알림을 요청하고 이벤트 핸들을 제공합니다. 디바이스 이벤트가 발생하면 드라이버는 이벤트 핸들을 인수로 사용하여 SetEvent(Microsoft Windows SDK 설명서 참조)를 호출하여 이벤트 모니터에 알려야 합니다. 그런 다음 클라이언트는 IStiUSD::GetNotificationData 를 호출하여 이벤트의 GUID를 가져올 수 있습니다.

폴링이 필요한 경우 이벤트 모니터는 IStiUSD::GetStatus 를 호출하여 드라이버를 폴링합니다. 그러면 디바이스를 폴링하고 결과를 STI_DEVICE_STATUS 구조로 반환해야 합니다.