2013-11-29 2 views
1

По какой-то причине 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 
+0

Имеются ли другие свойства usr? –

+0

Я думаю, что это работает только с провайдером Ldap – Remko

+0

Да, вся информация действительна для других полей. Я могу перечислять пользователей, но когда я пытаюсь сбросить имя пользователя и guid, все пользователи имеют одинаковый идентификатор GUID. Что не имеет смысла (я подозреваю, что он может вернуть classid для com-объекта, и в этом случае его функция импорта delphi typelib имеет ошибку). Я пробовал это как на локальной машине (которая перечисляет профили только на моей машине), так и в большой сети с 4000+ пользователями. Получение SID и т. Д. Не проблема, но он отказывается предоставить уникальный идентификатор пользователя. –

ответ

1

AFAIK, вы не можете получить objectGUID через поставщика WinNT: //. Если вы не можете использовать LDAP: // поставщик, можете ли вы использовать IADsNameTranslate?

+0

Это работало под citrix: mObj: = CreateOleObject ('NameTranslate'); если не varIsNull (mObj), то Начало try mObj.Init (ADS_NAME_INITTYPE_GC, ''); mObj.Set (ADS_NAME_TYPE_NT4, mDomain + '\' + mUser); mДата: = WideString (mObj.Get (ADS_NAME_TYPE_GUID)); showmessage (mData); finally mObj: = null; конец; конец; –

+0

Я принимаю это как решение. Получение GUID - это только то, что мы делаем, когда наша система настроена на использование AD, что означает, что ваш намек охватывает то, что нам нужно сейчас. Спасибо за помощь! –

Смежные вопросы