Authentication DirectoryEntry身份验证引发COMException而不是DirectoryServicesCOMException

Authentication DirectoryEntry身份验证引发COMException而不是DirectoryServicesCOMException,authentication,active-directory,directoryentry,comexception,Authentication,Active Directory,Directoryentry,Comexception,我正在使用.NET创建DirectoryEntry和访问NativeObject成员的权限,以根据AD验证用户的凭据 在某些情况下,登录将失败,因为设置了“用户下次登录时必须更改密码”标志,或者由于登录时间不匹配,用户当前不允许登录 我想区分这些情况是发生了还是用户输入了错误的密码 如果使用参数AuthenticationTypes.None创建DirectoryEntry对象,则如果登录失败,将引发DirectoryServicesCOMException。此异常中的信息可用于确定是否设置了“

我正在使用.NET创建DirectoryEntry和访问NativeObject成员的权限,以根据AD验证用户的凭据

在某些情况下,登录将失败,因为设置了“用户下次登录时必须更改密码”标志,或者由于登录时间不匹配,用户当前不允许登录

我想区分这些情况是发生了还是用户输入了错误的密码

如果使用参数AuthenticationTypes.None创建DirectoryEntry对象,则如果登录失败,将引发DirectoryServicesCOMException。此异常中的信息可用于确定是否设置了“密码更改”标志

不幸的是,使用AuthenticationTypes.None不是一种安全的方式,因为密码是传输的

如果使用参数AuthenticationTypes.Secure创建DirectoryEntry对象,则会引发COMException而不是DirectoryServicesCOMException。此异常非常常见,因为它总是有错误代码error\u LOGON\u FAILURE。我无法区分用户是否输入了错误的密码或是否必须更改密码

MSDN文档说明:如果设置了AuthenticationTypes.Secure,WinNT提供程序将使用NTLM对客户端进行身份验证。我猜这会导致一种不同的行为,其中只抛出一个COMException

有效,但不安全:

var de = new DirectoryEntry(path, user, pass, AuthenticationTypes.None);
安全,但仅抛出COMException:

var de = new DirectoryEntry(path, user, pass, AuthenticationTypes.Secure);
第一个选项使用基本身份验证并抛出特定的DirectoryServicesCOMException,第二个选项使用NTLM并仅抛出通用的COMException

有人知道我如何检测用户是否需要更改密码、帐户是否已锁定或过期、登录时间是否无效。。。或者如果用户刚刚输入了错误的密码

非常感谢