LogonUser с JNA приводит к «неизвестному имени пользователя или неверному паролю» - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь реализовать функциональность для выполнения некоторых приложений с определенными учетными данными.Для этого я проверяю, возможен ли вход в систему с учетными данными.

import com.sun.jna.LastErrorException;
import com.sun.jna.platform.win32.Advapi32;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.WinBase;
import com.sun.jna.platform.win32.WinNT;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class TestHarness {

    public static void main(String[] args) throws UnknownHostException {

        WinNT.HANDLEByReference phUser = new WinNT.HANDLEByReference();
        System.out.println(InetAddress.getLocalHost().getHostName());
        if (!Advapi32.INSTANCE.LogonUser("de313e", ".",
                "password", WinBase.LOGON32_LOGON_NETWORK, WinBase.LOGON32_PROVIDER_DEFAULT, phUser)) {
            throw new LastErrorException(Kernel32.INSTANCE.GetLastError());
        }
    }
}

К сожалению, это дает мне

com.sun.jna.LastErrorException: GetLastError() returned 1326

Предоставленное имя пользователя является моим текущим именем пользователя.У кого-нибудь есть идея, почему это не «работает».

Я запускаю его на ОС Windows 10.Мой пароль содержит несколько специальных символов, таких как ! и &.Имя пользователя:

enter image description here

Заранее благодарим за помощь

1 Ответ

0 голосов
/ 02 марта 2019

Документация для LogonUser указывает на параметр lpszDomain:

Указатель на строку с нулевым символом в конце, которая задает имя домена или сервера, чья база данных учетных записейсодержит учетную запись lpszUsernameЕсли этот параметр имеет значение NULL, имя пользователя должно быть указано в формате UPN.Если этот параметр равен «.», Функция проверяет учетную запись, используя только локальную базу данных учетных записей.

Поскольку вы используете ".", вы проверяете только локальную базу данных пользователей.Это будет работать для учетной записи sysadmin на локальном компьютере (NB3DE2730054).Однако вы пытаетесь проверить пользователя домена de313e, поэтому вы должны указать домен MASTDOM.

В качестве альтернативы вы можете установить домен на null и включить домен в пользователя: de313e@MASTDOM.Или, как вы отметили в комментариях, если вы используете logonType LOGON32_LOGON_NEW_CREDENTIALS и logonProvider LOGON32_PROVIDER_WINNT50, "." будет работать.

...