【发布时间】:2013-07-21 13:56:16
【问题描述】:
我需要在我的 Server 应用程序上使用LogonUser WinApi 函数,但无论用户和密码是否匹配或存在,此函数始终返回 true。这只发生在传递给函数的模式是LOGON32_LOGON_NETWORK
{$APPTYPE CONSOLE}
uses
SysUtils,
Windows;
var
hUser : THandle;
res : Boolean;
begin
try
res := LogonUser(LPWSTR('user'),
LPWSTR(nil),
LPWSTR('password'),
LOGON32_LOGON_NETWORK,
LOGON32_PROVIDER_DEFAULT,
hUser);
finally
if hUser>0 then
CloseHandle(hUser);
end;
Writeln(BoolToStr(res, true));
readln;
end.
如果我改用LOGON32_LOGON_INTERACTIVE,该函数可以正常工作(根据传递的用户和密码返回真或假)。
注意:我使用的是 LOGON32_LOGON_NETWORK 登录类型,因为文档说明哪种登录类型最快。
为什么LogonUser函数在LOGON32_LOGON_NETWORK模式下总是返回true?
更新
此问题出现在 Windows 7 64 位 Ultimate 中
在 Windows 7 32 位专业版中工作正常。
【问题讨论】:
-
在 LogonUser 调用之后 GetLastError() 是否返回任何有趣的东西?
-
GetLastError 总是返回 0。
-
对我来说很好。 Windows 7 64 位,Delphi 2009。但它并不能告诉你太多,因为我们的配置可能完全不同。听起来您将这些凭据缓存在某处。
-
我也在使用 XE4 和 Windows 7 64 位。
-
我刚刚在另一台装有 Win 7 32 位的机器上进行了测试,并且工作正常。