我正在使用@MattJohnson的技术在Windows 2008 R2域上使用C ++在.NET 4.0上模拟新用户,如here所述。我设法成功登录用户,对WindowsIdentity.Impersonate()
的调用以静默方式运行,返回一个明显有效的上下文。但是,当我在此之后使用Marshal.GetLastWin32Error()
检查最后一个错误编号时,我得到的值为1008,即ERROR_NO_TOKEN。
如果我让我的代码运行,它的行为就像新用户登录一样(即Environment.UserName
返回新用户的名字),直到我处理掉句柄;但是,不会发生模拟,因为我的代码的访问权限仍然是原始用户的访问权限。
我花了一些时间来搜索这个,但我没有找到确凿的答案,因为WindowsIdentity.Impersonate()
可能导致ERROR_NO_TOKEN错误,或者如何克服它。有任何想法吗?谢谢。
修改即可。我刚刚发现了以下内容。当我正常运行Visual Studio时,我的代码行为如上所述。但是,当我以管理员身份运行Visual Studio(即右键单击,以管理员身份运行)时,模拟工作完美,但我仍然从Marshal.GetLastWin32Error()
获得ERROR_NO_TOKEN。我可能会忽略此错误代码,因为模拟工作,但我需要使用提升的权限运行我的代码。这不奇怪吗?