未処理のコンテキスト ハンドルを使用したサーバーのアンロード

従来、ホスト プロセスを最初に停止せずに、コンテキスト ハンドルを使用して RPC 呼び出しを処理する DLL をアンロードすることは問題でした。 これは、DLL がアンロードされるときに、ランダウン ルーチンが無効になったためです。 以前に開いたコンテキスト ハンドルを持つクライアントが失敗し、RPC ランタイムがコンテキスト ハンドルを閉じようとすると、ランダウン ルーチン アクセスを呼び出そうとすると違反し、サーバーがクラッシュします。

Windows XP 以降、 RpcServerUnregisterIfEx という新しい API が追加されました。 RpcServerUnregisterIfEx は、登録解除中のインターフェイスによって開かれたコンテキスト ハンドルを閉じます。 RpcServerUnregisterIf 関数は機能しません。 プロセス全体がシャットダウンするときに RpcServerUnregisterIfEx を使用する必要はありませんが、未処理のコンテキスト ハンドルが存在する間に、ランダウン ルーチンをホストする 1 つ以上の DLL がアンロードされる場合は必要です。