Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menjalankan Proses .NET sebagai Pengguna Berbeza Menggunakan Penyamaran?

Bagaimana untuk Menjalankan Proses .NET sebagai Pengguna Berbeza Menggunakan Penyamaran?

Patricia Arquette
Lepaskan: 2025-01-11 11:41:42
asal
588 orang telah melayarinya

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

Mulakan proses .NET sebagai pengguna berbeza melalui penyamaran

Melalui simulasi, anda boleh memulakan proses dengan keistimewaan pentadbir. Penyamaran membenarkan proses berjalan sebagai pengguna berbeza dengan keistimewaan yang tinggi.

Kelas tambahan simulasi

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>
Salin selepas log masuk

Mulakan proses

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>
Salin selepas log masuk

Alternatif untuk menggunakan rentetan selamat

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan