Пример #1
0
        public static bool DoWorkImpersonated(WorkImpersonatedDelegate StuffToDo)
        {
            // Call LogonUser to get a token for the user
            IntPtr _Token   = IntPtr.Zero;
            string username = OMLSettings.ImpersonationUsername;
            string password = OMLSettings.ImpersonationPassword;
            bool   loggedOn = LogonUser(
                username,
                System.Environment.UserDomainName,
                password,
                LOGON32_LOGON_NETWORK,
                LOGON32_PROVIDER_DEFAULT,
                ref _Token);

            if (!loggedOn)
            {
                throw new Win32Exception(Marshal.GetLastWin32Error());
            }

            // Begin impersonating the user
            WindowsImpersonationContext impersonationContext = null;

            try
            {
                WindowsIdentity.Impersonate(_Token);
                StuffToDo();
            }
            finally
            {
                // Clean up
                CloseHandle(_Token);
                if (impersonationContext != null)
                {
                    impersonationContext.Undo();
                }
            }
            return(false);
        }
Пример #2
0
        public static bool DoWorkImpersonated(WorkImpersonatedDelegate StuffToDo)
        {
            // Call LogonUser to get a token for the user
            IntPtr _Token = IntPtr.Zero;
            string username = OMLSettings.ImpersonationUsername;
            string password = OMLSettings.ImpersonationPassword;
            bool loggedOn = LogonUser(
                username,
                System.Environment.UserDomainName,
                password,
                LOGON32_LOGON_NETWORK,
                LOGON32_PROVIDER_DEFAULT,
                ref _Token);
            if (!loggedOn)
                throw new Win32Exception(Marshal.GetLastWin32Error());

            // Begin impersonating the user
            WindowsImpersonationContext impersonationContext = null;
            try
            {
                WindowsIdentity.Impersonate(_Token);
                StuffToDo();
            }
            finally
            {
                // Clean up
                CloseHandle(_Token);
                if (impersonationContext != null)
                    impersonationContext.Undo();
            }
            return false;
        }