IStream データ転送のドライバー変更
ドライバーでは、Windows Vista より前に開発されたドライバーの変更を最小限に抑えるため IStream データ転送に対応するために新しいインターフェイスを実装する必要はありません。 代わりに、IWiaMiniDrvCallBack インターフェイスを介して新しいインターフェイスが公開されました。 ドライバーは、新しい IWiaTransfer コールバック関数の IWiaMiniDrvCallBack::QueryInterface を呼び出すことができます。これにより、データ ストリームと状態通知にアクセスできるようになります。 IWiaTransfer インターフェイスについては、Microsoft Windows SDK のドキュメントを参照してください。
ドライバー内のデータ転送コードはすべての転送が同じ方法で処理され、ファイルまたはメモリ転送分岐ロジックがなくなり、より簡単になりました。
IStream 転送モデルに対応していないドライバーは通常、次の手順を実行します。
フラグを調べ、要求がアップロードのものかダウンロードのものかを判断します。
IWiaMiniDrvCallBack インターフェイスを取得します。
コールバック関数から宛先ストリームを受信します。
データ転送ループを実行します。
- デバイスからデータを受信します。
- ストリームにデータを書き込みます。
ただし、新しい 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以外の値に設定する必要があります。