You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#身份模拟报错‘用户名或密码不正确’:参数配置及排查

Windows身份模拟报错排查:用户名或密码不正确

问题代码

// ------------------------------------------------------------------

/// <summary>
/// Does the actual impersonation.
/// </summary>
/// <param name="userName">The name of the user to act as.</param>
/// <param name="domainName">The domain name of the user to act as.</param>
/// <param name="password">The password of the user to act as.</param>
private void ImpersonateValidUser(
    string userName, 
    string domain, 
    string password )
{
    WindowsIdentity tempWindowsIdentity = null;
    IntPtr token = IntPtr.Zero;
    IntPtr tokenDuplicate = IntPtr.Zero;

    try
    {
        if ( RevertToSelf() )
        {
            if ( LogonUser(
                userName, 
                domain, 
                password, 
                LOGON32_LOGON_INTERACTIVE,
                LOGON32_PROVIDER_DEFAULT, 
                ref token ) != 0 )
            {
                if ( DuplicateToken( token, 2, ref tokenDuplicate ) != 0 )
                {
                    tempWindowsIdentity = new WindowsIdentity( tokenDuplicate );
                    impersonationContext = tempWindowsIdentity.Impersonate();
                }
                else
                {
                    throw new Win32Exception( Marshal.GetLastWin32Error() );
                }
            }
            else
            {
                throw new Win32Exception( Marshal.GetLastWin32Error() );
            }
        }
        else
        {
            throw new Win32Exception( Marshal.GetLastWin32Error() );
        }
    }
    finally
    {
        if ( token!= IntPtr.Zero )
        {
            CloseHandle( token );
        }
        if ( tokenDuplicate!=IntPtr.Zero )
        {
            CloseHandle( tokenDuplicate );
        }
    }
}

问题描述

使用上述代码执行身份模拟时,传入参数如下:

  • userName:目标访问机器的账号
  • domain:目标访问机器的IP
  • password:目标访问机器的密码
    运行后报错:The user name or password is incorrect,需排查参数配置是否正确,以及其他需要调整的地方。

排查与调整方案

1. 参数配置错误修正

  • domain参数不能填IP:如果目标机器属于工作组环境,domain参数应传入目标机器的计算机名,而非IP地址。若目标机器加入域,则需传入域名;若要登录本地机器,可传.表示本地,但远程场景必须传目标机器的计算机名。
  • 用户名格式可选方案:也可以将用户名格式设为机器名\用户名,此时domain参数传空字符串或.,同样能完成验证。

2. LogonUser参数调整

  • 登录类型替换:当前使用的LOGON32_LOGON_INTERACTIVE(交互式登录)并不适合远程资源访问场景,建议替换为:
    • LOGON32_LOGON_NETWORK(值为3):适用于网络资源访问的登录类型,验证逻辑更匹配远程场景
    • LOGON32_LOGON_NEW_CREDENTIALS(值为9):适合跨域或远程资源访问,会创建包含新凭据的登录会话
  • 登录提供者调整:将LOGON32_PROVIDER_DEFAULT替换为LOGON32_PROVIDER_WINNT50(值为3),部分环境下默认提供者无法正确处理远程登录验证。

3. 其他检查项

  • 目标机器账号权限:确认目标机器的用户账号已开启「允许远程登录」权限(可在「本地用户和组」→ 用户属性中配置)。
  • 密码正确性:检查密码是否存在大小写错误、特殊字符转义问题,确保传入的密码字符串未被截断或修改。
  • 网络与防火墙:验证本地机器与目标机器网络连通(能正常ping通),且防火墙未阻挡远程访问相关端口(如SMB协议的445端口)。
  • 本地进程权限:确保运行当前程序的账号具备调用LogonUser的权限,建议以管理员身份启动程序。

4. 代码细节优化

  • 确保RevertToSelf()调用成功:该方法用于恢复到进程自身身份,若之前存在未释放的模拟上下文,需先确保恢复操作成功再执行新的模拟。
  • Token释放逻辑:当前代码的finally块已正确处理Token释放,需保持该逻辑避免资源泄漏。

内容的提问来源于stack exchange,提问作者adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 11:35:38