미니 드라이버 함수에 대한 호출 순서
미니 드라이버가 시작되면 IStiUSD::Initialize 및 IStiUSD::GetStatus와 같은 이전 STI 진입점 중 일부를 호출합니다. 첫 번째 애플리케이션이 디바이스와 통신을 시도하는 즉시 WIA 서비스는 IWiaMiniDrv::d rvInitializeWia를 호출합니다. 이 함수에서는 미니드라이버가 항목 트리를 생성해야 합니다.
WIA 서비스는 다음으로 트리의 각 항목에 대해 IWiaMiniDrv::d rvInitItemProperties 를 호출합니다. 미니 드라이버는 항목과 관련된 모든 속성을 만들어야 합니다. 경우에 따라 빈 속성을 만들고 나중에 데이터를 채우는 것이 좋습니다. 예를 들어 성능을 향상시키려면 아래 설명된 대로 WIA 서비스가 특별히 요청하는 경우에만 카메라의 이미지 썸네일을 읽어야 합니다.
호출할 다음 함수는 애플리케이션 및 디바이스 유형에 따라 달라집니다. 일반적으로 애플리케이션의 가장 일반적인 작업은 데이터를 전송하는 것입니다. 스캐너의 경우 애플리케이션은 먼저 디바이스에서 가져올 이미지를 정의하는 속성(예: 데이터 형식 및 익스텐트)을 설정합니다. WIA 서비스는 애플리케이션이 속성을 변경할 때 IWiaMiniDrv::d rvValidateItemProperties 를 호출합니다. 미니 드라이버는 필요한 경우 디바이스와 통신하면서 속성이 유효한지 검사 합니다. 다른 애플리케이션이 데이터 전송이 발생하기 전에 속성을 다른 값으로 설정할 수 있으므로 미니 드라이버는 일반적으로 해당 함수의 속성을 설정하지 않아야 합니다.
데이터를 전송하기 위해 WIA 서비스는 IWiaMiniDrv::d rvLockWiaDevice, IWiaMiniDrv::d rvWriteItemProperties, IWiaMiniDrv::d rvAcquireItemData 및 IWiaMiniDrv::d rvUnLockWiaDevice를 호출합니다. 디바이스 잠금 및 잠금 해제 호출은 전송 중에 다른 애플리케이션이 디바이스에 액세스하지 않음을 보장합니다. 스캐너의 경우 IWiaMiniDrv::d rvWriteItemProperties 는 위치, 익스텐트 및 해상도와 같은 속성을 디바이스에 보내야 합니다. 카메라 드라이버는 일반적으로 디바이스에 속성을 보낼 필요가 없습니다. IWiaMiniDrv::d rvAcquireItemData 는 IWiaMiniDrvCallback COM 인터페이스를 사용하여 디바이스에서 이미지 데이터를 검색하고 WIA 서비스를 통해 애플리케이션으로 다시 보내야 합니다.
카메라의 경우 애플리케이션이 이미지에 대한 썸네일을 표시하려는 경우 WIA 서비스는 각 이미지에서 IWiaMiniDrv::d rvReadItemProperties 를 호출합니다. 미니 드라이버는 해당 시점에서 썸네일을 읽고 드라이버 항목 컨텍스트에 캐시해야 합니다. 썸네일을 캐시하는 것이 중요합니다. 여러 애플리케이션이 썸네일을 요청할 수 있으므로 IWiaMiniDrv::d rvReadItemProperties에 대한 여러 호출이 발생할 수 있습니다. 미니드라이버가 애플리케이션에서 요청할 때마다 썸네일을 읽는 경우 성능이 저하됩니다.
카메라에 대한 다른 특별한 고려 사항은 카메라의 설정에 영향을 주는 루트 항목 속성입니다(예: 셔터 속도). 애플리케이션이 이러한 속성을 변경하면 WIA 서비스는 IWiaMiniDrv::d rvValidateItemProperties를 호출합니다. 미니 드라이버는 필요한 경우 카메라와 통신하여 속성 설정의 유효성을 검사할 수 있습니다. 그러나 다른 애플리케이션도 속성을 변경할 수 있으므로 이 함수는 카메라의 설정을 변경하는 데 가장 적합한 위치가 아닙니다. 새 이미지를 캡처하기 위해 IWiaMiniDrv::d rvDeviceCommand 함수가 호출되면 미니드라이버가 루트 항목 속성에서 모든 카메라 설정을 업데이트해야 합니다.