Поделиться через


Требования к серверу DLL

Хотя большинство библиотек DLL могут выполняться в суррогатном режиме, некоторые библиотеки DLL не могут выполняться.

Библиотека DLL должна быть хорошо вести себя, если вы хотите использовать суррогат, предоставленный системой. Например, библиотека DLL, которая вызывает методы, которые регистрируют обратные вызовы от клиента, попытаются вызвать эти обратные вызовы, как если бы полученные указатели функции были для инструкций в адресном пространстве, что не так. Аналогичным образом библиотека DLL, использующая глобальную переменную, которая ожидает, что клиент будет получать доступ к ней, не будет работать. Как правило, параметры, которые не могут быть должным образом маршалированы, препятствуют запуску сервера DLL вне клиентского процесса. Во многих случаях можно написать пользовательский суррогат специально предназначен для компенсации "плохого" поведения. (Дополнительные сведения см. в разделе Написание пользовательского суррогата.)

Если сервер DLL использует пользовательские интерфейсы, необходимо убедиться, что для этих интерфейсов доступен код маршалинга. Например, можно создать и зарегистрировать библиотеку типов прокси-сервера или зарегистрировать библиотеку типов, которая позволит серверу работать правильно во время работы в суррогате.

Серверы DLL будут загружены только в суррогатный процесс, выполняемый в соответствующем контексте безопасности. Контекст безопасности суррогата сервера DLL определяется так же, как и для серверов EXE. Суррогат сервера DLL выполняется в том же контексте безопасности, что и клиент, если значение RunAs , определяющее контекст безопасности, задано в разделе реестра AppID для сервера.

Суррогаты DLL