互換性レイヤーを使用すると、Windows Vista アプリケーションは、レガシ ドライバーで IWiaTransfer::D ownload (Microsoft Windows SDK ドキュメントで説明) を呼び出せます。 互換性レイヤーでは、フォルダー転送コードと形式変換を実装する必要があります。 互換性レイヤーは、従来のドライバーから複数のページを常に転送できるように、フィーダー転送用の特別なコードを実装します。 Windows Vista アプリケーションは、TYMED_FILE転送を使用しても、フィーダー項目からのスキャン中に常に複数のページを要求できる必要があります。 次の図は、Windows Vista アプリケーションを備えたレガシ ドライバーを示しています。
WIA サービス内のレガシ コールバック オブジェクトは、レガシ転送メッセージとデータを Windows Vista 転送メッセージに変換し、指定されたストリームにデータを書き込みます。
Windows Vista アプリケーションは、TYMED_FILEとTYMED_MULTIPAGE_FILEのみを想定しているため、互換性レイヤーは、TYMED_CALLBACKとTYMED_MULTIPAGE_CALLBACKがレガシ ドライバーから Windows Vista アプリケーションに公開されないようにする役割を担います。
互換性レイヤーのこの部分を実装する最も簡単な方法は、常にTYMED_FILEとTYMED_MULTIPAGE_FILEセットを使用してレガシ ドライバーを呼び出す方法です。 これを行う欠点は、データをアプリケーションのストリームに書き戻す前に、ドライバーが常にイメージ全体をスキャンする必要があったということです。 したがって、互換性レイヤーは、Windows Vista アプリケーションがWiaImgFmt_BMP形式のスキャンを要求するときにTYMED_CALLBACKを使用 します ( WIA_IPA_FORMAT プロパティ はWiaImgFmt_BMPに設定されています)。 これにより、互換性レイヤーは、バンドごとにデータ バック バンドを書き込むできるようになります。
ただし、レガシ ドライバーはWiaImgFmt_BMPをサポートしていませんが、TYMED_CALLBACK用にはWiaImgFmt_MEMORYBMPをサポートしています。 したがって、変換コールバック オブジェクトは、BMP ファイル ヘッダーを作成し、このファイル ヘッダーをアプリケーションにも書き戻す必要があります。 BMP ファイル ヘッダーを BMP 情報ヘッダーから直接構築できる場合など、これは簡単な場合があります。 ただし、BMP 情報ヘッダーの高さが 0 に設定されている場合があります。 この場合、WIA 互換性レイヤーは、BMP ファイル ヘッダーを書き込んで BMP 情報ヘッダーを更新する前に、すべてのデータが転送されるまで待機する必要があります。
TYMED_CALLBACK以外の TYMED 転送がレガシ ドライバーから実行される理由は、通常、マルチページ形式はTYMED_MULTIPAGE_FILEでのみサポートされ、ドライバーは通常、TYMED_CALLBACKよりもTYMED_FILEの多くの形式をサポートしているということです。
TYMED_FILE転送中、互換性レイヤーは転送が完了するまで待機してから、アプリケーションのストリームにデータを書き戻します。 これを行うには、ファイルをメモリにマッピングし、メモリ内のすべてのデータを 1 回の書き込み要求で書き戻します。
TYMED_CALLBACK転送中、互換性レイヤーは、レガシ ドライバーからIT_MSG_DATA転送メッセージを受信するたびに、アプリケーションのストリームに書き戻されます。
互換性レイヤーには、FEEDER 転送用の特別なコードも含まれています。 このコードにより、TYMED がTYMED_MULTIPAGE_FILEされていない場合でも、互換性レイヤーが ADF から複数のページを転送できるようになります。 これを行う方法は、互換性レイヤーをドライバーに複数回呼び出し、毎回 1 つのページのみを要求することです。 このソリューションにより、Windows Vista アプリケーションによって呼び出されたときに、すべてのレガシ ドライバーがフィーダーからの複数のページの転送を処理できるようになります。
レガシ ドライバーは、転送中に "帯域外" メッセージを送信できます (プレビューなど)。 これらのメッセージは、ストリーム ベースの転送モデルに適合しないため無視されます。
TYMED 定数の詳細については、「 TYMED について」を参照してください。