获得用户的SID

时间:2012-02-20 05:36:35

标签: winapi sid

我正在Windows XP上编写一个应用程序的SID。

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

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

这里RID => 1000

但是当我使用NetQueryDisplayInformation API和NET_DISPLAY_USER作为信息级别(第二个参数)时,我将NET_DISPLAY_USER结构作为out参数。

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

借助NET_DISPLAY_USER结构,当LookupAccountName API调用NET_DISPLAY_USER.usri1_name变量作为用户帐户名称时,User123帐户我获得SID没有RID。

e.g。 像这样=> Sid是S-1-5-21-1121170692-2157880286-4158546613

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

e.g。 有效的Sid => Sid是S-1-5-21-1121170692-2157880286-4158546613-1000

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

1 个答案:

答案 0 :(得分:1)

AFAIK你不能拥有一个没有最终RID的(有效)用户SID,所以查找一定有问题。你确定你对LookupAccountName的调用成功吗?成功调用LookupAccountName后,您的SID_NAME_USE的价值是多少?

MSDN上的

A comment表示如果用户名和机器名相同,LookupAccountName将返回错误的值,但我认为您的机器未被称为“User123”。

  

请提供任何指针,以便在第二个时间内返回没有RID的SID   情况下。

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