드라이버로 WIA 속성 작성
WIA 미니 드라이버는 다음 WIA 서비스 함수를 사용하여 WIA 속성의 현재 값과 유효한 값을 업데이트할 수 있습니다.
wiasWriteMultiple
모든 WIA 속성 형식을 작성합니다. 이는 WIA 드라이버가 사용자 지정 속성을 포함하여 WIA 항목에 존재하는 모든 속성을 쓸 수 있도록 하는 일반적인 함수입니다. 호출당 여러 속성에 쓰는 데 사용할 수 있습니다.
wiasWritePropStr
문자열(VT_BSTR 형식)인 WIA 속성을 작성합니다.
wiasWritePropLong
4바이트 정수(VT_I4 형식)인 WIA 속성을 작성합니다.
wiasWritePropFloat
4바이트 실수(VT_R4 형식)인 WIA 속성을 작성합니다.
wiasWritePropGuid
GUID(VT_CLSID 형식)인 WIA 속성을 작성합니다.
wiasWritePropBin
부호 없는 바이트 문자열인 WIA 속성 작성(VT_VECTOR 형식 | VT_UI1).
wiasGetChangedValueLong
4바이트 정수(VT_I4 형식)인 WIA 속성에 대해 현재 변경된 정보를 가져옵니다.
wiasGetChangedValueFloat
4바이트 실수(VT_R4 형식)인 WIA 속성에 대해 현재 변경된 정보를 가져옵니다.
wiasGetChangedValueGuid
GUID(VT_CLSID 형식)인 WIA 속성에 대해 현재 변경된 정보를 가져옵니다.
wiasGetChangedValueStr
문자열(VT_BSTR 형식)인 WIA 속성에 대해 현재 변경된 정보를 가져옵니다.
wiasCreatePropContext
wiasGetChangedValueLong, wiasGetChangedValueFloat, wiasGetChangedValueGuid 및 wiasGetChangedValueStr 서비스 함수에 사용되는 WIA 속성 컨텍스트를 만듭니다.
wiasFreePropContext
wiasCreatePropContext에서 만든 할당된 컨텍스트 메모리를 해제합니다.
IWiaMiniDrv::d rvValidateItemProperties 구현
IWiaMiniDrv::d rvValidateItemProperties 메서드는 항목의 WIA 속성을 변경할 때 호출됩니다. WIA 미니 드라이버는 값이 유효한지 검사 뿐만 아니라 변경되는 유효한 값을 업데이트해야 합니다.
WIA 속성이 유효하지 않고 애플리케이션이 이 속성에 쓰지 않는 경우 잘못된 값과 종속 값을 유효한 값으로 변경하거나 유효성 검사에 실패해야 합니다(애플리케이션이 속성을 잘못된 값으로 설정하기 때문).
다음 예제에서는 IWiaMiniDrv::d rvValidateItemProperties 메서드의 구현을 보여줍니다.
HRESULT _stdcall CWIADevice::drvValidateItemProperties(
BYTE *pWiasContext,
LONG lFlags,
ULONG nPropSpec,
const PROPSPEC *pPropSpec,
LONG *plDevErrVal)
{
//
// If the caller did not pass in the correct parameters,
// then fail the call with E_INVALIDARG.
//
if (!pWiasContext) {
return E_INVALIDARG;
}
if (!plDevErrVal) {
return E_INVALIDARG;
}
if (!pPropSpec) {
return E_INVALIDARG;
}
HRESULT hr = S_OK;
LONG lItemType = 0;
WIA_PROPERTY_CONTEXT Context;
*plDevErrVal = 0;
//
// create a WIA property context, to gain access to
// the WIA application's intended settings.
//
hr = wiasCreatePropContext(nPropSpec,
(PROPSPEC*)pPropSpec,
0,
NULL,
&Context);
if(S_OK == hr) {
//
// get the current item type to help determine what property set to validate
//
hr = wiasGetItemType(pWiasContext, &lItemType);
if (S_OK == hr) {
if (lItemType & WiaItemTypeRoot) {
//
// validate root item properties here
//
} else {
//
// validate item properties here
//
WIAS_CHANGED_VALUE_INFO cviDataType;
memset(&cviDataType,0,sizeof(cviDataType));
//
// check to see if the application was updating
// the WIA_IPA_DATATYPE property
//
hr = wiasGetChangedValueLong(pWiasContext,pContext,FALSE,WIA_IPA_DATATYPE,&cviDataType);
if(S_OK == hr) {
if (cviDataType.bChanged) {
//
// This value was changed, and needs to be checked
//
// cviDataType.Current.lVal is the current application setting.
//
} else {
//
// Nothing has been changed, so leave this property alone.
// Let the WIA service function wiasValidateItemProperties
// do the rest of the work for you.
//
}
}
}
//
// free the property context
//
wiasFreePropContext(&Context);
}
//
// call WIA service helper when you have finished updating dependent values
//
if(S_OK == hr) {
//
// call WIA service helper to validate other properties
//
hr = wiasValidateItemProperties(pWiasContext, nPropSpec, pPropSpec);
}
}
return hr;
}