Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

### Понимание Проблемы с `LogonUser` в 64-битной Windows 7 Ultimate

Delphi , Синтаксис , Справочник по API-функциям

Понимание Проблемы с 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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Справочник по API-функциям ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 14:32:59/0.0033209323883057/0