次の方法で共有


ドライバーによる WIA プロパティの書き込み

WIA ミニドライバーは、次の WIA サービス関数を使用して、WIA プロパティの現在の値と有効な値のいずれかを更新できます。

wiasWriteMultiple
すべての WIA プロパティ型を書き込みます。 これは、WIA ドライバーが、カスタム プロパティを含む、WIA 項目に既存のプロパティを書き込むを許可する一般的な関数です。 呼び出しごとに複数のプロパティに書き込む場合に使用できます。

wiasWritePropStr
文字列 (型VT_BSTR) である WIA プロパティを書き込みます。

wiasWritePropLong
4 バイト整数 (VT_I4 型) である WIA プロパティを書き込みます。

wiasWritePropFloat
4 バイト実数 (VT_R4 型) である WIA プロパティを書き込みます。

wiasWritePropGuid
GUID である WIA プロパティを書き込みます (VT_CLSID型)。

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
wiasGetChangedValueLongwiasGetChangedValueFloatwiasGetChangedValueGuidwiasGetChangedValueStr サービス関数で使用される WIA プロパティ コンテキストを作成します。

wiasFreePropContext
wiasCreatePropContext によって 作成された割り当てられたコンテキスト メモリを解放します

IWiaMiniDrv::drvValidateItemProperties の実装

IWiaMiniDrv::drvValidateItemProperties メソッドは、項目の WIA プロパティに変更が加えられたときに呼び出されます。 WIA ミニドライバーは、値が有効であることをチェックするだけでなく、変更された有効な値を更新する必要があります。

WIA プロパティが無効で、アプリケーションがそのプロパティに書き込みを行っていない場合は、無効な値および依存する値を有効な値に変更する必要があります。そうしないと、検証に失敗します (アプリケーションがプロパティを無効な値に設定しているため)。

次のコード例は、IWiaMiniDrv::drvValidateItemProperties メソッドの実装を示しています。

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;
}