Gegevensoverdracht tussen Windows Vista-toepassing en verouderd stuurprogramma

De compatibiliteitslaag maakt het mogelijk dat een Windows Vista-toepassing IWiaTransfer::Download (beschreven in de Microsoft Windows SDK-documentatie) kan aanroepen op een verouderd stuurprogramma. De compatibiliteitslaag moet code voor mapoverdracht en indelingsconversies implementeren. De compatibiliteitslaag implementeert speciale code voor feederoverdrachten om ervoor te zorgen dat het altijd mogelijk is om meerdere pagina's van een verouderd stuurprogramma over te dragen. Een Windows Vista-toepassing moet altijd meerdere pagina's kunnen aanvragen tijdens een scan van het feeder-item, zelfs met een TYMED_FILE overdracht. In het volgende diagram ziet u een verouderd stuurprogramma met een Windows Vista-toepassing.

diagram met gegevensoverdracht tussen een Windows Vista-toepassing en een verouderd stuurprogramma.

Het verouderde callback-object in de WIA-service converteert verouderde overdrachtsberichten en -gegevens naar Windows Vista-overdrachtsberichten en schrijft gegevens naar de opgegeven stream.

Een Windows Vista-toepassing verwacht alleen TYMED_FILE en TYMED_MULTIPAGE_FILE, zodat de compatibiliteitslaag verantwoordelijk is voor het garanderen dat TYMED_CALLBACK en TYMED_MULTIPAGE_CALLBACK niet worden blootgesteld aan een Windows Vista-toepassing vanaf een verouderd stuurprogramma.

De eenvoudigste manier om dit deel van de compatibiliteitslaag te implementeren, was om altijd TYMED_FILE en TYMED_MULTIPAGE_FILE in te stellen en het verouderde stuurprogramma aan te roepen. Het nadeel hiervan is dat het stuurprogramma altijd de hele afbeelding had moeten scannen voordat gegevens naar de stroom van de toepassing konden worden geschreven. Daarom gebruikt de compatibiliteitslaag TYMED_CALLBACK wanneer een Windows Vista-toepassing een scan van de indeling WiaImgFmt_BMP aanvraagt (de eigenschap WIA_IPA_FORMAT ingesteld op WiaImgFmt_BMP). Hierdoor kan de compatibiliteitslaag de gegevens band voor band terugschrijven.

Een verouderd stuurprogramma biedt echter geen ondersteuning voor WiaImgFmt_BMP, maar WiaImgFmt_MEMORYBMP voor TYMED_CALLBACK. Daarom moet het callback-object voor conversie de BMP-bestandskoptekst maken en deze bestandskoptekst ook terugschrijven naar de toepassing. Soms is dit eenvoudig, bijvoorbeeld wanneer de BMP-bestandsheader rechtstreeks kan worden samengesteld vanuit de BMP-infoheader. Er zijn echter gevallen waarin de hoogte van de BMP-infoheader is ingesteld op 0. In dit geval moet de WIA-compatibiliteitslaag wachten totdat alle gegevens zijn overgedragen voordat de BMP-bestandskoptekst kan worden geschreven en de BMP-infoheader kan worden bijgewerkt.

De reden dat TYMED-overdrachten, behalve alleen TYMED_CALLBACK, worden uitgevoerd vanuit een verouderd stuurprogramma, is dat indelingen met meerdere pagina's doorgaans alleen worden ondersteund door TYMED_MULTIPAGE_FILE en stuurprogramma's ondersteunen doorgaans meer indelingen voor TYMED_FILE dan voor TYMED_CALLBACK..

Tijdens een TYMED_FILE overdracht wacht de compatibiliteitslaag totdat de overdracht is voltooid voordat de gegevens worden teruggeschreven naar de stroom van de toepassing. Dit wordt gedaan door het bestand toe te wijden aan het geheugen en alle gegevens in het geheugen terug te schrijven in één schrijfaanvraag.

Tijdens een TYMED_CALLBACK overdracht schrijft de compatibiliteitslaag telkens terug naar de stream van de toepassing wanneer er een IT_MSG_DATA overdrachtsbericht van het verouderde stuurprogramma wordt ontvangen.

De compatibiliteitslaag bevat ook een speciale code voor FEEDER-overdrachten. Deze code zorgt ervoor dat de compatibiliteitslaag meerdere pagina's van de ADF kan overdragen, ook al is tymed niet TYMED_MULTIPAGE_FILE. De manier waarop dit wordt gedaan, is door de compatibiliteitslaag meerdere keren aan te roepen in het stuurprogramma, telkens wanneer er slechts één pagina wordt aangevraagd. Deze oplossing zorgt ervoor dat elk verouderd stuurprogramma overdrachten van meerdere pagina's van de feeder kan verwerken wanneer deze wordt aangeroepen door een Windows Vista-toepassing.

Een verouderd stuurprogramma kan 'out-of-band'-berichten verzenden tijdens overdrachten (bijvoorbeeld voor voorbeeldweergave). Deze berichten worden genegeerd omdat ze niet in het streamgebaseerde overdrachtsmodel passen.

Zie Understanding TYMED voor meer informatie over de TYMED-constanten.