>백엔드 개발 >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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.