我正在为 Windows 7 的 MSV1_0 构建自定义身份验证子包。我使用了 Windows SDK 中的 msvsubauth 示例,我有 2 个关于我面临的一些问题的问题:
当我只是想确保调用例程并将注册表中的 Auth0 属性设置为我的包并在创建文件的 Msv1_0SubAuthenticationRoutine 末尾添加一个简单代码时:
// // Cleanup up before returning. // Cleanup: hTestFile = CreateFile( TEXT("C:\\lsa\\lsa.txt"), GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(hTestFile != INVALID_HANDLE_VALUE) { CloseHandle(hTestFile); } return Status; } // Msv1_0SubAuthenticationRoutine
显然,包被调用是因为当我输入密码时,我从 Windows 收到一条错误消息“参数不正确”,这是一个好兆头。但是为什么我会收到那个错误?当从单独的 .exe 文件执行完全相同的代码时,它会完美运行并创建测试文本文件。我检查了权限并为“所有人”设置了“完全控制”。有任何想法吗? SDK 并未明确提及 LSA 为身份验证包中的代码创建了何种隔离。
第二个问题是测试 AP。目前每次更改我都会重建库,将其复制到测试 VM,然后复制到 System32 文件夹并重新启动它。有更简单的方法吗?
提前致谢!
最佳答案
在 Winlogon 和 LSASS 中进行调试是最耗时的调试。
为了简化调试,您可以编写一个导出相同功能的代理 AP。加载时,proxy_ap 会
- 将真实 AP 从已知位置复制到临时位置。
- 加载该 DLL 的库,获取所有内容的 GetProcAddress,并将它收到的任何调用转发给新加载的 DLL。
- 观察复制原始 AP 的目录中的变化
- 发生变化时(如果您的 AP 发生变化)FreeLibrary 并转到第 2 步
但是您需要紧紧捕获开发目标上发生的事情,因为在处理来自多个线程的请求时处理 dll 开关可能会成为比您试图解决的问题更糟糕的噩梦。
LogonUI.exe 每次都会启动一个新的实例,但是 LSASS.exe 是长期存在的。
+查看 CVSNT 源代码 ( http://cvsnt.sourcearchive.com/ )。他们有一个非常好的 AP,它实现了 su。使用 psexec -s
(来自 Microsoft/SysInternals pstools suite)在本地系统帐户中运行示例
关于c++ - 实现自定义 Windows 身份验证包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3920801/