Heim >Backend-Entwicklung >C++ >Wie führe ich einen .NET-Prozess mithilfe von Identitätswechsel als anderer Benutzer aus?
Durch die Simulation können Sie den Prozess mit Administratorrechten starten. Durch Identitätswechsel kann ein Prozess als ein anderer Benutzer mit erhöhten Rechten ausgeführt werden.
Der von Ihnen bereitgestellte Code nutzt die Klasse ImpersonationHelper
, um sich als Benutzer mit den erforderlichen Anmeldeinformationen auszugeben. Diese Klasse erstellt ein Zugriffstoken und verkörpert den angegebenen Benutzer, wodurch dem Prozess die erforderlichen Berechtigungen für die Ausführung als Administrator erteilt werden.
<code class="language-csharp">public ImpersonationHelper(string domain, string user, string password) { // 调用 LogonUser 获取访问令牌的句柄。 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); } // 模拟 m_impersonatedUser = new WindowsIdentity(m_tokenHandle).Impersonate(); }</code>
Aktivieren Sie im Block using
die Simulation. Anschließend wird die Klasse Process
verwendet, um einen neuen Prozess mit dem angegebenen Dateinamen als Argument zu starten.
<code class="language-csharp">using (new ImpersonationHelper("xxx.blabla.com", "xxxx", "xxxx")) { if (!string.IsNullOrEmpty(txtFilename.Text)) Process.Start(txtFilename.Text); }</code>
Alternativ können Sie den Vorgang als anderer Benutzer starten, indem Sie das Attribut StartInfo
manuell wie folgt festlegen:
<code class="language-csharp">System.Diagnostics.Process proc = new System.Diagnostics.Process(); System.Security.SecureString ssPwd = new System.Security.SecureString(); proc.StartInfo.UseShellExecute = false; proc.StartInfo.FileName = "filename"; proc.StartInfo.Arguments = "args..."; proc.StartInfo.Domain = "domainname"; proc.StartInfo.UserName = "username"; string password = "用户输入的密码"; for (int x = 0; x < password.Length; x++) { ssPwd.AppendChar(password[x]); } password = ""; proc.StartInfo.Password = ssPwd; proc.Start();</code>
Durch die Angabe von SecureString
für das Passwort stellen Sie sicher, dass das Passwort sicher gehandhabt wird und nicht im Klartextspeicher abgelegt wird.
Das obige ist der detaillierte Inhalt vonWie führe ich einen .NET-Prozess mithilfe von Identitätswechsel als anderer Benutzer aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!