Назад | Перейти на главную страницу

Фильтр зарегистрированных паролей в Windows 2008 никогда не срабатывает

Я написал обычай фильтр паролей для контроллеров домена Windows (файл passfilt.dll) и зарегистрировал его в соответствии с инструкции (положил в папку system32 и обновил ключ реестра)

Но нет никаких признаков того, что DLL даже вызывается. Никто.

Я настроил аудит системных событий и получаю 4614 событий ("Пакет уведомлений был загружен менеджером учетных записей безопасности.") Для Scecli и Расфм, оба перечислены в "HKEY_LOCAL_MACHINE.SYSTEM.CurrentControlSet.Control.Lsa.Notification Packages". Если я удалю их из «Пакетов уведомлений», они не будут прочитаны. Как и ожидалось. Но DLL, которую я поместил в «Пакеты уведомлений», не загружается. И не зарегистрированный провал аудита. Или любое другое мероприятие. DLL не загружается, так как я могу удалить ее без блокировки.

Операционная система - Windows 2008 R2 x64, и я использую 64-битную версию своей DLL.

Кто-нибудь знает, как мне приступить к решению этой проблемы? Хотя бы найти сообщение об ошибке или что-то в этом роде ...

Вы не можете динамически загружать или выгружать DLL. Поместите DLL в system32. Добавьте имя в список пакетов уведомлений. Вам нужно только имя (а не часть .DLL). Вам нужно будет перезагрузиться. При загрузке ОС считывает значение пакетов уведомлений и загружает туда все библиотеки DLL. При входе в систему запустите winmsd или msinfo32, чтобы убедиться, что ваша DLL загружена. См. Раздел Конфигурация компьютера + Программная среда + Загруженные модули. DLL вызывается только во время изменения pw и только в том случае, если pw соответствует требованиям Windows (минимальная длина, отсутствие проблем с минимальным возрастом, не в буфере истории). LSA сначала проверяет требования Windows (в 2K3 и 2K8), а затем вызывает функцию PasswordFilter () для каждой библиотеки DLL, указанной в пакетах уведомлений в указанном порядке. Если ваша DLL сообщает, что pw в порядке, и никакие другие фильтры не отклоняют его, pw передается в AD / SAM, а затем LSA снова проходит через все библиотеки DLL, перечисленные там, чтобы вызвать PasswordChangeNotify (), чтобы DLL могла выполнить синхронизацию pw (т.е. синхронизация в порядке, поскольку pw был привязан к AD, никогда не пытайтесь синхронизировать вызов PasswordFilter ()). Если вам нужно изменить обновление DLL, вам необходимо удалить запись из пакетов уведомлений, перезагрузить компьютер, скопировать новый в system32, снова обновить пакеты уведомлений и перезагрузиться. Сэкономьте время, напишите сценарий и используйте 2 имени DLL, поэтому при перезагрузке вы загружаете вторую, затем переключаетесь на первую при следующей перезагрузке и т. Д. Отладка ядра выполняется медленно / болезненно. Так что, если вы отлаживаете, вероятно, легче будет записать его в файл.

Я решил эту проблему, установив распространяемый пакет Visual Studio C ++ на каждом DC.

Вы ДОЛЖНЫ установить ту же версию распространяемого пакета VS C ++ в соответствии с версией Visual Studio, используемой для компиляции вашей dll.

Вам, вероятно, придется бежать regsvr32 чтобы убедиться, что он правильно регистрируется. Ссылка объясняет правильный синтаксис (обычно просто regsvr32 dllname.dll)