По какой-то причине GUID, возвращенный IAdsUser.GUID, не зависит от того, какой пользовательский объект я проверяю. Я также попытался использовать IAdsUser.get ('objectGUID'), но это не удается. У кого-нибудь есть часть кода delphi для получения уникального идентификатора для пользователя AD? Получение SID не представляет проблемы.Получить GUID пользователя через IAdsUser
mAddr:='WinNT://' + dom1 + '/' + uid1;
if length(Password)>0 then
mRes:=ADsOpenObject(PChar(mAddr),Username,Password,1,IADsUser,usr) else
mRes:=ADsGetObject(PChar(mAddr), IADsUser, usr);
if (mRes=S_OK) and (usr<>NIL) then
Begin
ADSIUser.UID:=UserName;
ADSIUser.FullName:=usr.FullName;
ADSIUser.Disabled:=usr.AccountDisabled;
ADSIUser.LockedOut:=usr.IsAccountLocked;
ADSIUser.GUID:=usr.GUID; //<--- returns the same for ALL users
Имеются ли другие свойства usr? –
Я думаю, что это работает только с провайдером Ldap – Remko
Да, вся информация действительна для других полей. Я могу перечислять пользователей, но когда я пытаюсь сбросить имя пользователя и guid, все пользователи имеют одинаковый идентификатор GUID. Что не имеет смысла (я подозреваю, что он может вернуть classid для com-объекта, и в этом случае его функция импорта delphi typelib имеет ошибку). Я пробовал это как на локальной машине (которая перечисляет профили только на моей машине), так и в большой сети с 4000+ пользователями. Получение SID и т. Д. Не проблема, но он отказывается предоставить уникальный идентификатор пользователя. –