zoukankan      html  css  js  c++  java
  • 用户身份模拟

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.ComponentModel;
    using System.Runtime.InteropServices;
    using System.Security.Principal;
    
    namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (var impersonation = new ImpersonatedUser("lenovo", "", "123456", ImpersonatedUser.LogonType.Interactive))
                {
                    //code here
                }
            }
        }
    
        public class ImpersonatedUser : IDisposable
        {
            IntPtr userHandle;
            WindowsImpersonationContext impersonationContext;
    
            public ImpersonatedUser(string user, string domain, string password, LogonType logonType = LogonType.Interactive)
            {
                userHandle = IntPtr.Zero;
                bool loggedOn = LogonUser(
                    user,
                    domain,
                    password,
                    LogonType.Interactive,
                    LogonProvider.Default,
                    out userHandle);
    
                if (!loggedOn)
                    throw new Win32Exception(Marshal.GetLastWin32Error());
    
                // Begin impersonating the user
                impersonationContext = WindowsIdentity.Impersonate(userHandle);
            }
    
            public void Dispose()
            {
                if (userHandle != IntPtr.Zero)
                {
                    CloseHandle(userHandle);
                    userHandle = IntPtr.Zero;
                    impersonationContext.Undo();
                }
            }
    
            [DllImport("advapi32.dll", SetLastError = true)]
            static extern bool LogonUser(
                string lpszUsername,
                string lpszDomain,
                string lpszPassword,
                LogonType dwLogonType,
                LogonProvider dwLogonProvider,
                out IntPtr phToken
                );
    
            [DllImport("kernel32.dll", SetLastError = true)]
            static extern bool CloseHandle(IntPtr hHandle);
    
            public enum LogonType : int
            {
                Interactive = 2,
                Network = 3,
                Batch = 4,
                Service = 5,
                NetworkCleartext = 8,
                NewCredentials = 9,
            }
    
            enum LogonProvider : int
            {
                Default = 0,
            }
        }
    
    }
  • 相关阅读:
    MySQL行级锁、表级锁、页级锁详细介绍
    Spring REST是什么?(转)
    Spring REST(转)
    联系人项目
    三级联动(有刷新)
    Java中点击按钮返回上一页
    Java中隐藏显示效果
    理解RESTful架构(转)
    什么是REST?以及RESTful的实现(转)
    JSTL 核心标签库 使用(转)
  • 原文地址:https://www.cnblogs.com/nanfei/p/5105350.html
Copyright © 2011-2022 走看看