다음을 통해 공유


하드웨어에 WIA 속성 설정 적용

WIA 애플리케이션이 데이터 전송을 시작하면 WIA 서비스는 WIA 미니드라이버에 현재 WIA 속성 설정을 적용하고 하드웨어에 디바이스별 설정을 적용할 수 있는 기회를 제공합니다. WIA 서비스는 IWiaMiniDrv::d rvAcquireItemData 메서드를 호출하기 전에 IWiaMiniDrv::d rvWriteItemProperties 메서드를 호출합니다. 후자의 메서드는 WIA 애플리케이션이 데이터 전송을 시작하는 경우에만 호출됩니다. WIA 미니드라이버에서는 WIA 서비스 함수를 사용하여 자체 드라이버 항목 트리의 속성을 읽어야 합니다.

IWiaMiniDrv::d rvWriteItemProperties 구현

WIA 서비스는 클라이언트가 데이터 전송을 요청한 후 IWiaMiniDrv::d rvWriteItemProperties 메서드를 호출합니다. WIA 서비스는 IWiaMiniDrv::d rvAcquireItemData를 호출하기 전에 이 메서드를 호출합니다. WIA 미니 드라이버는 이 메서드에서 반환하기 전에 하드웨어에 필요한 모든 설정을 커밋해야 합니다.

이 메서드가 호출되면 WIA 미니드라이버가 데이터 전송을 수행하기 위해 커밋되었습니다. WIA 서비스는 현재 WIA_ERROR_BUSY 오류 코드로 데이터를 획득하려고 시도하는 애플리케이션에 실패합니다.

다음 예제에서는 IWiaMiniDrv::d rvWriteItemProperties 메서드의 구현을 보여줍니다.

HRESULT _stdcall CWIADevice::drvWriteItemProperties(
  BYTE                      *pWiasContext,
  LONG                      lFlags,
  PMINIDRV_TRANSFER_CONTEXT pmdtc,
  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 (!pmdtc) {
      return E_INVALIDARG;
  }

  if (!plDevErrVal) {
      return E_INVALIDARG;
  }

  HRESULT hr = S_OK;
  *plDevErrVal = 0;
  PROPVARIANT pv[2];
  PROPSPEC ps[2] = {
      {PRSPEC_PROPID, WIA_IPS_XRES},
      {PRSPEC_PROPID, WIA_IPS_YRES}
  };

  //
  // initialize propvariant structures
  //

  pv[0].vt = VT_I4;   // X resolution is a LONG value
  pv[1].vt = VT_I4;   // Y resolution is a LONG value

  //
  // read 2 WIA item properties (X and Y resolution)
  //

  hr = wiasReadMultiple(pWiasContext, 2, ps, pv, NULL);

  if (hr == S_OK) {

    //
    // write current X and Y resolution values, read from the
    // the WIA property set, and write them to the device.
    //

      hr = SetMyDeviceXResolution(pv[0].lVal);
      if(S_OK == hr) {
          hr = SetMyDeviceYResolution(pv[1].lVal);
          if(FAILED(hr)) {

            //
            // could not set Y resolution to device
            //

          }
   } else {

        //
        // could not set X resolution to device
        //

      }
  }
  return hr;
}