3

我正在 Windows XP 上编写一个应用程序,它提供了用户的 SID。

使用有效的令牌句柄,当我GetTokenInfomation使用作为第二个参数调用 API 时TokenUser,每次 & 对于所有用户帐户,我都会在PTOKEN_USER结构变量中获得 Valid SID。

有效 Sid => Sid 是S-1-5-21-1121170692-2157880286-4158546613-1000

这里 RID => 1000

但是当我将NetQueryDisplayInformationAPINET_DISPLAY_USER用作信息级别(第二个参数)时,我将NET_DISPLAY_USER结构作为输出参数。

User123是我的一个具有管理权限的帐户。

在结构的帮助下,NET_DISPLAY_USER当我LookupAccountName使用变量NET_DISPLAY_USER.usri1_name作为用户帐户的名称调用 API 时,对于一个User123帐户,我得到没有 RID 的 SID。

例如像这样 => Sid 是S-1-5-21-1121170692-2157880286-4158546613

对于具有相同程序的其他帐户,我提供了正确的 SID,即带有 RID 的 SID

例如有效 Sid => Sid 是S-1-5-21-1121170692-2157880286-4158546613-1000

请为我提供在第二种情况下返回没有 RID 的 SID 的任何指针。

4

1 回答 1

1

AFAIK 如果没有最终的 RID,您将无法拥有(有效的)用户 SID,因此查找时一定有问题。您确定对 LookupAccountName 的调用成功吗?成功调用 LookupAccountName 后,您的 SID_NAME_USE 的值是多少?

MSDN 上的一条评论表明,如果用户名和机器名相同,LookupAccountName 将返回错误值,但我假设您的机器不称为“User123”。

请为我提供在第二种情况下返回没有 RID 的 SID 的任何指针。

你确定你真的想要这个吗?如果你这样做,你可以只转换为字符串,砍掉最后一个“-xxx”部分并转换回来,但我认为我不会将该 SID 传递给任何其他函数,因为它可能无效。(只有当你得到的 SID_NAME_USE 是 SidTypeUser 时才这样做)

于 2012-02-20T06:37:02.107 回答