我需要在我的LogonUser服务器应用程序上使用函数,但是不管用户和密码匹配还是存在,这个函数总是返回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,则函数工作正常(根据传递的用户和密码返回true或false )。
注意:我使用LOGON32_LOGON_NETWORK登录类型,因为文档显示哪个是最快的。
为什么LogonUser函数总是使用LOGON32_LOGON_NETWORK模式返回true?
更新
此问题发生在Windows 7 64位极限中
在Windows 7 32位专业工作很好。
发布于 2013-07-22 19:04:59
我可以复制你的问题,它似乎与客人帐户和安全政策有关。首先,当您使用LogonUser函数时,将生成一个新事件安全性。您可以检查登录到该窗口的用户帐户。
检查下一个图像(西班牙语中的Invitado=Guest)

因此,在这种情况下,无论您使用哪个用户,客户用户都被用来登录。可以修复此行为,修改本地安全策略,禁用来宾帐户状态。

https://stackoverflow.com/questions/17794229
复制相似问题