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


Выгрузка сервера с необработанными дескрипторами контекста

Традиционно выгрузка библиотеки DLL, которая обслуживает вызовы RPC с помощью дескрипторов контекста, без предварительной остановки процесса размещения, была проблематичной. Это связано с тем, что подпрограмма запуска больше не действительна при выгрузке библиотеки DLL. Если клиент с ранее открытым дескриптором контекста завершается сбоем и во время выполнения RPC пытается закрыть дескриптор контекста, его попытка вызвать доступ к неработоприятной подпрограмме нарушается, и сервер аварийно завершает работу.

Начиная с Windows XP, добавлен новый API с именем RpcServerUnregisterIfEx . RpcServerUnregisterIfEx закрывает дескрипторы контекста, открытые незарегистрированным интерфейсом; Функция RpcServerUnregisterIf не выполняет. Использование RpcServerUnregisterIfEx не требуется при завершении всего процесса, но это необходимо, если одна или несколько библиотек DLL, в которых размещены подпрограммы запуска, выгружаются при наличии необработанных дескрипторов контекста.