Delphi 获取用户';s通过IAdsUser的GUID

Delphi 获取用户';s通过IAdsUser的GUID,delphi,com,active-directory,Delphi,Com,Active Directory,出于某种原因,无论我检查哪个用户对象,IAdsUser.GUID返回的GUID都是相同的。我还尝试过使用IAdsUser.get('objectGUID')——但失败了。是否有人拥有一段德尔福代码来获取广告用户的唯一标识符? 获取SID没有问题 mAddr:='WinNT://' + dom1 + '/' + uid1; if length(Password)>0 then mRes:=ADsOpenObject(PChar(mAddr),Username,Password,1,IADs

出于某种原因,无论我检查哪个用户对象,IAdsUser.GUID返回的GUID都是相同的。我还尝试过使用IAdsUser.get('objectGUID')——但失败了。是否有人拥有一段德尔福代码来获取广告用户的唯一标识符? 获取SID没有问题

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
mAddr:='WinNT://'+dom1+'/'+uid1;
如果长度(密码)>0,则
mRes:=ADsOpenObject(PChar(mAddr)、用户名、密码、1、IADsUser、usr)else
mRes:=ADsGetObject(PChar(mAddr)、IADsUser、usr);
如果(mRes=S_OK)和(usrNIL),则
开始
ADSIUser.UID:=用户名;
ADSIUser.FullName:=usr.FullName;
ADSIUser.Disabled:=usr.AccountDisabled;
ADSIUser.LockedOut:=usr.IsAccountLocked;

ADSIUser.GUID:=usr.GUID// 抱歉,您无法通过WinNT://提供程序获取objectGUID。如果不能使用LDAP://提供程序,可以使用吗?

AFAIK,则无法通过WinNT://提供程序获取objectGUID。如果不能使用LDAP://提供程序,可以使用吗?

其他usr属性有效吗?我认为这只适用于LDAP提供程序是的,所有信息对其他字段有效。我可以枚举用户,但当我尝试转储用户名和guid时,所有用户都具有相同的guid。这没有意义(我怀疑它可以返回com对象的classid,在这种情况下,是delphi typelib导入函数出错)。我在我的机器上(只列出了我机器上的配置文件)和拥有4000多名用户的大型网络上都尝试过这种方法。获取SID等没有问题,但它拒绝提供唯一的用户id。其他usr属性有效吗?我认为这只适用于Ldap providerYes,所有信息对其他字段有效。我可以枚举用户,但当我尝试转储用户名和guid时,所有用户都具有相同的guid。这没有意义(我怀疑它可以返回com对象的classid,在这种情况下,是delphi typelib导入函数出错)。我在我的机器上(只列出了我机器上的配置文件)和拥有4000多名用户的大型网络上都尝试过这种方法。获取SID等没有问题,但它拒绝提供唯一的用户id。这在citrix:mObj:=CreateOleObject('NameTranslate')下工作;如果不是varisnll(mObj),那么开始尝试mObj.Init(ADS_NAME_INITTYPE_GC');mObj.Set(广告名称类型NT4,mDomain+'\'+'mUser);mData:=WideString(mObj.Get(ADS_NAME_TYPE_GUID));showmessage(mData);最后mObj:=null;结束;结束;我接受这一解决办法。获取GUID只是我们在系统设置为使用AD时所做的事情,这意味着您的提示涵盖了我们现在需要的内容。谢谢你的帮助!这在citrix下工作:mObj:=CreateOleObject('NameTranslate');如果不是varisnll(mObj),那么开始尝试mObj.Init(ADS_NAME_INITTYPE_GC');mObj.Set(广告名称类型NT4,mDomain+'\'+'mUser);mData:=WideString(mObj.Get(ADS_NAME_TYPE_GUID));showmessage(mData);最后mObj:=null;结束;结束;我接受这一解决办法。获取GUID只是我们在系统设置为使用AD时所做的事情,这意味着您的提示涵盖了我们现在需要的内容。谢谢你的帮助!