Windows Vista より前に開発されたドライバーの変更を最小限に抑えるために、ドライバーは IStream データ転送をサポートするために新しいインターフェイスを実装する必要はありません。 代わりに、 IWiaMiniDrvCallBack インターフェイスを介して新しいインターフェイスが公開されました。 ドライバーは、新しい IWiaTransfer コールバック関数の IWiaMiniDrvCallBack::QueryInterface を呼び出すことができます。これによって、データ ストリームと状態通知にアクセスできるようになります。 IWiaTransfer インターフェイスについては、Microsoft Windows SDK のドキュメントを参照してください。
ドライバー内のデータ転送コードは、すべての転送が同じ方法で処理され、ファイルまたはメモリ転送分岐ロジックがないため、より簡単になりました。
IStream 転送モデルをサポートしていないドライバーは、通常、次の手順を実行します。
フラグを調べて、要求がアップロード用かダウンロード用かを判断します。
コールバック関数から宛先ストリームを受信します。
データ転送ループを実行します。
- デバイスからデータを受信します。
- ストリームにデータを書き込みます。
ただし、新しい IStream 転送モデルを実装するドライバーでは、フォルダーの取得がサポートされているため、WIA サービスは IWiaMiniDrv::d rvWriteItemProperties を呼び出しません。
フォルダーの取得では、1 つの転送要求が親アイテムに対して行われますが、実際のアイテムのプロパティは、転送される各子アイテムに対して行われます。 IWiaMiniDrv::d rvWriteItemProperties メソッドは子項目ごとに呼び出されないため、このメソッドを使用してデバイス設定をプログラムすることはできません。 IStream データ転送をサポートするドライバーの場合、WIA サービスは代わりに IWiaMiniDrv::d rvAcquireItemData を呼び出します。
手記 この変更は、新しいデータ転送をサポートするドライバーにのみ影響します。 IStream データ転送をサポートしていないレガシ ドライバーは影響を受けません。WIA サービスは引き続き IWiaMiniDrv::d rvWriteItemProperties メソッドを呼び出します。
ドライバーが IWiaTransferCallback::GetNextStream (Microsoft Windows SDK ドキュメントで説明) を複数回呼び出すフォルダー取得では、ドライバーは一度に 1 つのアクティブ ストリームのみを持つことができます。
ドライバーは、ダウンロード操作中にストリームの IStream::Write、 IStream::Seek、 IStream::SetSize メソッド (Windows SDK ドキュメントで説明) のみを呼び出す必要があります。 この制限により、フィルターの記述が容易になります。 ドライバーは、転送先ストリームが他のメソッドを実装することを想定しないでください。
WIA_DPS_PAGE_SIZE プロパティがWIA_PAGE_AUTOに設定されている場合 (つまり、ページ サイズの自動検出が有効になっている)、ドライバーは、画像データの転送が完了した後にのみ、画像に関する正確なディメンション情報を提供する必要があります。 ストリーム ベースの転送の場合、ドライバーは転送の終了時にイメージ ヘッダー内の画像のサイズを更新する必要があります。 新しいセッションの開始時に、WIA_DPS_PAGE_SIZE プロパティの値は常にWIA_PAGE_AUTO以外の値に設定する必要があります。