ホームページ >バックエンド開発 >C++ >偽装を使用して別のユーザーとして .NET プロセスを実行するにはどうすればよいですか?

偽装を使用して別のユーザーとして .NET プロセスを実行するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-11 11:41:42589ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。