Ejecutar código como un usuario diferente

¿Hay alguna manera de decirle a mi código que se ejecute como un usuario diferente?

Estoy llamando a NetUserSetInfo a través de un PInvoke y necesito llamarlo como un usuario diferente. ¿Hay una manera de hacer eso?

La suplantación requiere llamar a algunas API nativas (es decir, LogonUser) por lo que probablemente no valga la pena publicar 3 páginas de código contenedor. Esta página tiene una muestra de trabajo completa: http://platinumdogs.wordpress.com/2008/10/30/net-c-impersonation-with-network-credentials/

Tenga en cuenta que la suplantación tiene importantes consideraciones de seguridad. Asegúrate de seguir las mejores prácticas.

Probablemente el mejor y más limpio código que he visto hasta ahora es este

using (Impersonation.LogonUser(domain, username, password, logonType)) { // do whatever you want as this user. } 

Solo sigue a Github o Nuget .

Este artículo lo explica muy sucintamente:

Aquí hay un fragmento de código del artículo:

 IntPtr accessToken = IntPtr.Zero; .... //You have to initialize your accessToken with API calling .... WindowsIdentity identity = new WindowsIdentity(accessToken); WindowsImpersonationContext context = identity.Impersonate(); ... // Now your code is using the new WindowsLogin and you can do what ever this login can do ... //Now you can return to your current login of Windows context.Undo(); 

Sí. La suplantación ayuda a ejecutar algún código como usuario diferente. Funciona bien en mi caso. (Gracias a Milan Matějka)

También encontré un enlace Ref. Espero que te ayude a obtener el paquete de nuget fácilmente: http://iamfixed.blogspot.de/2017/11/run-code-as-different-user-in-c-from.html