如何识别RDP / MSTSC中登录失败的时间?



我正在使用MsRdpClient9NotSafeForScripting类开发RDP/MSTSC的C#实现。

我需要识别用户登录何时由于凭据错误而失败。

事件OnLogonError应该完成这项工作,但它不会触发(至少在Server 2016上不会(,而其他事件似乎可以正常工作。

OnLogonError的Microsoft文档中:

LOGON_FAILED_BAD_PASSWORD (0 (0x0((

登录失败,因为登录凭据无效。

该行为(未触发OnLogonError(被多次报告,但没有解决方案。我发现的一次提示是:在代码项目中:

经过进一步测试,我发现如果连接到 Windows 2003 服务器,则会输入事件。但连接到 Win7 及更高版本以及 Win2008R2 及更高版本时则不然。我想知道Microsoft是否删除了较新系统中的事件功能?

但是从事件的文档中应该支持它

支持的最低客户端 Windows Vista

最低支持的服务器 Windows Server 2008


编辑

我下载了mRemoteNG,它似乎是RDP的一个非常干净的实现。此处未使用该事件。但是当我添加它时,它也永远不会触发。

编辑2

连接到 Windows Server 2012 R2 时,该事件似乎有效。但不适用于服务器2016/2019。


到目前为止我尝试过什么

  • 使用类的几个含义进行测试(从MsRdpClient6NotSafeForScripting到MsRdpClient9NotSafeForScripting(
  • 使用多个设置进行测试

问题

  • 是否有任何设置可能导致此事件不触发?
  • 是否有其他方法可以识别登录失败?

在项目文件中检查您的 ComReference,并尝试将 WrapperTool 设置为 aximp 而不是 tlbimp。查看构建后是否生成 AxInterop,然后再次测试远程桌面连接。

它应该是这样的

<COMReference Include="RDPCOMAPILib.dll">
<Guid>cc802d05-ae07-4c15-b496-db9d22aa0a84</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<WrapperTool>aximp</WrapperTool>
<Lcid>0</Lcid>
<Isolated>false</Isolated>
</COMReference>

最新更新