共用方式為


繼承應用程式和 Windows Vista 驅動程式之間的資料傳輸

相容性層必須確定驅動程式的影像處理篩選器一律會叫用,而且未明確支援 LocalService 帳戶的繼承應用程式仍能夠執行資料傳輸。 LocalService帳戶適用于 Microsoft Windows XP 和更新版本的作業系統。

至少,舊版驅動程式必須同時公開TYMED_FILE和TYMED_CALLBACK;不過,Windows Vista 驅動程式永遠不會公開TYMED_CALLBACK (或TYMED_MULTIPAGE_CALLBACK) 。 相容性層的傳輸部分可確保繼承應用程式會看到TYMED_CALLBACK,雖然 Windows Vista 驅動程式並未實作它。 TYMED_MULTIPAGE_CALLBACK永遠不會從 Windows Vista 驅動程式公開。

繼承應用程式會看到 Windows Vista 驅動程式公開TYMED_FILE和TYMED_MULTIPAGE_FILE支援的格式。 針對TYMED_CALLBACK,繼承應用程式會看到與驅動程式針對 TYMED_FILE 公開的格式相同,但有一個例外狀況:而不是公開 WiaImgFmt_BMP,相容性層會將 WiaImgFmt_MEMORYBMP 公開至繼承應用程式。 完成此作業的方式是透過對IWiaMiniDrv::d rvGetWiaFormatInfo進行相容性層「攔截」呼叫,並新增所有 Windows Vista 驅動程式的TYMED_FILE格式 (,但TYMED_CALLBACK / 的WiaImgFmt_BMPWiaImgFmt_MEMORYBMP) 除外。 最重要的是,相容性層會在資料傳輸期間建立自己的舊版回呼物件,這會將 Windows Vista 傳送訊息和寫入資料流程的資料轉換成舊版傳輸訊息。

如需 TYMED 常數的詳細資訊,請參閱 瞭解 TYMED

相容性層會在 WIA COM Proxy 中建立兩個回呼物件:一個用於回呼傳輸,另一個用於檔案傳輸。 WIA COM Proxy 會實作 IWiaTransferCallback 介面。 這個回呼物件會處理資料流程型傳輸與「舊樣式」傳輸之間的轉換。 WIA 相容性層也會起始驅動程式的影像處理篩選器,而我們傳遞相容性層的回呼物件。 因此,影像處理篩選一律會在應用程式的內容中執行,就像 Windows Vista 傳輸一樣。

下圖說明相容性層如何搭配 Windows Vista 驅動程式和繼承應用程式使用。

說明繼承應用程式與 Windows vista 驅動程式之間資料傳輸的圖表。

WIA COM Proxy 中的舊版回呼物件會將寫入資料流程的 Windows Vista 傳輸訊息和資料轉換成舊版傳輸訊息,並將資料寫入檔案或帶狀資料回呼。

當驅動程式呼叫 IStream 介面所公開的任何方法時,它會從 IWiaMiniDrvTransferCallback::GetNextStream 方法 (請注意,驅動程式應該只會呼叫 IStream::WriteIStream::SeekIStream::SetSize) 。 因此,相容性層會建立自訂 的 IStream 實作,只包裝 WIA COM Proxy 提供的 IStream 介面。

舊版檔案傳輸很簡單。 這類傳輸的範例是繼承應用程式呼叫 IWiaDataTransfer::idtGetData時。 相容性層會在應用程式在 STGMEDIUM 結構中指定的檔案上建立資料流程。 此資料流程會在呼叫 IWiaTransferCallback::GetNextStream 時傳遞至驅動程式或影像處理篩選準則,而且所有傳輸訊息都可以輕鬆地對應至舊版傳輸訊息。 如需訊息對應方式的詳細描述,請參閱 WIA 相容性層資料傳輸實作

呼叫 IWiaDataTransfer::d tGetData 方法時,相容性層會執行更嚴格的參數檢查。 例如,相容性層不允許呼叫具有 TYMED_FILEIWiaDataTrasnfer::idtGetData方法,而頁面計數較高,然後有一個使用相容性層的資料傳輸中,可以呼叫具有 TYMED_FILE 的IWiaDataTrasnfer::idtGetData方法,並將頁面計數大於一個。

舊版回呼傳輸有點棘手。 因為 Windows Vista 驅動程式不支援舊版驅動程式所需的 WiaImgFmt_MEMORYBMP,所以相容性層的回呼物件必須處理從 WiaImgFmt_BMP 轉換成 WiaImgFmt_MEMORYBMP。 傳輸訊息之間的對應也並不簡單。 相容性層會建立自己的資料流程實作。 相容性層會在應用程式呼叫 IStream::Write 方法時,將IT_MSG_DATA訊息傳送至應用程式的回呼。

必須在實作相容性層時變更 IWiaTransfer 介面; IWiaTransfer::EnumWIA_FORMAT_INFO 函式會新增至 IWiaTransfer ,以允許TYMED_MULTIPAGE_FILE傳輸。 這個新增不是相容性層的結果,但是必要的,因為無法從 IWiaTransfer 介面或IWiaItem2介面到IWiaItem介面取得IWiaDataTransfer介面。

Microsoft Windows SDK檔中討論IWiaDataTransfer、IWiaTransferIWiaItem、IWiaItem2IStream介面和 STGMEDIUM 結構。

IWiaMiniDrvTransferCallback