WinAPI NetUserGetInfo()在Active Directory域上失败,错误码为NERR_UserNo
WinAPI NetUserGetInfo() fails with NERR_UserNotFound error code on Active Directory domain
我正在本地服务应用程序中运行以下代码段。目的是在调用LoadUserProfile()来加载该用户的配置文件之前,在调用CreateProcessAsUser()来代表该用户运行用户模式进程之前,获取用户配置文件的路径。
请注意,这个问题不是关于LoadUserProfile()或CreateProcessAsUser()的。
事情是这样的。当下面的代码在Windows XP w/SP3上运行时,它是Active Directory域的一部分,单个用户通过本地控制台登录(该用户的会话ID在下面使用),NetUserGetInfo() API失败。还要注意,它在任何其他情况下都可以正常工作:
//'dwSessID' = session ID of the user to retrieve a user profile path for
LPTSTR pUserName = NULL;
DWORD dwcbSzUserName = 0;
if(!WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, dwSessID, WTSUserName, &pUserName, &dwcbSzUserName))
{
//Error
return false;
}
USER_INFO_4* pUI4 = NULL;
DWORD dwNetStatus;
if((dwNetStatus = NetUserGetInfo(NULL, pUserName, 4, (BYTE**)&pUI4)) == NERR_Success)
{
PROFILEINFO pfi = {0};
pfi.dwSize = sizeof(pfi);
pfi.lpUserName = pUserName;
pfi.dwFlags = PI_NOUI;
pfi.lpProfilePath = pUI4->usri4_profile;
LoadUserProfile(hToken, &pfi);
//And so on
}
else
{
//On that specific machine I get here with 'dwNetStatus' = 2221,
//or NERR_UserNotFound, that according to MSDN is
//"The user name could not be found."
//Also note that GetLastError is not used for this API.
}
是否有人建议为什么NetUserGetInfo()在特定机器上失败,以及如何修复此代码?
p。我知道NetUserGetInfo的MSDN声明在Active Directory域上的ACL可能存在问题,但它没有指定如何设置一个…
如果我阅读NetUserGetInfo的文档,对于您编码的数据的信息级别为4。返回关于用户帐户的详细信息和附加属性。该级别仅在服务器上有效。据我所知,这不是你的案子。是否验证WTSQuerySessionInformation
返回的pUserName
的值
正如JPBlanc所说,4级NetUserGetInfo仅在服务器上有效。
另一个问题是,您检索的是登录用户的名称,而不是用户所属的域。
注意到您正在调用NetUserGetInfo与username的LPTSTR类型。有时它将不起作用(如果您将编译您的项目默认使用ansi字符串)。
考虑将字符串类型更改为LPWSTR
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 误码率解码错误