Maison > développement back-end > C++ > Comment exécuter un processus .NET en tant qu'utilisateur différent à l'aide de l'usurpation d'identité ?

Comment exécuter un processus .NET en tant qu'utilisateur différent à l'aide de l'usurpation d'identité ?

Patricia Arquette
Libérer: 2025-01-11 11:41:42
original
635 Les gens l'ont consulté

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

Démarrez un processus .NET en tant qu'utilisateur différent via l'usurpation d'identité

Grâce à la simulation, vous pouvez démarrer le processus avec des privilèges d'administrateur. L'usurpation d'identité permet à un processus de s'exécuter en tant qu'utilisateur différent avec des privilèges élevés.

Cours auxiliaire de simulation

Le code que vous fournissez utilise la classe ImpersonationHelper pour usurper l'identité d'un utilisateur disposant des informations d'identification requises. Cette classe établit un jeton d'accès et emprunte l'identité de l'utilisateur spécifié, accordant au processus les autorisations nécessaires pour s'exécuter en tant qu'administrateur.

<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>
Copier après la connexion

Démarrer le processus

Au sein du bloc using, activez la simulation. Par la suite, la classe Process est utilisée pour démarrer un nouveau processus avec le nom de fichier spécifié comme argument.

<code class="language-csharp">using (new ImpersonationHelper("xxx.blabla.com", "xxxx", "xxxx"))
{
    if (!string.IsNullOrEmpty(txtFilename.Text))
        Process.Start(txtFilename.Text);
}</code>
Copier après la connexion

Une alternative à l'utilisation de chaînes sécurisées

Vous pouvez également démarrer le processus en tant qu'utilisateur différent en définissant manuellement l'attribut StartInfo comme suit :

<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>
Copier après la connexion

En fournissant SecureString le mot de passe, vous vous assurez que le mot de passe est géré de manière sécurisée et n'est pas stocké dans la mémoire de texte clair.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal