Partager via


Configuration requise du serveur DLL

Bien que la plupart des DLL puissent s’exécuter dans un substitut, certaines DLL ne le peuvent pas.

La DLL doit se comporter correctement si vous souhaitez utiliser le substitut fourni par le système. Par exemple, une DLL qui appelle des méthodes qui inscrivent des rappels à partir du client essayerait d’appeler ces rappels comme si les pointeurs de fonction qu’elle a reçus étaient pour des instructions dans son espace d’adressage, ce qui n’est pas le cas. De même, une DLL qui utilise une variable globale à laquelle il s’attend à ce que le client accède ne fonctionne pas. En général, les paramètres qui ne peuvent pas être correctement marshalés empêchent le serveur DLL de s’exécuter en dehors du processus client. Dans de nombreux cas, vous pouvez écrire un substitut personnalisé spécifiquement conçu pour compenser le « mauvais » comportement. (Pour plus d’informations, consultez Écriture d’un substitut personnalisé.)

Si le serveur DLL utilise des interfaces personnalisées, vous devez vous assurer que le code de marshaling est disponible pour ces interfaces. Par exemple, vous pouvez créer et inscrire une DLL proxy ou fournir et inscrire une bibliothèque de types qui permettrait au serveur de fonctionner correctement lors de l’exécution dans un substitut.

Les serveurs DLL ne seront chargés que dans un processus de substitution s’exécutant dans le contexte de sécurité approprié. Le contexte de sécurité pour le serveur de substitution DLL est déterminé de la même manière que pour les serveurs EXE. Le serveur de substitution DLL s’exécute dans le même contexte de sécurité que le client, sauf si une valeur RunAs , qui détermine le contexte de sécurité, est définie dans la section Registre AppID pour le serveur.

Substituts DLL