WIA 互換性レイヤーのデータ転送の概要
転送互換性レイヤーがないと、Windows Vista WIA ドライバーは、レガシおよび Windows Vista アプリケーションからのデータ転送を実行できるように、TYMED とストリーム ベースのデータ転送スタイルの両方を実装する必要がありました。 同様に、Windows Vista WIA アプリケーションでは、レガシ ドライバーと Windows Vista ドライバーからのデータ転送を実行するために、両方の転送スタイル (異なるコールバック実装を使用) を実装する必要がありました。 WIA 互換性レイヤーでは、ドライバーの種類は WIA アプリケーションに対して透過的であり、Windows Vista WIA ドライバーはレガシ転送コードを処理する必要はありません。
互換性レイヤーが必要な場合は、2 つの転送ケースがあり、それぞれさらに 2 つのサブカテゴリに分類できます。
Windows Vista ドライバーからデータを転送するレガシ アプリケーション:
- ファイル転送: アプリケーションは IWiaDataTransfer::idtGetBandedData を呼び出します。
- コールバック転送: アプリケーションは IWiaDataTransfer::idtGetData を呼び出します。
レガシ ドライバーからデータを転送する Windows Vista アプリケーション:
- ファイル転送: 互換性レイヤーは、レガシ ドライバーを使用してファイル転送を開始します。
- コールバック転送: 互換性レイヤーは、レガシ ドライバーを使用してコールバック転送を開始します。
互換性レイヤーを使用するかどうかを判断する最初の手順は、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 とストリームベースの転送の詳細については、「データ転送」を参照してください。
IWiaDataTransfer、IWiaTransfer、IStream インターフェイスについては、Microsoft Windows SDK のドキュメントで説明されています。