2015-03-09 2 views
0

У меня есть приложение, которое должно проверить пароль пользователя Windows для пользователя.LogonUser возвращает ERROR_NO_LOGON_SERVERS

Для этого я использую функцию LogonUser из Windows API. Пользователь может быть подключен к домену.

result = LogonUserW(wUsername, wDomain, wPassword, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, pH); 

Когда пользователь подключается к домену, функция работает хорошо, однако, когда пользователь выключает Wi-Fi, или отключить LAN-кабель так, чтобы он отсутствует, функция всегда возвращает ошибку код 1311, который имеет значение «В настоящее время нет серверов входа в систему, доступных для обслуживания запроса на вход в систему».

Функция LogonUser имеет четвертый параметр, тип операции входа в систему. The documentation говорит, что если значение этого параметра является «LOGON32_LOGON_INTERACTIVE», тип входа имеет дополнительные расходы на кэширование информации о входе в систему для отключенных операций, поэтому не должно ли это работать в том случае, если пользователь находится в поле?

Заранее за вашу помощь.

ответ

0

Я закончил с использованием интерфейса поставщика поддержки безопасности (SSPI), как описано в качестве альтернативы LogonUser API на этой странице: How to validate user credentials on Microsoft operating systems

Использование функции SSPLogonUser, как это предусмотрено в фрагменте кода позволил мне проверить для учетные данные пользователя при подключении к домену, но также, когда контроллер домена не был доступен (где в этом случае он не прошел с помощью LogonUser API).