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

如上所述,在步骤5中,用户将凭证输入到登录UI中。我想要实现的是让Windows输入凭据并让winlogon执行登录。
没有实现这一目标的winlogon API。正如在其他问题中所看到的,使用winapi的LogonUser函数成功地执行身份验证并返回一个令牌,但它不会切换到应用程序桌面,登录UI保持在屏幕上。
大多数文章和答案都暗示了凭据提供程序,但所有凭据提供程序示例都需要用户与登录UI进行交互。
更新:我看到一些用户还没有完全理解这个问题,并提出了一些对我的情况没有用的解决方案。我想要实现的工作流程如下:
现在,我对第4步和第4.1步感兴趣。
发布于 2018-01-16 22:07:02
路过的时候..。但是,在微软的示例中,难道没有接受异步输入的凭据提供商吗?我当然写了一个登录用户,谁扫描一个可接受的指纹,无论什么瓷砖显示。对我来说,这意味着与LogonUI的交互仅仅是隐式的,但也许我遗漏了一些东西。
但也许我不是。虽然我并不怀疑异步输入将来自于对硬件进行操作的用户,就像扫描手指一样,但我不记得这是一条规则。如果不是,那么您可以使用编程选项,将凭据呈现为异步收集--不是从明显连接到计算机的设备,而是从HTTP的侧通道,谁知道是什么。
因此,您是否可以让凭据提供者从您的服务中侦听RPC,以通知您的服务通过其侧通道收集的凭据?或者让您的服务从您的凭据提供程序中侦听RPC以询问哪些凭据可用?如果一个方向被关闭--甚至是为了安全--我可能不会感到惊讶--但我认为可以让一个或另一个方向发挥作用。
不管你是否想做这件事,我不想进入。
发布于 2018-01-15 11:46:21
不是我宽恕你,而是给你一个解决问题的办法。而且它不是以编程方式与WinLogon进程交互的。它是以编程方式围绕它工作的。
使用Windows自动登录属性。并重新启动以更改为该用户。注意,这涉及到将密码以明文形式存储在注册表中。
特别设置这些regkey
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogin HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword
*编辑*
4.对4.1没有帮助。除非你想重新启动来解锁,我怀疑。
另一种听起来很有前途的选择\值得研究的是关于一个老问题https://stackoverflow.com/a/35173886/4640588
发布于 2018-01-16 09:30:50
为此,我编写了一个商业解决方案,名为SasLibEx。SasLibEx是一个面向开发人员的库,它支持c/c++和delphi。
SasLibEx可以:
https://stackoverflow.com/questions/48038678
复制相似问题