//Override public List <string> getAttributeNames() { IntPtr attributePointer = IntPtr.Zero, berPointer = IntPtr.Zero; List <string> attributeList = new List <string>(); try { attributePointer = LdapClientLibrary.ldap_first_attribute(this._message.GetConnection().GetIntPtr(), this._entry, out berPointer); while (attributePointer != IntPtr.Zero) { var attributeName = Marshal.PtrToStringAnsi(attributePointer); attributeList.Add(attributeName); LdapClientLibrary.ldap_memfree(attributePointer); attributePointer = LdapClientLibrary.ldap_next_attribute(this._message.GetConnection().GetIntPtr(), this._entry, berPointer); } return(attributeList); } finally { LdapClientLibrary.ldap_value_free(attributePointer); LdapClientLibrary.ber_free(berPointer, 0); } }