Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De compatibiliteitslaag moet ervoor zorgen dat het filter voor afbeeldingsverwerking van het stuurprogramma altijd wordt aangeroepen en dat een verouderde toepassing die niet expliciet ondersteuning biedt voor het LocalService-account , nog steeds een gegevensoverdracht kan uitvoeren. Het LocalService-account is beschikbaar op Microsoft Windows XP en latere besturingssystemen.
Minimaal moet een verouderd stuurprogramma zowel TYMED_FILE als TYMED_CALLBACK beschikbaar maken; Een Windows Vista-stuurprogramma zal echter nooit TYMED_CALLBACK (of TYMED_MULTIPAGE_CALLBACK) beschikbaar maken. Het overdrachtsgedeelte van de compatibiliteitslaag zorgt ervoor dat een verouderde toepassing TYMED_CALLBACK ziet, hoewel het Windows Vista-stuurprogramma het niet implementeert. TYMED_MULTIPAGE_CALLBACK wordt nooit blootgesteld aan een Windows Vista-stuurprogramma.
Een verouderde toepassing zal de door het Windows Vista-stuurprogramma ondersteunde indelingen voor TYMED_FILE en TYMED_MULTIPAGE_FILE zien. Voor TYMED_CALLBACK ziet een verouderde toepassing dezelfde indelingen als het stuurprogramma beschikbaar maakt voor TYMED_FILE, met één uitzondering: in plaats van WiaImgFmt_BMP weer te geven, wordt de compatibiliteitslaag WiaImgFmt_MEMORYBMP beschikbaar gemaakt voor de verouderde toepassing. Dit doet u door de compatibiliteitslaag te gebruiken om aanroepen naar IWiaMiniDrv::drvGetWiaFormatInfo te onderscheppen en alle TYMED_FILE-formaten van het Windows Vista-stuurprogramma toe te voegen (met uitzondering van WiaImgFmt_BMP /WiaImgFmt_MEMORYBMP) voor TYMED_CALLBACK. Het belangrijkste is dat de compatibiliteitslaag tijdens gegevensoverdrachten een eigen legacy callback-object aanmaakt, waarmee het Windows Vista-overdrachtsberichten en de gegevens die in zijn stroom zijn geschreven, omzet naar legacy overdrachtsberichten.
Zie Understanding TYMED voor meer informatie over de TYMED-constanten.
De compatibiliteitslaag maakt twee callback-objecten in de WIA COM-proxy: één voor callback-overdrachten en één voor bestandsoverdrachten. De WIA COM-proxy implementeert de IWiaTransferCallback-interface. Dit callback-object zorgt voor de conversie tussen streamgebaseerde overdracht en 'oude' overdracht. De WIA-compatibiliteitslaag initieert ook het filter voor afbeeldingsverwerking van het stuurprogramma waarnaar we het callback-object van de compatibiliteitslaag doorgeven. Het filter voor afbeeldingsverwerking wordt dus altijd uitgevoerd in de context van de toepassing, net als bij Windows Vista-overdrachten.
In het volgende diagram ziet u hoe de compatibiliteitslaag zou werken met een Windows Vista-stuurprogramma en een verouderde toepassing.
Het verouderde callback-object in de WIA COM-proxy converteert Windows Vista-overdrachtsberichten en -gegevens, die in de gegevensstroom zijn geschreven, in verouderde overdrachtsberichten, en schrijft gegevens naar een bestand of gestreepte gegevens in een callback.
Wanneer het stuurprogramma een van de methoden aanroept die worden weergegeven door de IStream-interface die het ontvangt van de methode IWiaMiniDrvTransferCallback::GetNextStream (let op: een stuurprogramma mag alleen IStream::Write, IStream::Seek en IStream::SetSize aanroepen). De compatibiliteitslaag maakt dus een aangepaste IStream-implementatie die simpelweg de IStream-interface verpakt die de WIA COM-proxy biedt.
Legacy bestandsoverdrachten zijn eenvoudig. Een voorbeeld van een dergelijke overdracht is wanneer een verouderde toepassing IWiaDataTransfer::idtGetData aanroept. De compatibiliteitslaag genereert een datastroom in het bestand dat de applicatie opgeeft binnen de STGMEDIUM-structuur. Deze stroom wordt doorgegeven aan het stuurprogramma- of afbeeldingsverwerkingsfilter wanneer deze IWiaTransferCallback aanroept::GetNextStream en alle overdrachtsberichten worden eenvoudig toegewezen aan verouderde overdrachtsberichten. Voor een gedetailleerde beschrijving van hoe de berichten worden toegewezen, zie de implementatie van WIA-compatibiliteitslaaggegevensoverdracht.
Wanneer u de methode IWiaDataTransfer::d tGetData aanroept, voert de compatibiliteitslaag een strengere parametercontrole uit. De compatibiliteitslaag staat bijvoorbeeld niet toe om de methode IWiaDataTransfer::idtGetData aan te roepen met TYMED_FILE en een paginaaantal hoger dan één. In gegevensoverdrachten die niet gebruikmaken van de compatibiliteitslaag, was het mogelijk om de methode IWiaDataTransfer::idtGetData aan te roepen met TYMED_FILE en een paginaaantal groter dan één te beheren.
Oudere callback-overdrachten zijn een beetje lastiger. Omdat een Windows Vista-stuurprogramma geen ondersteuning biedt voor WiaImgFmt_MEMORYBMP, wat vereist is voor oudere stuurprogramma's, moet het callback-object van de compatibiliteitslaag de conversie van WiaImgFmt_BMP naar WiaImgFmt_MEMORYBMP verwerken. De koppeling tussen overdrachtsberichten is ook niet erg eenvoudig. De compatibiliteitslaag maakt een eigen stream-implementatie. De compatibiliteitslaag verzendt IT_MSG_DATA berichten naar de callback van de toepassing bij aanroepen naar de methode IStream::Write door de toepassing.
Er moest een wijziging worden aangebracht in de IWiaTransfer-interface als onderdeel van de implementatie van de compatibiliteitslaag; De functie IWiaTransfer::EnumWIA_FORMAT_INFO wordt toegevoegd aan IWiaTransfer om TYMED_MULTIPAGE_FILE overdrachten toe te staan. Deze toevoeging is geen gevolg van de compatibiliteitslaag, maar is noodzakelijk omdat het niet mogelijk is om naar de IWiaDataTransfer-interface van de IWiaTransfer-interface of van de IWiaItem2-interface naar de IWiaItem-interface te gaan.
De IWiaDataTransfer-, IWiaTransfer-, IWiaItem-, IWiaItem2- en IStream-interfaces en de STGMEDIUM-structuur worden besproken in de Microsoft Windows SDK-documentatie.