2013-03-19 60 views
0

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

我已经试过类似:

// 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兼容的登录用户权限的想法?

+1

这是Web或Windows应用程序..?你有没有看过这个 'string userName = System.Security.Principal.WindowsIdentity.GetCurrent()。Name;' – MethodMan 2013-03-19 21:17:55

+0

你将无法获得用户的密码 - 也就是说它不会被存储在任何地方......你能请澄清,如果“提升”是指“具有管理员权限的不同用户”或“同一管理员用户,但权限提高(由于UAC)” – 2013-03-19 21:28:38

+0

应用程序作为具有管理权限的不同本地管理用户帐户运行,并且我想产生使用当前登录的用户帐户的过程。 – Dave 2013-03-20 15:50:45

回答

0

这似乎没有一种在Windows中这样做的方法,所以我最终通过执行以下操作来解决这个难题:

  1. 在当前用户下产生一个控制器进程。
  2. 在当前登录的用户下产生任务进程。
  3. 产生另一个任务进程并将其权限提升到管理帐户。
  4. 使用控制器进程来管理/发信号通知两个任务进程(除了凭证外,它们是 相同)。
  5. 在某些情况下,用户进程初始化运行程序应用程序,然后让管理任务指示应用程序工作。

丑女的hackish,并且有点令人费解,但这样的企业安全:d

0

获取当前用户,并开始这样说:

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

我有身份,我只需要欺骗密码 – Dave 2013-03-20 17:53:35

0

你想要得到的域名和用户名请执行下列操作

编辑:

var userNameSplit = System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split('\\'); 
var userDomain = userNameSplit[0]; 
var userName = userNameSplit[1]; 
+0

不,我有用户名和域名,只是不是用户密码 – Dave 2013-03-20 17:53:06

+0

你不会知道用户密码听起来像你可能仍然需要提示输入用户密码..让我检查一下我的结局我做了这样的事情之前我会在几个更新我的答案让我找到我的代码,我用了几个回来做同样的事情 – MethodMan 2013-03-20 18:04:09

+0

在我原来的问题中,我特别说,...“,而不必提示他们输入密码和登录信息。 – Dave 2013-10-27 21:42:39

相关问题