Übersicht über die Übertragungskompatibilitätsschicht von WIA
Ohne die Übertragungskompatibilitätsschicht hätte ein Windows Vista WIA-Treiber sowohl TYMED- als auch Stream-basierte Datenübertragungsarten implementieren müssen, um Datenübertragungen von veralteten und Windows Vista-Anwendungen durchführen zu können. Ebenso hätte eine Windows Vista WIA-Anwendung beide Arten von Übertragungen (mit unterschiedlichen Callback-Implementierungen) implementieren müssen, um Datenübertragungen von veralteten und Windows Vista-Treibern durchführen zu können. Mit der WIA-Kompatibilitätsschicht ist die Art des Treibers für eine WIA-Anwendung transparent und ein Windows Vista-WIA-Treiber muss sich nicht mit veraltetem Code für Übertragungen befassen.
Es gibt zwei Übertragungsfälle, für die eine Kompatibilitätsschicht erforderlich ist, die sich jeweils in zwei Unterkategorien unterteilen lassen:
Veraltete Anwendung, die Daten von einem Windows Vista-Treiber überträgt:
- Dateiübertragung: Die Anwendung ruft IWiaDataTransfer::idtGetBandedData auf.
- Callback-Übertragung: Die Anwendung ruft IWiaDataTransfer::idtGetData auf.
Eine Windows Vista-Anwendung, die Daten von einem veralteten Treiber überträgt:
- Dateiübertragung: Die Kompatibilitätsschicht initiiert die Dateiübertragung mit dem veralteten Treiber.
- Callback-Übertragung: Die Kompatibilitätsschicht leitet eine Callback-Übertragung mit dem veralteten Treiber ein.
Der erste Schritt bei der Entscheidung, ob die Kompatibilitätsschicht verwendet werden soll, besteht darin, festzustellen, ob es sich bei einem WIA-Treiber um einen Windows Vista-Treiber oder um einen veralteten Treiber handelt. Der WIA-Dienst ermittelt dies anhand der Versionsnummer, die ein Treiber von IStiUSD::GetCapabilities zurückgibt. Ein veralteter Treiber gibt als Versionsnummer STI_VERSION zurück, während ein Windows Vista-Treiber STI_VERSION_3 zurückgeben muss. Diese Versionsnummer wird dem WIA COM Proxy (und einer WIA-Anwendung) in der Windows Vista-Eigenschaft WIA_DIP_STI_DRIVER_VERSION angezeigt.
Der nächste Schritt, um festzustellen, ob eine Anwendung eine Windows Vista-WIA-Anwendung oder eine veraltete WIA-Anwendung ist, ist einfach: Wenn die Anwendung IWiaDataTransfer::idtGetBandedData oder IWiaDataTransfer::idtGetData aufruft, handelt es sich um eine veraltete WIA-Anwendung, wenn die Anwendung IWiaTransfer::Download aufruft, um eine Windows Vista-WIA-Anwendung.
Mit dem neuen stream-basierten Datentransfermodell wird der WIA-Dienst nicht mehr zwischen TYMED_CALLBACK und TYMED_FILE (oder TYMED_MULTIPAGE_CALLBACK und TYMED_MULTIPAGE_FILE) unterscheiden. Stattdessen wird es nur noch TYMED_FILE und TYMED_MULTIPAGE_FILE geben. TYMED_MULTIPAGE_FILE wird benötigt, um Treibern die Möglichkeit zu bieten, mehrseitige TIFF- (oder PDF-) Scans zu unterstützen. Weitere Informationen zu den TYMED-Konstanten finden Sie unter TYMED verstehen.
WIA unterstützt das In-Memory-Bitmap-Format WiaImgFmt_MEMORYBMP in Windows Vista-Treibern nicht.
Windows Vista-Treiber können Update-Nachrichten senden, um Daten in Streifen zu übertragen, anstatt dass der Treiber das gesamte Bild während einer Übertragung zwischenspeichern muss. Diese Form der Übertragung ist nützlich für die Übertragung von Daten bei Scans, bei denen es nicht sofort möglich ist, die Größe des zu übertragenden Bildes zu bestimmen, z. B. bei einem Scan mit einem Scanner mit Scroll-Einzug. Um Bilddaten in Streifen zu übertragen, muss der Treiber IStream::Seek auf dem Stream aufrufen, der ihm in IWiaTransferCallback::GetNextStream übergeben wurde.
Weitere Informationen über TYMED und Stream-basierte Übertragungen finden Sie unter Datenübertragungen.
Die Schnittstellen IWiaDataTransfer, IWiaTransfer und IStream werden in der Microsoft Windows SDK-Dokumentation beschrieben.