实现自定义Windows身份validation包

我正在为Windows 7构buildMSV1_0的自定义身份validation子包。我从Windows SDK中使用了msvsubauth示例,并且遇到以下两个问题:

  1. 当我试图确保例程get被调用,并将registry中的Auth0属性设置为我的包,并在创build文件的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 

    显然,包得到调用,因为当我input我的密码,我得到一个错误信息从Windows“参数不正确”这是一个好兆头。 但为什么我得到这个错误? 当完全相同的代码从一个单独的.exe文件执行完全运行并创buildtesting文本文件。 我已经检查了权限并为“everyone”设置了“完全控制”。 有任何想法吗? SDK并没有提到什么样的隔离LSA为auth包内的代码创build。

  2. 第二个问题是testingAP。 目前,每改动一次我重build库,将其复制到testingVM,然后到System32文件夹并重新启动它。 有一个更简单的方法来做到这一点?

预先感谢!

    在Winlogon和LSASS中进行调试是最耗时的调试过程。

    为了简化你的调试,你可以编写一个代理AP来输出相同的功能。 加载的时候,你的proxy_ap会

    1. 将真实AP从已知位置复制到临时位置。
    2. LoadLibrary即DLL,GetProcAddress的所有内容,并将它接收的任何调用转发给新加载的DLL。
    3. 注意从原始AP复制的目录中的更改
    4. 当发生变化(如果您的AP更改)FreeLibrary并转到第2步

    但是,您需要紧紧抓住您的开发目标上发生的情况,因为在处理来自多个线程的请求时处理dll切换可能会变成更糟的噩梦,而您正在尝试解决这个问题。

    LogonUI.exe每次启动一个新的实例,但LSASS.exe是长期居住的。

    +看看CVSNT源代码( http://cvsnt.sourcearchive.com/ )。 他们有一个相当不错的AP实现苏。 使用psexec -s (来自Microsoft / SysInternals pstools套件 )在本地系统帐户中运行示例

    也许你的问题是每个人只包括身份验证的用户? 这只是一个猜测。

    我建议您使用进程监视器来监视拒绝访问消息或路径。 调试各种权限/路径问题真是太棒了。

    如果您在“解锁工作站”或“更改密码”屏幕上遇到问题,并且不阻止您登录,则应该很容易做到 – 将其设置为正在运行,重现问题,重新登录,然后嗨!

    否则,你可能不得不采取这样的手段,例如只对某些用户帐户执行该代码路径,在第N次尝试等。