我正在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的指针。
答案 0 :(得分:1)
AFAIK你不能拥有一个没有最终RID的(有效)用户SID,所以查找一定有问题。你确定你对LookupAccountName的调用成功吗?成功调用LookupAccountName后,您的SID_NAME_USE的价值是多少?
MSDN上的A comment表示如果用户名和机器名相同,LookupAccountName将返回错误的值,但我认为您的机器未被称为“User123”。
请提供任何指针,以便在第二个时间内返回没有RID的SID 情况下。
你确定你真的想要这个吗?如果你这样做,你可以只转换为字符串,砍掉最后一个“-xxx”部分并转换回来,但我不认为我会将该SID传递给任何其他函数,因为它可能无效。 (并且只有当您获得的SID_NAME_USE是SidTypeUser时才会这样做)