我为
Windows域控制器编写了一个自定义
password filter(passfilt.dll)并根据
the instructions注册(将其放在system32文件夹中并更新了注册表项)
但是没有迹象表明DLL甚至被调用.没有.
我已经设置了系统事件的审核,我收到了“HKEY_LOCAL_MACHINE.SYSTEM.CurrentControlSet.Control.Lsa”中列出的scecli和rassfm的4614 events(“安全帐户管理器已加载通知包.”).通知包“.如果我从“通知包”中删除它们,则不会读取它们.正如所料.但我没有加载我在“通知包”中放入的DLL.记录的审核也不会失败.或任何其他事件. DLL没有加载,因为我可以在没有锁的情况下删除它.
操作系统是Windows 2008 R2 x64,我使用的是64位版本的DLL.
您无法动态加载或卸载DLL.将DLL放在system32中.将名称添加到通知包列表中.您只需要名称(而不是.DLL部分).您需要重新启动.在启动时,操作系统会读取Notification Packages值并在那里加载所有DLL.当您登录运行winmsd或msinfo32以确保您的DLL已加载.请参阅计算机配置软件环境加载模块.仅在pw更改期间调用DLL,并且仅当pw满足窗口要求时(最小长度,无最小年龄问题,而不是历史缓冲区). LSA首先检查窗口要求(在2K3和2K8中),然后为列出的顺序中的Notification Packages中列出的每个DLL调用PasswordFilter()函数.如果你的DLL说pw没问题并且没有其他过滤器拒绝它,则pw被提交到AD / SAM,然后LSA再次通过那里列出的所有DLL来调用PasswordChangeNotify(),这样DLL就可以进行pw同步(即同步是正常的,因为pw致力于AD,从不尝试同步PasswordFilter()调用).如果您需要修改更新DLL,您必须从Notification Packages中删除该条目,重新启动,将新的一个复制到system32,再次更新Notification Packages并重新启动.节省时间,编写脚本并使用2个DLL名称,以便在重新启动时加载第2个然后在下次重启时切换回第一个,等等.内核调试很慢/很痛苦.因此,如果您调试它可能更容易写入文件.