Windows Vista 應用程式和舊版驅動程式之間的資料傳輸
相容性層可讓 Windows Vista 應用程式呼叫舊版驅動程式上Microsoft Windows SDK檔) 中所述的IWiaTransfer::D ownload (。 相容性層必須實作資料夾傳輸程式碼以及格式轉換。 相容性層會實作摘要器傳輸的特殊程式碼,以確保一律可以從舊版驅動程式傳輸多個頁面。 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 (WIA_IPA_FORMAT屬性設定 為 WiaImgFmt_BMP) 時,相容性層會使用 TYMED_CALLBACK 。 這可讓相容性層依訊號範圍將資料寫回頻外。
不過,舊版驅動程式不支援 WiaImgFmt_BMP,但 WiaImgFmt_MEMORYBMP TYMED_CALLBACK。 因此,轉換回呼物件必須建立 BMP 檔案標頭,並將此檔案標頭寫回應用程式。 有時候這很容易,例如 BMP 檔案標頭可以直接從 BMP 資訊標頭建構時。 不過,在某些情況下,BMP 資訊標頭的高度設定為 0。 在此情況下,WIA 相容性層必須等到所有資料都傳輸後,才能寫入 BMP 檔案標頭並更新 BMP 資訊標頭。
除了TYMED_CALLBACK以外,TYMED 傳輸的原因是從舊版驅動程式預先格式化,原因是多頁格式通常只支援TYMED_MULTIPAGE_FILE,而驅動程式通常支援比 TYMED_CALLBACK 更多的TYMED_FILE格式。
在TYMED_FILE傳輸期間,相容性層會等到傳輸完成,再將資料寫回應用程式的資料流程。 做法是將檔案對應至記憶體,並在單一寫入要求中將記憶體中的所有資料寫回。
在TYMED_CALLBACK傳輸期間,相容性層會在每次收到舊版驅動程式的IT_MSG_DATA傳輸訊息時,回寫至應用程式的資料流程。
相容性層也包含 FEEDER 傳輸的特殊程式碼。 此程式碼可確保即使 TYMED 未TYMED_MULTIPAGE_FILE,相容性層還是可以從 ADF 傳輸多個頁面。 如此一來,每次只要求一頁時,都會多次呼叫驅動程式的相容性層。 此解決方案可確保當 Windows Vista 應用程式叫用時,每個舊版驅動程式都能處理來自摘要器的多個頁面傳輸。
舊版驅動程式可以在傳輸期間傳送「頻外」訊息 (,例如預覽) 。 這些訊息將會被忽略,因為它們不符合以資料流程為基礎的傳輸模型。
如需 TYMED 常數的詳細資訊,請參閱 瞭解 TYMED。