NetUseAdd返回1326错误:远程域连接用户名传递异常排查
问题分析与解决
核心错误:误用结构导致认证参数失效
你的代码存在关键问题:NetUseAdd函数用于建立网络连接时,需要传入USE_INFO_*系列结构,而非用于用户账户管理的USER_INFO_1结构。错误的结构直接导致指定的用户名、密码无法被正确解析,系统 fallback 到本地用户身份发起认证,最终触发1326错误。
修正后的实现代码
使用USE_INFO_2结构来正确传递远程连接的认证信息,同时修正参数类型与调用逻辑:
bool net::Establish(const wchar_t* remoteUNC, const wchar_t* domain, const wchar_t* user, const wchar_t* password) { DWORD ret; USE_INFO_2 useInfo = {0}; useInfo.ui2_remote = (LPWSTR)remoteUNC; useInfo.ui2_username = (LPWSTR)user; useInfo.ui2_domainname = (LPWSTR)domain; useInfo.ui2_password = (LPWSTR)password; useInfo.ui2_asg_type = USE_WILDCARD; // 适配任意共享资源类型 useInfo.ui2_usecount = 1; ret = NetUseAdd(NULL, 2, (LPBYTE)&useInfo, NULL); if (ret != NERR_Success) { #ifdef DEBUG wprintf(L"Error: NetUseAdd: %d\n", ret); #endif return false; } return true; }
调用方式调整
调用时需明确传入域信息(域用户场景),远程UNC路径保持正确格式:
// 域用户传入域名,本地用户可将domain设为L""或远程机器名 net::Establish(L"\\\\192.168.1.10", L"YourDomain", L"user", L"password");
额外注意事项
- 确保所有字符串参数为宽字符类型(
wchar_t),与NetUseAdd的Unicode版本兼容,避免编码混合导致的参数错误。 - 若仍出现错误,可调用
NetApiBufferFree释放资源,并通过FormatMessage获取详细错误描述辅助排查。 - 执行程序的本地用户需具备建立网络连接的权限,远程机器需允许目标用户访问共享资源。
内容的提问来源于stack exchange,提问作者zbx0310
相关产品推荐
相关产品推荐

