WindowsIdentity构造函数使用LogonUser中的标记抛出异常

时间:2011-02-24 15:00:01

标签: c# pinvoke windows-identity

我在命令行应用程序中运行,该应用程序使用LogonUser对用户进行身份验证。该函数正确返回,失败正确(无效的用户名或密码)。当我将LogonUser函数返回的标记传递给WindowsIdentity(IntPtr)构造函数时,收到错误:

  

模仿的令牌无效 - 它   不能重复。

我尝试在使用WindowsIdentity函数将令牌传递到DuplicateToken构造函数之前复制令牌。这也失败了。我有UAC,我正在运行Windows 7 x64。以管理员而非管理员身份运行会产生相同的结果。

一些额外的信息:

  • 登录域
  • 使用LOGON32_LOGON_INTERACTIVE
  • 使用LOGON32_PROVIDER_DEFAULT

3 个答案:

答案 0 :(得分:1)

以下是否适合您,或重新创建问题?

[DllImport("advapi32.dll", SetLastError = true)]
private static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);

// ...

IntPtr token;
LogonUser(Username, Domain, Password, 8, 0, out token)

WindowsIdentity wi;
wi = new WindowsIdentity(token);

答案 1 :(得分:1)

这最终成了环保。尝试对域进行身份验证时出现DNS问题。重置开发框修复了问题。

答案 2 :(得分:1)

我只在使用.Net Framework 4编译的代码中遇到了同样的错误。使用以前的所有版本编译时没有错误。

此代码曾在.net 4中失败:

using(WindowsIdentity identity = new WindowsIdentity(accessToken))
    context = identity.Impersonate();

然而,我发现这有效:

context = WindowsIdentity.Impersonate(accessToken);