gpt4 book ai didi

delphi - ADSI 无法使用 ADsOpenObject 打开对象。德尔福

转载 作者:行者123 更新时间:2023-12-03 02:46:01 24 4
gpt4 key购买 nike

我有一个程序,允许使用Windows登录信息登录,我试图在用户输入密码时获取Windows组成员,我编写了一个类似于我的代码的小函数:

procedure ShowADSPath(UserName, Password: widestring);
var Group : IADs;
begin
try
OleCheck(ADsOpenObject('WinNT://Server/Group1',
UserName,
Password, ADS_SECURE_AUTHENTICATION, IADs, Group));
if (Group <> nil) and (Group.Class_ = 'Group') then
ShowMessage(Group.ADsPath);
Group.release;
Group:= nil;
except
ShowMessage('NOT ACCESSDE');
end;
end;

因此,当输入的用户名和密码正确时,程序将返回组的路径当出现错误的“未访问”时。

如果我第一次输入正确的用户名和密码,该功能可以正常工作,或者如果我输入错误的用户名和密码数据,该功能也可以正常工作。

问题是当我第二次调用该函数时,它无法按预期工作,如下所示:

当我运行程序并首先输入错误的密码并调用我的函数时,“未访问”将按预期出现,但如果我记忆该函数,即使使用正确的密码,它也会返回“未访问”。

此外,当我运行程序并首先输入正确的密码并调用我的函数时,组路径会按预期显示,但如果我使用错误的密码记忆该函数,它也会返回路径。

看起来我的连接数据已保存,我需要释放内存,但我不知道如何。

任何机构可以帮忙吗?

最佳答案

我终于找到了问题的解决方案,它看起来像本文中描述的 Microsoft API 问题: http://support.microsoft.com/kb/218497

实际上,API 函数 ADsOpenObject 正在使用您传递的凭据打开与服务器的连接,但它永远不会关闭该连接,我尝试关闭它,但它在 session 中没有关闭,所以我首先使用另一个 API 来检查对象是否存在,看看这个对我有用的函数:

procedure ShowADSPath(UserName, Password: widestring);
function CheckObject(APath: String): IDispatch;
var
Moniker: IMoniker;
Eaten: integer;
BindContext: IBindCtx;
Dispatch: IDispatch;
begin
Result := nil;
OleCheck(CreateBindCtx(0, BindContext));
OleCheck(MkParseDisplayName(BindContext, PWideChar(WideString(APath)),
Eaten, Moniker));
OleCheck(Moniker.BindToObject(BindContext, nil, IDispatch, Dispatch));

Result := Dispatch;
end;
var Group : IADs;
begin
try
if CheckObject('WinNT://Server/Group1,group') <> nil then
OleCheck(ADsOpenObject('WinNT://Server/Group1,group',
UserName,
Password, ADS_SECURE_AUTHENTICATION, IADs, Group));
if (Group <> nil) and (Group.Class_ = 'Group') then
begin
ShowMessage(Group.ADsPath);
Group.release;
Group:= nil;
end;
except
ShowMessage('NOT ACCESSDE');
end;
end;

关于delphi - ADSI 无法使用 ADsOpenObject 打开对象。德尔福,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23675677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com