模拟登录有时需要很长时间。为什么?

Impersonation login sometimes takes a long time. Why?

我有一个应用程序在我的公司内部被数百名用户使用。 它使用模拟用户从网络驱动器安全地访问文件存储库。

这是我的 WINAPI 声明:

Private Declare Auto Function LogonUser Lib "advapi32.dll" (ByVal un As String, ByVal domain As String, ByVal pw As String, ByVal LogonType As Integer, ByVal LogonProvider As Integer, ByRef Token As IntPtr) As Boolean

Private Const LOGON32_LOGON_INTERACTIVE As Integer = 2
Private Const LOGON32_LOGON_NETWORK As Integer = 3
Private Const LOGON32_LOGON_BATCH As Integer = 4
Private Const LOGON32_LOGON_SERVICE As Integer = 5
Private Const LOGON32_LOGON_UNLOCK As Integer = 7
Private Const LOGON32_LOGON_NETWORK_CLEARTEXT As Integer = 8
Private Const LOGON32_LOGON_NEW_CREDENTIALS As Integer = 9

Private Const LOGON32_PROVIDER_DEFAULT As Integer = 0
Private Const LOGON32_PROVIDER_WINNT35 As Integer = 1
Private Const LOGON32_PROVIDER_WINNT40 As Integer = 2
Private Const LOGON32 _PROVIDER_WINNT50 As Integer = 3

我是这样用的...

pAccess = LogonUser(sSpecialUser, sDomain, sPW, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, pTokenHandle)

对于绝大多数用户来说,调用 LogonUser 的时间小于 .1 秒。但对于一些用户来说,通话需要 6 秒或 20 秒,或 120 秒。这似乎取决于用户计算机连接到的本地网段。

IT 坚持认为“这是正常的”。执行登录有时需要很长时间。我认为这是“废话”。为什么?

因为如果我这样做:

pAccess = LogonUser(sCatalogUser, sDomain, sCatalogPW, LOGON32_LOGON_NETWORK_CLEARTEXT , LOGON32_PROVIDER_DEFAULT, pTokenHandle)

它 returns 立即成功,从任何计算机,在任何网段上。

现在,使用 LOGON32_LOGON_NETWORK_CLEARTEXT 并没有给我访问网络文件系统的权限,所以这不好,但是,它确实表明这不是计算机 WRT 的网络拓扑问题导致此问题的 AD 服务器。

执行模拟用户登录时哪些因素会导致这种延迟?

感谢您的任何想法。

更多信息:

部署应用程序的 network/computers 未连接到互联网。

这最近开始在一些以前没有发生过的计算机上发生。也许巧合的是,在缓慢登录开始发生之前的周末,有一些 windows 更新应用于这些机器。但是其他机器打了同样的补丁还是没有显示问题。

答案是:使用LOGON32_LOGON_NEW_CREDENTIALS代替LOGON32_LOGON_INTERACTIVE。

MS 文档:

This logon type allows the caller to clone its current token and specify new credentials for outbound connections. The new logon session has the same local identifier but uses different credentials for other network connections.

我制作了一个实验性应用程序来检查 LogonUser 的不同参数,当它获得有效令牌时,检查是否能够使用模拟身份将文件复制到受限文件夹或从中复制文件。 LOGON32_LOGON_NEW_CREDENTIALS 有效且速度很快。