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.
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>
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>
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>
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!