【问题标题】:CreateProcessAsUser not working correctly in my experimentsCreateProcessAsUser 在我的实验中无法正常工作
【发布时间】:2023-03-07 04:50:01
【问题描述】:

我正在尝试执行以下操作: 1. 我在运行 VS.NET 2005 的 SP2 机器上以管理员帐户登录 2.本机还有另外一个账号user1,是guest账号 3. 我正在以管理员身份运行一个程序,我想从这个程序启动一个 notepad.exe 进程,该进程将在 user1 安全上下文下运行 4.我特别想用CreateProcessasUser来做这个..

这是代码剪辑器,它将解释我一直在尝试的内容..

const string GRANTED_ALL = "10000000";

const int LOGON32_LOGON_INTERACTIVE = 2;
const int LOGON32_LOGON_NETWORK = 3;
const int LOGON32_LOGON_BATCH = 4;
const int LOGON32_LOGON_SERVICE = 5;
const int LOGON32_LOGON_UNLOCK = 7;
const int LOGON32_LOGON_NETWORK_CLEARTEXT = 8;
const int LOGON32_LOGON_NEW_CREDENTIALS = 9;

const int LOGON32_PROVIDER_DEFAULT = 0;
static IntPtr hToken = IntPtr.Zero;
static IntPtr hTokenDuplicate = IntPtr.Zero;

static void Main(string[] args)
{
    int last_error = 0;
    if(LogonUser("user1",null,"#welcome123",
        LOGON32_LOGON_INTERACTIVE, 
        LOGON32_PROVIDER_DEFAULT, out hToken))
    {
        last_error = Marshal.GetLastWin32Error();
        PROCESS_INFORMATION pi = new PROCESS_INFORMATION();
        STARTUPINFO si = new STARTUPINFO();
        SECURITY_ATTRIBUTES sa = new SECURITY_ATTRIBUTES();
        last_error = 0;
        last_error = Marshal.GetLastWin32Error();
        if(DuplicateTokenEx(hToken,UInt32.Parse(GRANTED_ALL,System.Globalization.NumberStyles.HexNumber),
            ref sa,SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation,
            TOKEN_TYPE.TokenPrimary,out hTokenDuplicate))
        {
            last_error = 0;
            last_error = Marshal.GetLastWin32Error();

            CreateProcessAsUser(hTokenDuplicate, "d:\\san\\notepad.exe", null,
            ref sa, ref sa, false, 0, IntPtr.Zero, "d:\\san", ref si, out pi);

            last_error = 0;
            last_error = Marshal.GetLastWin32Error();

        }
    }

    last_error = 0;
    last_error = Marshal.GetLastWin32Error();


    if (hToken != IntPtr.Zero) CloseHandle(hToken);
    if (hTokenDuplicate != IntPtr.Zero) CloseHandle(hTokenDuplicate);

}

由于某种原因,这不起作用.. DuplicateTokenEx 函数返回错误代码 1305,我似乎不知道为什么..

我还使用了DuplicateToken 而不是DuplicateTokenEx,现在CreateProcessAsUser 返回错误代码1308。

有人能说明一下这个问题吗.. 这似乎是一件非常简单的事情,但就是无法正确处理.. [请注意,我特别想LogonUser 然后DuplicateToken 然后CreateProcessAsUSer]

【问题讨论】:

    标签: createprocessasuser


    【解决方案1】:

    CreateProcessAsUser() windowstations and desktops

    但我建议以托管方式进行:

    ...
    using System.Diagnostics;
    using System.Security;
    ...
    ...
    string progPath = @"c:\WINNT\notepad.exe";
    ProcessStartInfo startInfo = new ProcessStartInfo(progPath);
    startInfo.WindowStyle = ProcessWindowStyle.Normal;
    startInfo.UseShellExecute = false;
    startInfo.UserName = "SomeUser";
    SecureString password = new SecureString();
    
    #region setting password
    password.AppendChar('p');
    password.AppendChar('a');
    ...
    #endregion
    
    startInfo.Password = password;
    Process.Start(startInfo);
    ...
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2017-11-25
      • 1970-01-01
      相关资源
      最近更新 更多