当我们创建System.DirectoryServices.DirectoryEntry实例时,幕后的内容是什么?

时间:2009-07-16 11:43:31

标签: c# active-directory windows-authentication

在创建DirectoryEntry实例时,您能详细说明场景背后的内容吗?

代码段:

var dirEntry = new DirectoryEntry("LDAP://CN=jsmith,DC=fabrikam,DC=Com", userName, password);

我的意思是,身份验证如何运作?谁跟谁说话?假设上面的代码在控制台应用程序中。

2 个答案:

答案 0 :(得分:1)

创建DirectoryEntry并没有比在内存中实际创建对象做更多的事情。 DirectoryEntry对象实际上只是围绕Active Directory的非托管,基于COM的IADsObject接口的基本ADSI (Active Directory Service Interfaces)的托管包装器(您可以 - 如果您真的想 - 直接使用它) ,也是)。

仅当您开始使用其属性或访问基础.NativeObject COM对象时,它是否会实际连接到Active Directory,使用您当前的凭据(或您提供的任何备用凭据)登录,并尝试并从AD获取该DirectoryEntry的信息。

马克

答案 1 :(得分:0)

从我使用Reflector看到的内容,它使用了activds.dll

例如:

[DllImport("activeds.dll", EntryPoint="ADsOpenObject", CharSet=CharSet.Unicode, ExactSpelling=true)]
private static extern int IntADsOpenObject(string path, string userName, string password, int flags, [In, Out] ref Guid iid, [MarshalAs(UnmanagedType.Interface)] out object ppObject);

http://msdn.microsoft.com/en-us/library/aa772238(VS.85).aspx