애플리케이션이 WIA 디바이스를 릴리스하는 방법
애플리케이션에 WIA 디바이스가 더 이상 필요하지 않은 경우 IWiaItem::Release 메서드(Microsoft Windows SDK 설명서에 설명됨)를 호출합니다. WIA 항목에 대한 마지막 참조가 릴리스되면 WIA 서비스는 IWiaMiniDrv::d rvUnInitializeWia 메서드를 호출합니다. WIA 미니드라이버에서는 이 메서드를 주로 사용하여 연결된 모든 애플리케이션과 연결된 리소스를 관리해야 합니다. 애플리케이션이 닫히면 해당 항목 트리와 연결된 리소스가 더 이상 필요하지 않습니다. WIA 미니드라이버에서는 IWiaMiniDrv::d rvInitializeWia 에서 참조 카운터를 증가시키고 IWiaMiniDrv::d rvUnInitializeWia에서 해당 참조 카운터를 감소시켜 연결된 모든 애플리케이션을 추적해야 합니다. 이 시점에서 리소스를 해제하면 다른 연결된 애플리케이션에 문제가 발생할 수 있습니다. 참조 카운터가 0에 도달하면 WIA 미니 드라이버에 연결된 애플리케이션이 더 이상 없습니다. 미니 드라이버는 애플리케이션 연결 중에 획득한 할당된 리소스를 클린 합니다.
참고 **** IWiaMiniDrv::d rvUnInitializeWia 메서드는 드라이버를 언로드하지 않습니다. 드라이버를 다시 호출하여 이벤트를 처리하거나 애플리케이션이 이벤트와 통신하려고 할 때 호출할 수 있습니다. 이 메서드를 호출한다고 해서 모든 클라이언트의 연결이 끊어진 것은 아닙니다. 클라이언트 연결 끊기당 하나의 호출이 있어야 합니다. IWiaMiniDrv::d rvUnInitializeWia 메서드에 대한 각 호출은 IWiaMiniDrv::d rvInitializeWia 메서드에 대한 해당 호출과 쌍을 이루어야 합니다.
WIA 드라이버는 현재 연결된 애플리케이션이 없음을 안전하게 확인할 수 없는 한 이 메서드 호출에서 드라이버 리소스를 해제해서는 안 됩니다.
현재 애플리케이션 연결 수를 확인하려면 WIA 드라이버는 클래스 멤버 변수를 참조 카운터로 증가하여 IWiaMiniDrv::d rvInitializeWia (카운터 증가) 및 IWiaMiniDrv::d rvUnInitializeWia (카운터 감소)에 대한 메서드 호출을 추적해야 합니다.
다음 예제에서는 IWiaMiniDrv::d rvUnInitializeWia 메서드의 구현을 보여줍니다.
HRESULT _stdcall CWIADevice::drvUnInitializeWia(BYTE *pWiasContext)
{
//
// If the caller did not pass in the correct parameters,
// then fail the call with E_INVALIDARG.
//
if (!pWiasContext) {
return E_INVALIDARG;
}
InterlockedDecrement(&m_lClientsConnected);
//
// make sure we never decrement below zero (0)
//
if(m_lClientsConnected < 0){
m_lClientsConnected = 0;
return S_OK;
}
//
// check for connected applications.
//
if(m_lClientsConnected == 0){
//
// There are no application clients connected to this WIA driver
//
}
return S_OK;
}