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,
            }
        }
    
    }
  • 相关阅读:
    18、排序算法-快速排序
    centos7.x 端口映射
    SpringBoot多环境分离resources和lib进行打包
    Java枚举储存的一种索引实现方式
    Maven项目pom文件设置JDK版本
    Java提取URL某个参数的值
    使用正则替换script及其内容
    Oracle设置主键自增
    Maven配置ojdbc14-10.2.0.4.0.jar
    使用maven生成可执行jar包(包含依赖)
  • 原文地址:https://www.cnblogs.com/nanfei/p/5105350.html
Copyright © 2011-2022 走看看