我正在调用LogonUser以尝试验证一组凭据:
LogonUser("forest", "avatopia.com" "stapler",
LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_WINNT50, out token);
即使帐户被禁用,它也会返回true :
我还尝试直接使用 SSPI 来验证凭据,这涉及调用:
AcquireCredentialsHandle(..., "Negotiate", SECPKG_CRED_OUTBOUND, ..., ["forest", "stapler", "avatopia.com"], ...)
InitializeSecurityContext(...)
AcquireCredentialsHandle(..., "Negotiate", SECPKG_CRED_INBOUND, ...)
AcceptSecurityContext(...)
InitializeSecurityContext(...)
AcceptSecurityContext(...)
AcquireCredentialsHandle
在大多数机器上,如果用户帐户被禁用,初始调用会失败。但是在我正在测试的这台特定机器上,它完成了整个周期并且可以正常工作。
如果我尝试使用无效密码,那么LogonUser
(正确)会失败:
LogonUser("forest", "avatopia.com" "adf342sdf3",
LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_WINNT50, out token);
返回false,并GetLastError
返回1326
(登录失败:未知用户名或密码)
尝试使用无效密码的 SSPI 也(正确)失败:
AcquireCredentialsHandle(..., "Negotiate", SECPKG_CRED_OUTBOUND, ..., ["forest", "adf342sdf3", "avatopia.com"], ...)
InitializeSecurityContext(...)
AcquireCredentialsHandle(..., "Negotiate", SECPKG_CRED_INBOUND, ...)
AcceptSecurityContext(...)
失败(登录尝试失败8009030C
)
更糟糕的是,这种行为只发生在一台机器上。
为什么LogonUser
和整个安全支持提供程序接口都表明在特定加入域的机器上禁用帐户的凭据:有效?
- 加入域的机器
LogonUser
(错误地)成功:Windows XP SP2 - 加入域的机器
LogonUser
(正确)失败:Windows XP SP2
更新:
没有本地用户调用Forest
:
也没有任何本地用户调用Forest
:
这是无关紧要的,因为我要求avatopia.com\Forest
,而不是speeder\Forest
。
oi vay人们只是因为允许残疾用户访问他们不应该被允许访问的东西而把他们的内裤弄成一堆。