调用WindowsIdentity.Impersonate()后ERROR_NO_TOKEN

时间:2014-03-15 17:48:55

标签: .net impersonation

我正在使用@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。我可能会忽略此错误代码,因为模拟工作,但我需要使用提升的权限运行我的代码。这不奇怪吗?

0 个答案:

没有答案