WIA 互換性レイヤーのデータ転送の概要

転送互換性レイヤーがないと、Windows Vista WIA ドライバーは、レガシおよび Windows Vista アプリケーションからのデータ転送を実行できるように、TYMED とストリーム ベースのデータ転送スタイルの両方を実装する必要がありました。 同様に、Windows Vista WIA アプリケーションでは、レガシ ドライバーと Windows Vista ドライバーからのデータ転送を実行するために、両方の転送スタイル (異なるコールバック実装を使用) を実装する必要がありました。 WIA 互換性レイヤーでは、ドライバーの種類は WIA アプリケーションに対して透過的であり、Windows Vista WIA ドライバーはレガシ転送コードを処理する必要はありません。

互換性レイヤーが必要な場合は、2 つの転送ケースがあり、それぞれさらに 2 つのサブカテゴリに分類できます。

  1. Windows Vista ドライバーからデータを転送するレガシ アプリケーション:

    1. ファイル転送: アプリケーションは IWiaDataTransfer::idtGetBandedData を呼び出します。
    2. コールバック転送: アプリケーションは IWiaDataTransfer::idtGetData を呼び出します。
  2. レガシ ドライバーからデータを転送する Windows Vista アプリケーション:

    1. ファイル転送: 互換性レイヤーは、レガシ ドライバーを使用してファイル転送を開始します。
    2. コールバック転送: 互換性レイヤーは、レガシ ドライバーを使用してコールバック転送を開始します。

互換性レイヤーを使用するかどうかを判断する最初の手順は、WIA ドライバーが Windows Vista ドライバーかレガシ ドライバーかを判断することです。 WIA サービスは、ドライバーが IStiUSD::GetCapabilities から返すバージョン番号を調べることで、これを決定します。 レガシ ドライバーはバージョン番号の STI_VERSION を返しますが、Windows Vista ドライバーは STI_VERSION_3 を返す必要があります。 このバージョン番号は、Windows Vista プロパティの WIA COM プロキシ (および WIA アプリケーション) WIA_DIP_STI_DRIVER_VERSION に公開されます。

互換性レイヤーを使用するかどうかを判断する次の手順は、アプリケーションが Windows Vista WIA アプリケーションかレガシ WIA アプリケーションかを判断することです。アプリケーションが IWiaDataTransfer::idtGetBandedData または IWiaDataTransfer::idtGetData を呼び出す場合、レガシ WIA アプリケーションで、アプリケーションが IWiaTransfer::Download を呼び出す場合、Windows Vista WIA アプリケーションです。

新しいストリーム ベースのデータ転送モデルでは、WIA サービスは TYMED_CALLBACK と TYMED_FILE (または TYMED_MULTIPAGE_CALLBACK と TYMED_MULTIPAGE_FILE) を区別しなくなります。 代わりに、TYMED_FILE と TYMED_MULTIPAGE_FILE のみが存在します。 ドライバーがマルチページ TIFF (または PDF) スキャンをサポートできるようにするには、TYMED_MULTIPAGE_FILE が必要です。 TYMED 定数の詳細については、「TYMED について」を参照してください。

WIA は、Windows Vista ドライバーで WiaImgFmt_MEMORYBMP メモリ ビットマップ形式をサポートしません。

Windows Vista ドライバーは、転送中にドライバーがイメージ全体をキャッシュするのではなく、バンドでデータを転送するための更新メッセージを送信できます。 この形式の転送は、スクロール フィード スキャナーを使用したスキャンなど、転送される画像のサイズをすぐに判断できないスキャン中にデータを転送する場合に便利です。 バンドで画像データを転送するには、ドライバーは IWiaTransferCallback::GetNextStream で渡されたストリームで IStream::Seek を呼び出す必要があります。

TYMED とストリームベースの転送の詳細については、「データ転送」を参照してください。

IWiaDataTransferIWiaTransferIStream インターフェイスについては、Microsoft Windows SDK のドキュメントで説明されています。