Impersonation and Asynchronous Calls
The server cannot impersonate the client after the server's call to ISynchronize::Signal completes, even if the Begin_ method has not yet completed. For example, suppose a client calls the Begin_ method, the server processes the call immediately, and the server calls Signal to indicate it is finished processing. Even if work remains to be done in the Begin_ method, the server cannot impersonate the client after the call to Signal completes.
If the server impersonates the client before it calls Signal, the impersonation token will not be removed from the thread until the server calls IServerSecurity::RevertToSelf or until the server's call to Begin_ returns, whichever comes first.