我需要获取特殊用户所属的组列表。 通常我可以使用NetUserGetGroups来做到这一点,这里是代码:
function GetLDapUserGroups(UserName, DomainName : string) : TStringList;
var bufptr : Pointer;
ServerName : String;
EntriesRead : DWord;
TotalEntries : DWord;
buf : Pbyte;
PGlobalGroupInfo : PGroupInfo0;
i : integer;
begin
result:=TStringList.Create;
// get servername
// if problems occur maybe set param2 to nil
bufptr := nil;
NetGetAnyDCName(nil, PWideChar(DomainName), bufptr);
ServerName := PWideChar(bufptr);
Delete(ServerName, 1, 2); // remove starting '\\' from server Name
if NetUserGetGroups( PWideChar(ServerName), PWideChar(UserName), 0, buf, MAX_PREFERRED_LENGTH,
@EntriesRead, @TotalEntries)=NERR_SUCCESS then
begin
PGlobalGroupInfo := PGroupInfo0(buf);
// Store group names in list
for i:=0 to EntriesRead - 1 do
begin
result.Add(PGlobalGroupInfo^.grpi0_name);
inc(PGlobalGroupInfo);
end;
end;
NetAPIBufferFree(buf);
end;
但如果我的程序在不属于AD域的PC上运行,则不起作用。 显然它是可能的,我尝试使用LDAP管理员(由Softerra),并且它可以工作。
我试过了:
我刚设法检查来自非域PC的密码(请参阅Check username/password in Active Directory from PC that is NOT part of domain),所以我在登录时尝试执行这些命令,但这也失败了。
在绝地消息来源中,我看到了这个功能" JwaWinLDAP.ldap_search_sW"。对我而言,因为我可以从登录中传递LDap令牌,所以我觉得很有希望。但是,我没有找到有关如何搜索用户组的任何代码示例。这个功能是我应该继续看的方式吗?
有人能把我推向正确的方向吗? :) 谢谢!
答案 0 :(得分:0)
在查询AD之前,必须首先登录有权访问该AD的用户。
使用基于本地用户登录的令牌,几乎肯定无法让您访问查询AD。