using System; namespace ZeroLevel.Services.Impersonation { /// /// Класс исполняющий произвольный код с правами указанного пользователя /// public class UserImpersonationExecutor : IImpersonationExecutor { private string USR { get; set; } private string DOMAIN { get; set; } private string PWD { get; set; } private ImpersonationNativeMethods.LogonType logonType = ImpersonationNativeMethods.LogonType.LOGON32_LOGON_INTERACTIVE; public UserImpersonationExecutor(string userName, string domainName, string password) { USR = userName; DOMAIN = domainName; PWD = password; } /// /// Исполнение кода /// /// Тип передаваемого аргумента /// Делегат /// Аргумент public void ExecuteCode(Action action, T arg) { using (Impersonation imp = new Impersonation()) { imp.ImpersonateByUser(USR, DOMAIN, PWD, logonType); action(arg); } } /// /// Исполнение кода /// /// Тип передаваемого аргумента /// Делегат public void ExecuteCode(Action action) { using (Impersonation imp = new Impersonation()) { imp.ImpersonateByUser(USR, DOMAIN, PWD, logonType); action(); } } } }