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

Dog*_*Dog 28 c# winapi winlogon credential-providers

我有一个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进行交互.

更新:我看到一些用户还没有完全理解这个问题,并提出了对我的案例无用的解决方法.我正在尝试实现的工作流程如下:

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

目前,我有兴趣制定第4步和第4.1步.

Emm*_*ran -7

在网络安全方面,以编程方式绕过/代表用户登录是可怕的。

我不确定您要做什么,但为什么不部署一个运行任务来使用计算机上的服务帐户来完成工作呢?

您可以将其配置为即使用户未在指定时间/事件登录时也运行。如果这对您不起作用,您能再描述一下您的情况吗?