如何在Delphi中对Windows域用户进行身份验证?

如何在Delphi中对Windows域用户进行身份验证?,delphi,ldap,Delphi,Ldap,我正在尝试在Delphi中验证windows域用户。我使用了下面的代码。 如果我使用ADS\u安全认证,它会说 登录失败:未知用户名或错误密码 如果我使用ADS\u使用SSL,它会说 指定了无效的dn语法 提前感谢只要我使用完全合格的域控制器,以下代码对我有效: var hr: HResult; pObject : IADs; Pwd : String; begin Pwd := 'Hello'; hr := ADsOpenObject('LDAP://'+

我正在尝试在Delphi中验证windows域用户。我使用了下面的代码。 如果我使用ADS\u安全认证,它会说

登录失败:未知用户名或错误密码

如果我使用ADS\u使用SSL,它会说

指定了无效的dn语法


提前感谢

只要我使用完全合格的域控制器,以下代码对我有效:

var
  hr: HResult;
  pObject : IADs;
  Pwd : String;
begin
      Pwd := 'Hello';
      hr := ADsOpenObject('LDAP://'+ FQDC,
                       'Administrator',
                       Pwd,
                       ADS_SECURE_AUTHENTICATION,
                       IID_IADs,
                       pObject);
      OleCheck(hr);
      pObject := nil;
end;

您使用的是哪个版本的Delphi?我最初的怀疑是unicode…而且,如果这是在VCL表单中,那么就没有必要调用
CoInitialize()
,因为VCL已经为您完成了。您是否阅读了ADsOpenObject文档中的备注?按照Microsoft的建议,请参阅:您如何导入ADsOpenObject的可能重复?@asgar,通过EMB Web.Win.adstype我是这样导入的。你认为我做错了吗。函数adOpenObject(lpszPathName、lpszUserName、lpszPassword:WideString;dwReserved:DWORD;const riid:TGUID;out ppObject):HResult;安全呼叫;外部“activeds.dll”@asgar,声明匹配,但请查看我的更新答案和正确的pObjecttype@asgar,我正在测试一个Ubuntu Samba DC,它现在的等级是2008RC2,我只使用DC的完全限定名:“LDAP://vmHome.home.local”。
var
  hr: HResult;
  pObject : IADs;
  Pwd : String;
begin
      Pwd := 'Hello';
      hr := ADsOpenObject('LDAP://'+ FQDC,
                       'Administrator',
                       Pwd,
                       ADS_SECURE_AUTHENTICATION,
                       IID_IADs,
                       pObject);
      OleCheck(hr);
      pObject := nil;
end;