잠금 및 잠금 해제 모범 사례
WIA 드라이버의 STI 부분에 대한 잠금에는 특별한 주의가 필요합니다. 애플리케이션이 게시된 STI 인터페이스에 직접 액세스할 수 있지만 디바이스에 대한 이러한 직접 액세스는 오용될 수 있습니다. 부적절하게 구현된 잠금 기술은 디바이스를 DoS(서비스 거부) 공격에 노출시킬 수 있습니다.
STI 애플리케이션의 경우
다음 목록에는 STI 애플리케이션을 사용할 때 따라야 하는 예방 조치 및 지침이 포함되어 있습니다.
장시간 잠금을 유지하지 마세요.
디바이스에 직접 액세스할 필요가 없는 경우 WIA 인터페이스 메서드를 사용하여 동일한 정보를 얻을 수 있습니다. WIA 서비스가 잠금을 제어하기 때문에 이 옵션을 사용하는 것이 좋습니다.
STI를 사용하는 TWAIN 드라이버는 IStiUSD::LockDevice 메서드를 사용하여 디바이스에 대한 액세스를 제어합니다. TWAIN 드라이버가 STI를 사용하는 경우 TWAIN 드라이버는 잠금 시간을 제어합니다.
IStiUSD 인터페이스 메서드만 구현할 수 있도록 만들 수 있습니다. 이 방법의 단점은 애플리케이션이 IStiUSD::LockDevice 를 직접 호출하여 애플리케이션에서 단독으로 사용하기 위해 디바이스를 잠글 수 있다는 것입니다. Windows 하드웨어 품질 랩은 이 기술을 사용하는 드라이버를 인증하지 않습니다. 이러한 드라이버는 서명되지 않은 드라이버로만 설치할 수 있습니다.
WIA 드라이버의 경우
다음 목록에는 WIA 드라이버로 작업할 때 따라야 하는 예방 조치 및 지침이 포함되어 있습니다.
긴 잠금 기간 동안 디바이스의 활동을 모니터링합니다. 활동이 없는 경우 드라이버는 디바이스의 잠금을 해제하고 다른 클라이언트가 연결할 수 있도록 허용해야 합니다. 드라이버가 매우 큰 이미지를 스캔하는 경우 또는 이미지를 획득하는 데 비정상적으로 오랜 시간이 걸리는 경우와 같이 디바이스의 잠금을 해제해서는 안 됩니다. 이렇게 하면 현재 세션이 중단됩니다. 작동되는 디바이스와 버스에 따라 매우 큰 이미지는 10메가바이트에서 기가바이트 이상까지일 수 있으며, 오랜 기간은 500밀리초에서 1분 이상까지입니다. 디바이스에 대한 특정 값이 무엇인지 알 수 있도록 디바이스와 작동되는 버스를 벤치마킹해야 합니다.
WIA를 사용하는 애플리케이션은 드라이버의 잠금 메서드인 IWiaMiniDrv::d rvLockWiaDevice 및 IWiaMiniDrv::d rvUnLockWiaDevice에 액세스하지 않습니다. WIA 서비스에서만 이러한 잠금 메서드를 호출합니다. WIA 서비스는 IStiUSD::LockDevice 메서드를 사용하여 IStiUSD에 대한 잠금 호출을 전파합니다.
애플리케이션이 IStiUSD::LockDevice 메서드를 사용하여 WIA 디바이스를 독점적으로 잠그는 경우 해당 애플리케이션이 IStiUSD::UnLockDevice 메서드를 호출할 때까지 WIA 서비스는 디바이스에 액세스할 수 없습니다. WIA 서비스가 디바이스를 잠글 수 없는 경우 WIA 서비스에 의존하는 애플리케이션 또는 드라이버에서 디바이스를 사용할 수 없습니다.
IWiaMiniDrv::d rvLockWiaDevice 메서드는 항상 IStiDevice::LockDevice 메서드를 호출해야 하며 IWiaMiniDrv::d rvUnLockWiaDevice 메서드는 항상 IStiDevice::UnLockDevice 메서드를 호출해야 합니다. 이렇게 하면 WIA 서비스가 디바이스에 대한 적절한 잠금 관리를 수행합니다. IStiDevice 인터페이스는 IWiaMiniDrv::d rvInitializeWia 메서드에 대한 호출에서 드라이버에 전달됩니다. 이 인터페이스는 캐시되고 IStiDevice::LockDevice 메서드를 호출하는 데 사용해야 합니다. 이 메서드는 드라이버의 IStiUSD::LockDevice 메서드를 호출합니다.
BOOL 값을 사용하여 잠금을 제어하는 경우 이 값을 여러 스레드로부터 보호합니다. 두 드라이버가 동시에 단일 디바이스를 잠그려고 하면 하나의 드라이버만 성공할 수 있습니다.