Delen via


Vereisten voor DLL-server

Hoewel de meeste DLL's in een surrogaat kunnen worden uitgevoerd, kunnen sommige DLL's dat niet.

Het DLL-bestand moet goed werken als u de door het systeem geleverde surrogaat wilt gebruiken. Een DLL die bijvoorbeeld methoden aanroept waarmee callbacks van de client worden geregistreerd, probeert deze callbacks aan te roepen alsof de functieaanwijzers die zijn ontvangen voor instructies in de adresruimte, wat niet het geval is. Een DLL die gebruikmaakt van een globale variabele die verwacht dat de client toegang krijgt, werkt ook niet. Over het algemeen kunnen parameters die niet goed marshaled kunnen worden gebruikt, voorkomt u dat de DLL-server buiten het clientproces wordt uitgevoerd. In veel gevallen kunt u een aangepast surrogaat schrijven dat speciaal is ontworpen om 'slecht' gedrag te compenseren. (Zie Een aangepaste surrogaatschrijven voor meer informatie.)

Als de DLL-server gebruikmaakt van aangepaste interfaces, moet u ervoor zorgen dat marshaling-code beschikbaar is voor deze interfaces. U kunt bijvoorbeeld een proxy-DLL bouwen en registreren of een typebibliotheek opgeven en registreren waarmee de server correct kan functioneren terwijl deze wordt uitgevoerd in een surrogaat.

DLL-servers worden alleen geladen in een surrogaatproces dat wordt uitgevoerd in de juiste beveiligingscontext. De beveiligingscontext voor het DLL-server surrogaat wordt op dezelfde manier bepaald als voor EXE-servers. De DLL-server surrogaat wordt uitgevoerd in dezelfde beveiligingscontext als de client, tenzij een RunAs waarde, die de beveiligingscontext bepaalt, wordt ingesteld in de AppID registersectie voor de server.

DLL-surrogaten