【发布时间】:2013-11-04 12:32:30
【问题描述】:
我相信我已经阅读了所有相关的Process.Start 模拟问题 - 至少我可以通过 Google 找到所有问题,但我还没有找到与这种情况相匹配的问题(90% 是关于:ASP 这是一个整体不同的球赛)
场景:我们有一个小工具,它使用当前用户凭据来查询 AD,获取匹配搜索的服务器列表,通过 SMB 连接到它们并获取共享列表。
有人要求我使用域用户的凭据在不在域上的机器上运行此过程。
我添加了一个开关,它会在启动时提示输入凭据,然后使用适当的凭据 Process.Start() 相同的可执行文件(以节省学习runas /netonly ... 的人)。
这给了我几个问题。我正在测试的代码如下...
Dim ProcInfo As New ProcessStartInfo With {
.Domain = dlgImpersonate.Domain,
.UserName = dlgImpersonate.Username,
.Password = dlgImpersonate.Password,
.FileName = Reflection.Assembly.GetEntryAssembly.Location,
.UseShellExecute = False}
Try
Process.Start(ProcInfo)
ShouldEnd = True
Catch ex As Exception
'HandleException(ex)
MessageBox.Show(ex.Message, "Impersonation failed", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
所以...如果我在我的机器上(在域上)运行代码,我可以冒充任何人。查询 AD 有一些怪癖,但这是一个不同的问题。
如果我在全新的机器(而不是域)上运行代码,我会得到:
Win32Exception: Logon failure: unknown user name or bad password
Stack:
at Process.StartWithCreateProcess(ProcessStartInfo startInfo)
at Process.Start(ProcessStartInfo startInfo)
...My code
我想知道机器是否只是不知道域或如何对其进行身份验证,所以我然后从命令提示符尝试...
runas /netonly /user:MyDomain\MyUser Test.exe
这很好用。
那么...我怎样才能找到为什么 Process.Start 没有按照我的预期进行身份验证?
注意:凭据是正确的 - 我什至求助于从记事本复制/粘贴到完整性检查
【问题讨论】:
标签: .net impersonation process.start