在创建DirectoryEntry实例时,您能详细说明场景背后的内容吗?
代码段:
var dirEntry = new DirectoryEntry("LDAP://CN=jsmith,DC=fabrikam,DC=Com", userName, password);
我的意思是,身份验证如何运作?谁跟谁说话?假设上面的代码在控制台应用程序中。
答案 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