1

我正在尝试根据这篇 devx 文章中的示例在 C++ 中实现一个非常基本的 Windows 密码过滤器

然而,LSA 没有加载 DLL(msinfo32 中加载的模块中没有任何内容),尽管设置了适当的 reg 条目并且 DLL 被复制到 system32 并重新启动。这发生在 2003 x64 和 2008R2(显然也是 x64)上。到目前为止,我已经搜索了 stackoverflow 并实施了所有建议。

我正在使用VS2012。它设置为 x64 和 /MT(所以我不需要 redist 对吗?)并且我确保正确引用了 .def 文件。在dependency walker中,我可以看到正确导出的三个函数,尽管它说“由于隐式依赖模块中缺少导出函数,至少一个模块具有未解析的导入”。并声称 kernel32.dll 缺少一些导入(不确定这是否相关)。

如何调试 LSA 应该加载 DLL 时发生的情况?注意我不是开发人员,所以上面的一些内容相当模糊,尤其是在编译/链接和导出函数时的行为。

非常感谢

4

1 回答 1

5

在查看以下信息后: https: //support.microsoft.com/en-us/kb/2686224

我发现我们遵循的未指定路径和文件扩展名的信息对于服务器 2012 不正确。我使用此信息更新了注册表,并将 x64 dll 与 msvcp100.dll 和 msvcr100.dll 一起放在 System32 文件夹中(来自我编译 dll 的机器的 system32 目录)。重启,测试,BAM!

检查您的系统事件日志,查找 Directory-Services-SAM 的错误条目 它会说:密码通知 DLL C:\Windows\System32\PasswordFilterRegEx.dll 加载失败,错误 126 -或- 密码通知 DLL C: \Windows\System32\PasswordFilterRegEx.dll 加载失败,出现错误 193

126 表示它无法找到 dll 本身(注册表项中可能缺少路径)或缺少依赖项(在我的情况下为 msvcp100.dll 和 msvcr100.dll)

193 表示由于架构不匹配而无法加载 dll(例如,您正在运行 32 位操作系统但尝试加载 64 位 dll,反之亦然)

于 2016-04-01T03:37:40.127 回答