为了账号安全,请及时绑定邮箱和手机立即绑定

以其他用户身份启动.Net进程

以其他用户身份启动.Net进程

C#
慕妹3242003 2019-09-26 10:37:52
我想启动一个具有管理员权限的进程。当我在下面运行代码时,Process抱怨说它需要管理员权限:public class ImpersonationHelper : IDisposable{     IntPtr m_tokenHandle = new IntPtr(0);     WindowsImpersonationContext m_impersonatedUser;     #region Win32 API Declarations     const int LOGON32_PROVIDER_DEFAULT = 0;     const int LOGON32_LOGON_INTERACTIVE = 2;    //This parameter causes LogonUser to create a primary token.     [DllImport("advapi32.dll", SetLastError = true)]     public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,     int dwLogonType, int dwLogonProvider, ref IntPtr phToken);     [DllImport("kernel32.dll", CharSet = CharSet.Auto)]     public extern static bool CloseHandle(IntPtr handle);     [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]     public extern static bool DuplicateToken(IntPtr ExistingTokenHandle,     int SECURITY_IMPERSONATION_LEVEL, ref IntPtr DuplicateTokenHandle);     #endregion     /// <summary>     /// Constructor. Impersonates the requested user. Impersonation lasts until     /// the instance is disposed.     /// </summary>     public ImpersonationHelper(string domain, string user, string password)     {         // Call LogonUser to obtain a handle to an access token.         bool returnValue = LogonUser(user, domain, password,             LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,             ref m_tokenHandle);         if (false == returnValue)         {             int ret = Marshal.GetLastWin32Error();             throw new System.ComponentModel.Win32Exception(ret);         }         // Impersonate         m_impersonatedUser = new WindowsIdentity(m_tokenHandle).Impersonate();     }     #region IDisposable Pattern     /// <summary>     /// Revert to original user and cleanup.     /// </summary>     protected virtual void Dispose(bool disposing)     {         if (disposing)         {             // Revert to original user identity             if (m_impersonatedUser != null)                 m_impersonatedUser.Undo();         }
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 439 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信