Получение SID пользователей - PullRequest
3 голосов
/ 20 февраля 2012

Я пишу приложение для Windows XP, которое дает SID пользователя.

С действительным дескриптором токена, когда я вызываю GetTokenInfomation API с TokenUser в качестве второго параметра, тогда каждый раз и для всей учетной записи пользователя я получаю действительный идентификатор безопасности в PTOKEN_USER структурной переменной.

Действительный Sid => Sid is S-1-5-21-1121170692-2157880286-4158546613-1000

Здесь МПОГ => 1000

Но когда я использую NetQueryDisplayInformation API с NET_DISPLAY_USER в качестве информационного уровня (второй параметр), тогда я получаю NET_DISPLAY_USER структуру как выходной параметр.

User123 - это мой единственный аккаунт с правами администратора.

С помощью структуры NET_DISPLAY_USER, когда я вызываю LookupAccountName API с переменной NET_DISPLAY_USER.usri1_name в качестве имени учетной записи пользователя, тогда для учетной записи User123 я получаю SID без RID.

например. Вот так => Сид это S-1-5-21-1121170692-2157880286-4158546613

Для другой учетной записи с той же процедурой выдает правильный SID, т. Е. SID с RID

например. Действительный Sid => Sid равен S-1-5-21-1121170692-2157880286-4158546613-1000

Пожалуйста, предоставьте мне любые указатели для возврата SID без RID во втором случае.

1 Ответ

1 голос
/ 20 февраля 2012

AFAIK, вы не можете иметь (действительный) SID пользователя без этого окончательного RID, поэтому что-то должно быть не так с поиском.Вы уверены, что ваш вызов LookupAccountName успешен?Каково значение вашего SID_NAME_USE после успешного вызова LookupAccountName?

Комментарий в MSDN указывает, что LookupAccountName вернет неправильное значение, если имя пользователя и имя компьютера совпадают, но яПредположим, ваша машина не называется «User123».

Пожалуйста, укажите мне какие-либо указатели для возврата SID без RID во втором случае.

Вы действительно хотите этого?Если вы это сделаете, вы можете просто преобразовать в строку, отрубить последнюю часть «-xxx» и преобразовать обратно, но я не думаю, что передам этот SID какой-либо другой функции, поскольку он может быть недействительным.(И делать это только тогда, когда вы получили SID_NAME_USE - SidTypeUser)

...