다음을 통해 공유


드라이버로 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, wiasGetChangedValueGuidwiasGetChangedValueStr 서비스 함수에 사용되는 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;
}