我有一个Windows服务,我想使用帐户用户名和密码以编程方式解锁工作站.
本文https://technet.microsoft.com/en-us/library/dn751047(v=ws.11).aspx解释了Windows上的登录验证工作流程,如下图所示:

如上所述,在步骤5,用户将凭证输入到登录UI中.我想要实现的是让Windows服务输入凭据并让winlogon执行登录.
没有winlogon API来实现这一目标.如在其他问题中所见,使用winapi LogonUser函数成功执行身份验证并返回令牌,但它不会切换到应用程序桌面,并且Logon UI仍保留在屏幕上.
大多数文章和SO答案暗示了凭证提供者,但所有凭据提供者样本都需要用户与Logon UI进行交互.
更新:我看到一些用户还没有完全理解这个问题,并提出了对我的案例无用的解决方法.我正在尝试实现的工作流程如下:
目前,我有兴趣制定第4步和第4.1步.
所以,这是场景.我正在Windows 7中开发一个登录系统.我创建了一个Credential Provider,其中包含一个Credential.凭证有三个输入字段,用户名,密码和PIN.
据我所知,文档(CMIIW)是当我们填写字段并单击登录时,WINLOGON将检索用户名和密码,并通过调用LSALogonUser()进行身份验证将其发送到LSA.然后LSA将尝试与Authentication Package KERBEROS(用于远程登录)或MSV1_0(用于本地登录)进行协商.
仅假设现在的本地方案,用户名和密码将传递给MSV1_0,并与SAM数据库中的用户和密码一起检查.现在的问题是,我不希望用SAM数据库检查它.假设我有一个文件C:\ users.txt,其中包含三元组:{username; 密码; 销}.这里的所有用户名都是Windows中的现有用户.如何使身份验证遵循我的方式(检查文件C:\ users.txt.
如果我没弄错的话,我们可以创建自己的身份验证包来"包装"MSV1_0.你们有一个示例代码吗?还是有另一种更合适的方式吗?
谢谢,非常感谢你的帮助.
c++ winlogon windows-authentication lsa credential-providers
我正在Windows 7(x64)和Windows 8(x64)上用C++ 编写远程桌面应用程序,如TeamViewer.
是什么让我陷入困境
我已经使用SendInput()实现了鼠标输入和键盘输入.我发现当进程运行时SendInput()工作正常winsta0\desktop.但是在用户锁定计算机或启动屏幕保护程序后,它无法正常工作.
如果我在下面运行该过程winsta0\winlogon,SendInput()则无法正常工作winsta0\default.
2.我尝试过的
我已经尝试使用SetThreadDesktop()将进程从切换winsta0\desktop到winsta0\winlogon,但我收到错误170:"请求的资源正在使用中",我坚持了下来.
3.我想知道什么
我注意到TeamViewer有一个名为的进程TeamViewer_Desktop.exe,可以在Winlogon,Default和Screensaver下控制鼠标和键盘.它是如何做到的?
你能提供代码来帮助我理解如何解决我的问题吗?
我想知道**如何在默认桌面和Winlogon桌面之间切换应用程序.因此,我可以在安全的桌面上控制鼠标和键盘,而无需在其下创建另一个进程winlogon.exe.
我想在预登录屏幕(用户通常输入用户名/密码的屏幕)上显示一个与用户交互的UI.
我读到Winlogon软件包的体系结构已经改变,在Windows 7中对我没用.我被推荐了使用WTS功能,但我仍然不清楚如何使用它们或哪些.
我已经创建了一个提供notepad.exe的服务(现在),但是当用户处于登录前屏幕时我需要触发此服务.我不确定是什么或如何实现它.
我正在编写一个服务/用户模式应用程序,可能会在一段可定制的不活动时间后将系统置于睡眠状态.用户模式过程可能需要在执行电源操作之前显示用户消息/警告.如果用户已登录,则此方法很有用,但如果工作站已锁定,则用户会看到如下显示:

所以我很好奇是否可以在这样的登录屏幕上方显示我自己的窗口(叠加)?
我想在相对较新的 Windows 计算机(7、8 或 10)上实现自定义登录屏幕(使用自定义登录方法,例如指纹或其他方法)。
不知何故,我找不到这个主题的真实描述,我要么在 GINA (现在似乎已弃用),要么在这个(据说非常有用)链接:http ://msdn.microsoft.com/ en-us/magazine/cc163489.aspx只会引导我找到所有 MSDN 杂志的存档...
所有这些看起来都有点旧了,是不是有一些更新的东西?
更新:我查阅了 pGina,因为它在一个被标记为重复的问题中被建议。然而,在我看来,pGina 不支持将自定义 UI 添加到登录屏幕,这对我来说至关重要。另外,虽然我发现提到能够使用辅助信用提供商(https://github.com/pgina/pgina/issues/105),但我找不到关于如何实现的描述。
所以请证明我错了,或者只是给我指出一些其他资源!
提前致谢!
我一直致力于为 Windows 10 实现自定义身份验证包。阅读以下 Windows 文档https://msdn.microsoft.com/en-us/library/windows/desktop/aa374731(v=vs.85).aspx #functions_implemented_by_authentication_packages 我实现了 auth 包所需的方法。我为 auth 包实现编写的代码:
LSA_DISPATCH_TABLE DispatchTable;
NTSTATUS NTAPI
LsaApCallPackagePassthrough(IN PLSA_CLIENT_REQUEST ClientRequest,
IN PVOID ProtocolSubmitBuffer,
IN PVOID ClientBufferBase,
IN ULONG SubmitBufferLength,
OUT PVOID *ProtocolReturnBuffer,
OUT PULONG ReturnBufferLength,
OUT PNTSTATUS ProtocolStatus);
NTSTATUS NTAPI
LsaApCallPackage(
IN PLSA_CLIENT_REQUEST ClientRequest,
IN PVOID ProtocolSubmitBuffer,
IN PVOID ClientBufferBase,
IN ULONG SubmitBufferLength,
OUT PVOID *ProtocolReturnBuffer,
OUT PULONG ReturnBufferLength,
OUT PNTSTATUS ProtocolStatus
);
NTSTATUS
NTAPI
LsaApCallPackageUntrusted(IN PLSA_CLIENT_REQUEST ClientRequest,
IN PVOID ProtocolSubmitBuffer,
IN PVOID ClientBufferBase,
IN ULONG SubmitBufferLength,
OUT PVOID *ProtocolReturnBuffer, …Run Code Online (Sandbox Code Playgroud) c winapi winlogon windows-authentication local-security-authority