我正在为Windows 7的MSV1_0构建自定义身份验证子包。我已经使用了Windows SDK中的msvsubauth示例,我对我遇到的一些问题有两个问题:
当我正在尝试确保调用例程get并将注册表中的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为auth包中的代码创建了什么样的隔离。
第二个问题是测试AP。目前,每次更改我都会重建库,将其复制到测试VM,然后复制到System32文件夹并重新启动它。有没有更简单的方法呢?
提前感谢!
答案 0 :(得分:3)
在Winlogon和LSASS中进行调试是最耗时的调试。
为了简化调试,您可以编写一个导出相同功能的代理AP。加载后,您将使用proxy_ap
但是你需要紧紧抓住开发目标上发生的事情,因为在处理来自多线程的请求时处理dll开关可能会成为你想要解决的更糟糕的噩梦。
LogonUI.exe每次都会启动一个新实例,但LSASS.exe很长时间。
+查看CVSNT源代码(http://cvsnt.sourcearchive.com/)。他们有一个很好的AP,实现了su。使用psexec -s
(来自Microsoft / SysInternals pstools suite)在本地系统帐户中运行示例
答案 1 :(得分:1)
也许您的问题是每个人都只包含经过身份验证的用户?这只是猜测。
我建议您使用Process Monitor来监控Access Denied消息或路径。它非常适合调试各种许可/路径问题。
如果您在“解锁工作站”或“更改密码”屏幕中遇到此问题,并且它不会阻止您登录,这应该很容易 - 将其设置为运行,重现问题,重新登录和嘿presto。
否则,您可能不得不采取一些技巧,例如仅针对某些用户帐户执行该代码路径,在第N次尝试等等。