.net 调用WindowsIdentity.Impersonate()后出现错误\u没有\u令牌

.net 调用WindowsIdentity.Impersonate()后出现错误\u没有\u令牌,.net,impersonation,.net,Impersonation,我使用@MattJohnson的技术在Windows2008R2域上使用.NET4.0上的C#模拟新用户,如前所述。我成功登录了用户,对WindowsIdentity.Impersonate()的调用以静默方式运行,并返回一个明显有效的上下文。但是,当我在这之后使用Marshal.GetLastWin32Error()检查最后一个错误号时,我得到了值1008 aka error\u NO\u标记 如果我让我的代码运行,它的行为就像新用户登录一样(即Environment.UserName返回新用

我使用@MattJohnson的技术在Windows2008R2域上使用.NET4.0上的C#模拟新用户,如前所述。我成功登录了用户,对
WindowsIdentity.Impersonate()
的调用以静默方式运行,并返回一个明显有效的上下文。但是,当我在这之后使用
Marshal.GetLastWin32Error()
检查最后一个错误号时,我得到了值1008 aka error\u NO\u标记

如果我让我的代码运行,它的行为就像新用户登录一样(即
Environment.UserName
返回新用户的名称),直到我释放句柄为止;但是,不会发生模拟,因为我的代码的访问权限仍然是原始用户的权限

我花了一些时间在谷歌上搜索这个问题,但是我没有找到结论性的答案,比如为什么
WindowsIdentity.Impersonate()
可能会导致错误,或者如何克服它。有什么想法吗?多谢各位


编辑。我刚刚发现了以下情况。当我正常运行VisualStudio时,我的代码的行为如上所述。但是,当我以管理员身份运行Visual Studio(即,右键单击,以管理员身份运行)时,模拟可以完美地工作,尽管我仍然从
Marshal.GetLastWin32Error()
获得错误\u NO \u标记。我也可以忽略此错误代码,因为模拟可以工作,但我需要以提升的权限运行代码。这不是很奇怪吗?

有帮助吗?@MattJohnson:谢谢。据我所知,这意味着错误可能来自任何中间库调用。你知道如何检测问题到底出在哪里吗?谢谢。推测,但这可能是一个多线程问题吗?我自己从来没有遇到过这个错误。也许其他人会提供更多细节。@MattJohnson:不太可能,但我刚刚用一些新发现更新了我的问题。