Heim >Backend-Entwicklung >C++ >Wie führe ich einen .NET-Prozess mithilfe von Identitätswechsel als anderer Benutzer aus?

Wie führe ich einen .NET-Prozess mithilfe von Identitätswechsel als anderer Benutzer aus?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-11 11:41:42589Durchsuche

How to Run a .NET Process as a Different User Using Impersonation?

Starten Sie einen .NET-Prozess als anderer Benutzer durch Identitätswechsel

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.

Simulationshilfsklasse

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>

Vorgang starten

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>

Eine Alternative zur Verwendung sicherer Zeichenfolgen

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn