C# 如何以编程方式与winlogon交互?
我有一个Windows服务,我想使用该服务使用帐户用户名和密码以编程方式解锁工作站 本文在下图中解释了Windows上的登录身份验证工作流: 如上所述,在步骤5中,用户将凭证输入登录UI。我想要实现的是让Windows服务输入凭据并让winlogon执行登录 没有winlogon API来实现这一点。如其他问题所示,使用winapi的C# 如何以编程方式与winlogon交互?,c#,winapi,winlogon,credential-providers,C#,Winapi,Winlogon,Credential Providers,我有一个Windows服务,我想使用该服务使用帐户用户名和密码以编程方式解锁工作站 本文在下图中解释了Windows上的登录身份验证工作流: 如上所述,在步骤5中,用户将凭证输入登录UI。我想要实现的是让Windows服务输入凭据并让winlogon执行登录 没有winlogon API来实现这一点。如其他问题所示,使用winapi的LogonUser函数成功执行身份验证并返回令牌,但它不会切换到应用程序桌面,登录UI仍在屏幕上 大多数文章和答案都提示凭据提供程序,但所有凭据提供程序示例都要求
LogonUser
函数成功执行身份验证并返回令牌,但它不会切换到应用程序桌面,登录UI仍在屏幕上
大多数文章和答案都提示凭据提供程序,但所有凭据提供程序示例都要求用户和
登录用户界面
更新:我发现一些用户还没有完全理解这个问题,并提出了一些对我的案例没有帮助的解决办法。我尝试实现的工作流程如下:
4.1提供的凭证也用于在锁定(WinKey+L)的情况下解锁工作站李>
目前,我对第4步和第4.1步很感兴趣。从语法上讲,以用户的名义绕过/登录是网络安全方面的一个可怕问题 我不知道您想做什么,但是为什么不在机器上部署一个运行任务,使用服务帐户来完成这项工作呢
您可以将其配置为即使在用户未在指定时间/事件上登录时也运行。如果这对你不起作用,你能再描述一下你的情况吗 我不是宽恕你这么做,而是给你一个解决问题的办法。而且它不是以编程方式与WinLogon进程交互。它正在以编程方式处理它 使用Windows自动登录属性。并重新启动以更改为该用户。 注意:这确实涉及将密码以明文形式存储在注册表中 专门设置这些注册表项 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没有帮助。除非你想重新启动解锁,我怀疑
另一个听起来很有希望\值得研究的替代方案是在一个老问题上提到的我已经为此编写了一个商业解决方案,称为SasLibEx。SasLibEx是一个面向开发人员的库,在本地支持c/c++和delphi SasLibEx可以:
- 模拟Ctrl-Alt-Del(安全注意顺序)
- 取消Ctrl-Alt-Del
- 锁定工作站
- 解锁工作站(无凭据)
- 禁用Ctrl-Alt-Del
- 再次启用Ctrl-Alt-Del
- 取消挂起的UAC请求
- 桌面被锁定了吗
路过时请看。。。但是,在微软的示例中,不是有一个接受异步输入的凭证提供者吗?我当然写过一篇文章,它记录了一个用户,他扫描一个可接受的指纹,不管显示的是什么磁贴。对我来说,这意味着与LogonUI的交互只需要隐含,但也许我遗漏了一些东西 但也许我不是。虽然我不怀疑异步输入的意图是来自于用户在硬件上的操作,就像扫描手指一样,但我不记得这是一个规则。如果不是,那么您可能会有一个编程选项,以异步方式呈现凭据—不是从明显连接到计算机的设备,而是从您的HTTP侧通道(谁知道是什么)获取凭据 那么,您是否可以让凭证提供者从您的服务侦听RPC,以获取您的服务已通过其侧通道收集的凭证通知?或者让您的服务侦听来自凭据提供商的RPC,以询问哪些凭据可用?如果一个方向被关闭,我可能不会感到惊讶——甚至是出于安全考虑——但我认为其中一个方向可以正常工作
不管你是否想做这些,我不想插手 我对基于硒的框架的要求与我正在构建的框架几乎相同。长话短说,我需要在用户的windows工作站(WinSTA0)中运行应用程序,这意味着用户必须登录到VM 我已经创建了一个具有凭据管理器的项目,并使用它实现了以下工作流:
- 启动VM,使用Powershell复制组件
- 安装CredManager,重新启动虚拟机
- Cred manager创建一个随机用户,并将其保存在数据库中
- 与该用户一起登录
- 用户在应用程序的注册表中有autostart,应用程序启动一个Web服务器,可以联系该服务器来旋转selenium会话
ITestWindowsCredentialProvider
实现下的Advice
方法启动服务器,使用UnAdvice
停止服务器
我建议以下几点来帮助你获得t