シミュレーションを通じて、管理者権限でプロセスを開始できます。偽装を使用すると、昇格された権限を持つ別のユーザーとしてプロセスを実行できます。
指定したコードは、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 サイトの他の関連記事を参照してください。