我需要在我的服务器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 位专业版中工作正常。