我需要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.
Run Code Online (Sandbox Code Playgroud)
如果我使用LOGON32_LOGON_INTERACTIVE,则该函数正常工作(根据传递的用户和密码返回true或false).
注意:我正在使用LOGON32_LOGON_NETWORK登录类型,因为文档说哪个是最快的.
为什么LogonUser函数总是使用LOGON32_LOGON_NETWORK模式返回true?
UPDATE
问题出现在Windows 7 64位Ultimate中
在Windows 7 32位专业工作正常.
我可以重现您的问题,它似乎与来宾帐户和安全策略有关.首先,当您使用该LogonUser函数时,将生成新的事件安全性.您可以检查该窗口中记录的用户帐户.
检查下一张图片(Invitado =西班牙语的访客)
因此,在这种情况下,无论您使用哪个用户,来宾用户都会用于登录.您可以修复此行为,修改本地安全策略,禁用来宾帐户状态.

| 归档时间: |
|
| 查看次数: |
2891 次 |
| 最近记录: |