Понимание Проблемы с LogonUser в 64-битной Windows 7 Ultimate
Проблема, описанная в контексте, заключается в том, что функция LogonUser из WinAPI всегда возвращает True, если передать ей параметр LOGON32_LOGON_NETWORK. Это происходит независимо от того, правильно ли указаны имя пользователя и пароль. Данное поведение наблюдается исключительно при использовании режима LOGON32_LOGON_NETWORK. Если же использовать LOGON32_LOGON_INTERACTIVE, то функция работает корректно, возвращая True или False в зависимости от введенных данных. Автор вопроса отмечает, что использует LOGON32_LOGON_NETWORK, так как документация указывает на более высокую скорость работы данного режима.
Код, представленный в контексте, демонстрирует использование функции LogonUser в консольном приложении на языке Delphi, с использованием Object Pascal. Пример кода ниже:
{$APPTYPE CONSOLE}
uses
SysUtils,
Windows;
var
hUser : THandle;
res : Boolean;
begin
try
res := LogonUser(PChar('user'),
PChar(nil),
PChar('password'),
LOGON32_LOGON_NETWORK,
LOGON32_PROVIDER_DEFAULT,
hUser);
finally
if hUser > 0 then
CloseHandle(hUser);
end;
Writeln(BoolToStr(res, true));
Readln;
end.
Проблема проявляется только в 64-битной версии Windows 7 Ultimate, в то время как в 32-битной версии Windows 7 Professional функция работает корректно.
Альтернативный ответ и Подтвержденный ответ
В альтернативном ответе подчеркивается, что после вызова функции LogonUser с помощью GetLastError всегда возвращается 0, что не дает дополнительной информации о причине проблемы. Подтвержденный ответ указывает на связь проблемы с гостевым аккаунтом и политиками безопасности. При использовании LogonUser с параметром LOGON32_LOGON_NETWORK система автоматически использует гостевой аккаунт для входа, что приводит к постоянному возврату True. Решением проблемы может быть изменение локальных политик безопасности, отключение статуса гостевого аккаунта.
Решение проблемы
Для устранения проблемы необходимо проверить и, при необходимости, изменить локальные политики безопасности. В частности, следует отключить гостевой аккаунт, чтобы предотвратить его автоматическое использование при вызове LogonUser с параметром LOGON32_LOGON_NETWORK. Это можно сделать через редактор локальной политики безопасности (secpol.msc), выбрав соответствующий параметр и изменив его состояние на "Отключено".
Выводы
При работе с функцией LogonUser в 64-битной версии Windows 7 Ultimate важно учитывать особенности работы с гостевым аккаунтом и корректно настраивать локальные политики безопасности. Это позволит избежать неожиданного поведения функции и обеспечит корректную аутентификацию пользователей.
Проблема заключается в том, что функция `LogonUser` из WinAPI в 64-битной версии Windows 7 Ultimate возвращает `True` независимо от верности учетных данных при использовании параметра `LOGON32_LOGON_NETWORK`, что является неожиданным поведением, возможно
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.