Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#使用登录的用户凭据启动进程_C#_Windows_Winforms_Impersonation - Fatal编程技术网

C#使用登录的用户凭据启动进程

C#使用登录的用户凭据启动进程,c#,windows,winforms,impersonation,C#,Windows,Winforms,Impersonation,我正在运行一个具有提升用户权限的winforms应用程序(模拟作为不同的域管理员帐户运行),但是,我想启动一个子过程,打开一个Web浏览器到一个URL,该URL具有当前登录的用户权限,而不是提升的权限,而不必提示他们输入密码和登录信息,以便它正确地与当前登录的用户权限进行NTLM握手 我试过这样的方法: // I have the USER NAME, this is not the issue // I have the Domain, this is not the issue // I

我正在运行一个具有提升用户权限的winforms应用程序(模拟作为不同的域管理员帐户运行),但是,我想启动一个子过程,打开一个Web浏览器到一个URL,该URL具有当前登录的用户权限,而不是提升的权限,而不必提示他们输入密码和登录信息,以便它正确地与当前登录的用户权限进行NTLM握手

我试过这样的方法:

// I have the USER NAME, this is not the issue
// I have the Domain, this is not the issue

// I need to grab the Password from the currently logged on user 
// without prompting for it

System.Security.SecureString oPass = new System.Security.SecureString();
System.Diagnostics.Process.Start("IExplore.exe"
   , this.oConfiguration.WrappersURL
   , this.WindowsUserID
   , oPass
   , this.DomainName
  );

…但我不太确定如何获取用户的密码。关于如何将派生进程的权限减少到与W7和XP兼容的登录用户,您有什么想法吗?

获取当前用户并以这种方式启动它:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
Process.Start(startInfo);

您想获得域名和用户名,请执行以下操作

编辑:


在windows中似乎没有办法做到这一点,因此我通过以下操作解决了这个难题:

  • 在当前用户下生成控制器进程
  • 在当前登录的用户下生成任务进程
  • 生成另一个任务进程并将其权限提升到管理帐户
  • 使用控制器流程管理/通知两个任务流程(分别为 相同,但凭证除外)
  • 在某些情况下,让用户进程初始化运行程序应用程序,然后让管理任务指导应用程序工作

  • 难看、黑客、有点复杂,但这就是企业安全:D

    这是web还是windows应用程序。。?您是否考虑过尝试此
    string userName=System.Security.Principal.WindowsIdentity.GetCurrent().Name您将无法获取用户密码-即,因为它没有存储在任何地方。。。您能否澄清“提升”是指“具有管理权限的不同用户”还是“相同的管理用户,但具有提升权限(由于UAC)”应用程序作为具有管理权限的不同本地管理用户帐户运行,我想使用当前登录的用户帐户生成一个进程。你熟悉SSPI吗?如果不熟悉,我建议尝试使用它实现一些东西。我也做了一些类似于此网站的事情。代码太多,无法发布,但你可以查看它并尝试它。唯一的其他选择是这样做模拟,如果要跟踪用户..user this
    var userNameSplit=System.Security.Principal.windowsiness.GetCurrent().Name.Split('\\')
    在调用模拟功能之前存储当前用户是否会导致不可能的重复“i have the username and domain name”,只是不是用户密码你可能不知道用户密码听起来你可能仍然需要提示输入用户密码让我检查一下我已经做了类似的事情我会在几分钟内更新我的答案让我找到我几个月前用过的代码在我的原始问题中,我特别说。。。“无需提示他们输入密码和登录信息”。我有身份,我只需要伪造密码
    var userNameSplit = System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split('\\');
    var userDomain = userNameSplit[0];
    var userName = userNameSplit[1];