首頁 > 後端開發 > C++ > 如何使用模擬以不同使用者身分執行 .NET 進程?

如何使用模擬以不同使用者身分執行 .NET 進程?

Patricia Arquette
發布: 2025-01-11 11:41:42
原創
588 人瀏覽過

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

透過模擬以不同使用者身分啟動.NET進程

透過模擬可以實現以管理員權限啟動進程。模擬允許進程以具有提升權限的不同使用者身分運行。

模擬輔助類

您提供的程式碼利用 ImpersonationHelper 類別來模擬具有所需憑證的使用者。此類建立存取權杖並模擬指定的用戶,從而向進程授予以管理員身份運行的必要權限。

<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>
登入後複製

啟動進程

using 區塊內,活化模擬。隨後,Process 類別用於啟動具有指定檔案名稱作為參數的新進程。

<code class="language-csharp">using (new ImpersonationHelper("xxx.blabla.com", "xxxx", "xxxx"))
{
    if (!string.IsNullOrEmpty(txtFilename.Text))
        Process.Start(txtFilename.Text);
}</code>
登入後複製

使用安全字串的替代方法

或者,您可以透過手動設定 StartInfo 屬性以不同的使用者身分啟動進程,如下所示:

<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>
登入後複製

透過為密碼提供 SecureString,您可以確保安全地處理密碼,並且不會將其儲存在明文記憶體中。

以上是如何使用模擬以不同使用者身分執行 .NET 進程?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板