【发布时间】:2011-07-06 09:45:29
【问题描述】:
我有一个类需要知道当前有效的用户名。 Environment.UserName 或 WindowsIdentity.GetCurrent().Name 就是为此。但是当启用模拟时,它们返回 LocalUser 名称而不是 ImpersonatedUser 名称。
如何获取当前冒充用户的姓名?
该应用程序是 C# 控制台应用程序,我知道模拟是有效的,因为我获得了ImpersonatedUser 的特权。当然我可以让模拟代码将模拟的用户名保存到某个全局变量中,但这是错误的。
更新:
模拟代码:
if (LogonUser(userName, domain, password, LOGON32_LOGON_NEW_CREDENTIALS/*=9*/, LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
{
WindowsIdentity tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
_impersonationContext = tempWindowsIdentity.Impersonate();
// WindowsIdentity.GetCurrent().Name equals "LocalUser"
// while userName equals "ImpersonatedUser"
...
我可以控制模拟代码,但我希望它独立于解决方案的其他部分。
【问题讨论】:
-
查看 WindowsIdentity.Impersonate 的演示代码 - 看起来 GetCurrent().Name 应该可以工作
-
由于某种原因它对我不起作用,请参阅问题更新。
标签: .net impersonation