gpt4 book ai didi

c++ - WinAPI NetUserGetInfo() 因 Active Directory 域上的 NERR_UserNotFound 错误代码而失败

转载 作者:行者123 更新时间:2023-11-28 08:14:13 24 4
gpt4 key购买 nike

我正在从本地服务应用程序运行以下代码。目的是在调用 LoadUserProfile() 加载用户配置文件之前获取用户配置文件的路径,然后调用 CreateProcessAsUser() 代表该用户运行用户模式进程。

请注意,此问题与 LoadUserProfile() 或 CreateProcessAsUser() 无关。

事情是这样的。当下面的代码在作为 Active Directory 域的一部分的 Windows XP w/SP3 上运行时,单个用户通过本地控制台登录(下面使用该用户的 session 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() 在该特定机器上会失败,以及如何修复此代码?

附言。我知道 NetUserGetInfo 的 MSDN 指出 Active Directory 域上的 ACL 可能存在问题,但它没有指定如何设置...

最佳答案

如果我阅读 NetUserGetInfo 的文档,对于您编码的数据的信息级别 4 。它被写成 Level 4 返回有关用户帐户的详细信息和附加属性。 此级别仅在服务器上有效。据我了解,这不是你的情况。您是否验证了 WTSQuerySessionInformation 返回的 pUserName 的值。

关于c++ - WinAPI NetUserGetInfo() 因 Active Directory 域上的 NERR_UserNotFound 错误代码而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8149727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com