Как проверить, установлен ли у пользователя Windows пароль?

Вопрос

Я не знал, что это будет сложно понять, но вот я здесь.

Я разрабатываю клиент сетевой поддержки, который должен определять, зарегистрирован ли текущий у пользователя установлен пароль. Я пробовал это с помощью WMI, проверяя свойство PasswordRequired в классе Win32_UserAccount , но он возвращает false , даже если моя учетная запись защищена паролем . У меня нет идей ...

(Предыстория: мне нужна эта информация, чтобы сообщить пользователю, что он должен установить ее, чтобы я мог подключиться к нему через удаленный рабочий стол, что не очень хорошо, если учетная запись "незащищена" ". Если есть способ обойти это, я бы также принял другое решение.)

С уважением
Nefarius

Решение

Проще, чем я думал, я справился с этим с помощью функции WinAPI LogonUser и предоставил вам этот простой код оболочки:

    private bool PasswordRequired
    {
        get
        {
            IntPtr phToken;

            // http://www.pinvoke.net/default.aspx/advapi32/LogonUser.html
            bool loggedIn = LogonUser(Environment.UserName,
                null,
                "",
                (int)LogonType.LOGON32_LOGON_INTERACTIVE,
                (int)LogonProvider.LOGON32_PROVIDER_DEFAULT,
                out phToken);

            int error = Marshal.GetLastWin32Error();

            if (phToken != IntPtr.Zero)
                // http://www.pinvoke.net/default.aspx/kernel32/CloseHandle.html
                CloseHandle(phToken);

            // 1327 = empty password
            if (loggedIn || error == 1327)
                return false;
            else
                return true;
        }
    }

Это именно то, что мне нужно, спасибо всем за ваш пост и грамотные ответы, всегда могу на вас рассчитывать! =)

9
задан Nefarius 2 July 2011 в 11:59
поделиться