Änderungen des IStream-Datenübertragungstreibers
Um Änderungen an Treibern zu minimieren, die vor Windows Vista entwickelt wurden, müssen die Treiber keine neuen Schnittstellen implementieren, um die IStream-Datenübertragung zu unterstützen. Stattdessen wurde eine neue Schnittstelle über die IWiaMiniDrvCallBack-Schnittstelle verfügbar gemacht. Treiber können IWiaMiniDrvCallBack::QueryInterface für die neue IWiaTransfer-Rückruffunktion aufrufen, die ihnen Zugriff auf die Datenströme und status Benachrichtigungen ermöglicht. Die IWiaTransfer-Schnittstelle wird in der Microsoft Windows SDK-Dokumentation beschrieben.
Der Datenübertragungscode innerhalb des Treibers ist jetzt einfacher, da alle Übertragungen auf die gleiche Weise ohne Datei- oder Speicherübertragungsbranchlogik verarbeitet werden.
Treiber, die das IStream-Übertragungsmodell nicht unterstützen, führen in der Regel die folgenden Schritte aus:
Überprüfen Sie die Flags, um festzustellen, ob es sich bei der Anforderung um einen Upload oder einen Download handelt.
Rufen Sie die IWiaMiniDrvCallBack-Schnittstelle ab.
Empfangen eines Zieldatenstroms von der Rückruffunktion.
Führen Sie eine Datenübertragungsschleife aus:
- Empfangen von Daten vom Gerät.
- Schreiben von Daten in den Stream.
Für Treiber, die das neue IStream-Übertragungsmodell implementieren, ruft der WIA-Dienst jedoch IWiaMiniDrv::d rvWriteItemProperties nicht auf, da der Ordnererwerb unterstützt wird.
Beim Ordnererwerb befindet sich eine einzelne Übertragungsanforderung für das übergeordnete Element, aber die tatsächlichen Elementeigenschaften befinden sich für jedes der untergeordneten Elemente, die übertragen werden. Die IWiaMiniDrv::d rvWriteItemProperties-Methode wird nicht für jedes untergeordnete Element aufgerufen, sodass diese Methode nicht zum Programmieren der Geräteeinstellungen verwendet werden kann. Für Treiber, die IStream-Datenübertragungen unterstützen, ruft der WIA-Dienst stattdessen IWiaMiniDrv::d rvAcquireItemData auf.
Hinweis Diese Änderung betrifft nur Treiber, die die neuen Datenübertragungen unterstützen. Legacytreiber, die keine IStream-Datenübertragungen unterstützen, sind nicht betroffen. Der WIA-Dienst ruft weiterhin die IWiaMiniDrv::d rvWriteItemProperties-Methode für sie auf.
Bei Ordnerkäufen, bei denen der Treiber mehrere Aufrufe von IWiaTransferCallback::GetNextStream durchführt (was in der Microsoft Windows SDK-Dokumentation beschrieben wird), kann der Treiber jeweils nur einen aktiven Stream haben.
Der Treiber darf während eines Downloadvorgangs nur die Methoden IStream::Write, IStream::Seek und IStream::SetSize des Streams aufrufen (die in der Windows SDK-Dokumentation beschrieben sind). Diese Einschränkung erleichtert Ihnen das Schreiben des Filters. Der Treiber sollte nicht erwarten, dass der Zieldatenstrom andere Methoden implementiert.
Wenn die eigenschaft WIA_DPS_PAGE_SIZE auf WIA_PAGE_AUTO festgelegt ist (d. h. die automatische Erkennung der Seitengröße ist aktiviert), sollte der Treiber erst nach Abschluss der Übertragung der Bilddaten genaue Dimensionsinformationen zum Bild bereitstellen. Bei streambasierten Übertragungen sollte der Treiber die Bilddimensionen im Bildheader am Ende der Übertragung aktualisieren. Zu Beginn einer neuen Sitzung sollte der Wert für WIA_DPS_PAGE_SIZE Eigenschaft immer auf einen anderen Wert als WIA_PAGE_AUTO festgelegt werden.