Condividi tramite


Scaricamento di un server con handle di contesto pendenti

Tradizionalmente, lo scaricamento di una DLL che esegue chiamate RPC tramite handle di contesto, senza prima arrestare il processo di hosting, è stato problematico. Ciò è dovuto al fatto che la routine di esecuzione non è più valida quando la DLL viene scaricata. Quando un client con un handle di contesto aperto in precedenza fallisce, e il runtime RPC tenta di chiudere l'handle di contesto, il suo tentativo di chiamare la routine di terminazione causa una violazione di accesso e il server si arresta in modo anomalo.

A partire da Windows XP, è stata aggiunta una nuova API denominata RpcServerUnregisterIfEx. RpcServerUnregisterIfEx chiude gli handle di contesto aperti dall'interfaccia di cui si annulla la registrazione; la funzione RpcServerUnregisterIf non lo fa. L'uso di RpcServerUnregisterIfEx non è necessario quando l'intero processo viene arrestato, ma è necessario se sono presenti una o più DLL che ospitano le routine di run-down mentre esistono handle di contesto in sospeso.