Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > Локальные политики пароля внутри домена |
Автор: racner 28.6.2010, 19:48 |
Здравствуйте! =) Может кто-нибудь знает, или имеет предположение, как на Visual C++ узнать локальные политики пароля? Средствами Windows можно увидеть данные политики, если запустить: C:\Windows\System32\gpedit.msc. Там во вкладке Computer Configuration -> Windows Settings -> Security Settings -> Account Policies -> Password Policy можно увидеть интересующие меня значения, такие как maximum password length, Enforce password history и т.п. Но как узнать данные значения средствами Visual C++, подскажите, пожалуйста, хотя бы в каком направлении рыть инфу ) |
Автор: jonie 29.6.2010, 07:47 |
racner, читай эту KB http://support.microsoft.com/kb/555540 |
Автор: racner 30.6.2010, 10:50 | ||||
Спасибо за ссылку. =) К сожалению, это не совсем то, что мне нужно. Возможно с помощью этих ключей в реестре можно создать какие-то дополнительные политики паролей в локальной системе. Но у меня задача стоит другая: узнать политики пароля в домене. Для моего решения подошла функция: NetValidatePasswordPolicyFree Вот привожу рабочий пример тестовой программки, которуюю сделал у себя:
В системе, в которой я её компилирую она работает хорошо (windows7). Ввожу имя контроллера домена и пароль, програма отвечает все как надо. Однако, если эту программку запусить на другой системе (windows XP) возникает ошибка: The procedure entry point NetValidatePasswordPolicy coluld not be localed in the dynamic link library NETAPI32.dll. В самой системе есть данная библиотека, но более ранней версии. Тупо заменить старый файл NetApi32.dll - нельзя, система не позволяет. Подскажите пожалуйста, как с этим бороться? |
Автор: 12usver12 30.6.2010, 14:55 | ||
делай на XP проверку наличия в экспорте данной функции
если отсуствует то носи с собой либу с екзешником и динамически бери оттуда |
Автор: xvr 30.6.2010, 18:13 |
У меня есть ну очень БОЛЬШОЕ сомнение, что системная либа от Win7 заработает на WinXP ![]() NB. В MSDN вообще написано, что НЕ для серверов она (NetValidatePasswordPolicy) не поддерживается |
Автор: racner 3.7.2010, 18:01 | ||||
Да, действительно, NetValidatePasswordPolicy не работает в Windows XP, т.к. библиотека WINAPI32.dll не экспортирует данную функцию, в отличие от более поздних версий dll-ки. Зато нужные мне сведения показывает системная команда net accounts. Но как получить политики паролей программным путем? К счастью, мне удалось это сделать. Вот мой код на Visual Basic: (кто хочет проверить, достаточно скопировать в текстовый файл с расширением *.vbs и запустить)
Однако возникли пробемы при попытке перевести данный код на С++. Аналог функции в GetObject в плюсах : ADsGetObject. Может кто-то знает как перевести данный код на плюсы? =) Вот моя заготовочка:
|
Автор: xvr 3.7.2010, 19:27 |
Это WMI. Смотрите в MSDN - там есть примеры как с ним работать из С++ |
Автор: racner 4.7.2010, 21:36 | ||
Всем спасибо за помощь. Я решил для себя данный вопрос. Составил вот такую вот программку, авось кому-нибудь пригодится =) :
Данные политики пароля выводятся только в том случае, если машина состоит в домене. Данный код С++ является аналогом кода на VBS, который я приводил выше. |
Автор: xvr 5.7.2010, 08:42 |
Справедливости ради замечу, что не совсем аналогом - метод логина в WMI немного другой: С++ код использует класс WbemLocator, а VB moniker, но результат тот же ![]() |