Вопрос
Я не знал, что это будет сложно понять, но вот я здесь.
Я разрабатываю клиент сетевой поддержки, который должен определять, зарегистрирован ли текущий у пользователя установлен пароль. Я пробовал это с помощью 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;
}
}
Это именно то, что мне нужно, спасибо всем за ваш пост и грамотные ответы, всегда могу на вас рассчитывать! =)