卸载具有未完成上下文句柄的服务器

传统上,卸载使用上下文句柄为 RPC 调用提供服务的 DLL,而不首先停止托管进程是有问题的。 这是因为在卸载 DLL 时,运行例程不再有效。 如果具有以前打开的上下文句柄的客户端失败,并且 RPC 运行时尝试关闭上下文句柄,则其调用运行例程访问的尝试会违反,并且服务器崩溃。

从 Windows XP 开始,添加了名为 RpcServerUnregisterIfEx 的新 API。 RpcServerUnregisterIfEx 关闭由正在注销的接口打开的上下文句柄; RpcServerUnregisterIf 函数没有。 当整个进程关闭时,不需要使用 RpcServerUnregisterIfEx,但如果一个或多个托管运行例程的 DLL 在存在未完成的上下文句柄时卸载,则有必要使用 RpcServerUnregisterIfEx