Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menjalankan Proses .NET sebagai Pengguna Berbeza Menggunakan Penyamaran?
Melalui simulasi, anda boleh memulakan proses dengan keistimewaan pentadbir. Penyamaran membenarkan proses berjalan sebagai pengguna berbeza dengan keistimewaan yang tinggi.
Kod yang anda berikan menggunakan kelas ImpersonationHelper
untuk menyamar sebagai pengguna dengan kelayakan yang diperlukan. Kelas ini menetapkan token akses dan menyamar sebagai pengguna yang ditentukan, memberikan proses kebenaran yang diperlukan untuk dijalankan sebagai pentadbir.
<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>
Dalam blok using
, aktifkan simulasi. Selepas itu, kelas Process
digunakan untuk memulakan proses baharu dengan nama fail yang ditentukan sebagai argumen.
<code class="language-csharp">using (new ImpersonationHelper("xxx.blabla.com", "xxxx", "xxxx")) { if (!string.IsNullOrEmpty(txtFilename.Text)) Process.Start(txtFilename.Text); }</code>
Sebagai alternatif, anda boleh memulakan proses sebagai pengguna lain dengan menetapkan atribut StartInfo
secara manual seperti berikut:
<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>
Dengan menyediakan SecureString
untuk kata laluan, anda memastikan kata laluan dikendalikan dengan selamat dan tidak disimpan dalam memori teks yang jelas.
Atas ialah kandungan terperinci Bagaimana untuk Menjalankan Proses .NET sebagai Pengguna Berbeza Menggunakan Penyamaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!