如何以编程方式与 winlogon 交互?

2024-01-10

我有一个 Windows 服务,我想使用该服务通过帐户用户名和密码以编程方式解锁工作站。

This article https://technet.microsoft.com/en-us/library/dn751047(v=ws.11).aspx https://technet.microsoft.com/en-us/library/dn751047(v=ws.11).aspx explains the logon authentication workflow on Windows in the following image: authentication workflow

如上所示,在步骤 5 中,用户将凭据输入登录 UI。我想要实现的是让 Windows 服务输入凭据并让 winlogon 执行登录。

没有 winlogon API 可以实现此目的。正如在其他问题中看到的,使用 winapiLogonUser函数成功执行身份验证并返回令牌,但它不会切换到应用程序桌面,并且登录 UI 仍保留在屏幕上。

大多数文章和 SO 答案都暗示凭据提供程序,但所有凭据提供程序示例都需要用户与 登录用户界面。

Update:我看到一些用户没有完全理解这个问题,并提出了对我的案例没有用的解决方法。我想要实现的工作流程如下:

  1. Windows 服务在 Windows 启动时启动(完成)。
  2. 相同的 Windows 服务有一个 Web 服务并通过 API 接受 HTTP 请求(完成)。
  3. 用户通过 API 从另一台设备向服务提供凭据(完成)。
  4. 提供的凭据用于登录工作站。
    4.1 提供的凭据还用于在锁定时解锁工作站(WinKey + L)。
  5. (可选)该服务通过 API 公开 Windows 帐户。
  6. (可选)用户可以向服务指定要使用哪个帐户进行登录。

现在,我有兴趣执行步骤 4 和 4.1。


就在传递时...但是,在 Microsoft 的示例中,不是有一个接受异步输入的凭据提供程序吗?我确实写过一个登录用户,无论显示什么图块,都扫描可接受的指纹。对我来说,这意味着与 LogonUI 的交互只需是隐式的,但也许我遗漏了一些东西。

但也许我不是。尽管我毫不怀疑其意图是异步输入将来自用户对硬件的操作,就像扫描手指一样,但我通常不记得这一点。如果不是,那么您可能会以编程方式选择以呈现凭据的形式,就好像它们是异步收集的一样 - 不是从明显连接到计算机的设备,而是从您的 HTTP 侧通道(谁知道是什么)收集。

那么,您能否让凭证提供者从您的服务监听 RPC,以获取您的服务通过其侧通道收集的凭证通知?或者让您的服务侦听来自凭证提供者的 RPC 以询问哪些凭证可用?如果一个方向被关闭(甚至出于安全考虑),我可能不会感到惊讶,但我认为可以使一个或另一个方向发挥作用。

无论你是否想做这些,我都不想介入。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式与 winlogon 交互? 的相关文章

随机推荐