gpt4 book ai didi

c# - 通过服务删除 Windows 登录屏幕

转载 作者:太空宇宙 更新时间:2023-11-03 11:54:31 25 4
gpt4 key购买 nike

我正在尝试从服务启动的可执行文件中删除 Windows 登录屏幕 (winlogon)。该服务将随 Windows 自动启动并等待来自另一台计算机的命令。当它收到命令时,它将启动一个 exe,该 exe 将以特定用户名启动 cmd.exe。

服务已经存在。我有编写这个可执行文件的工作。目前,我已经编写了可执行文件 (CmdLogin),它通过调用 LogonUserW、ImpersonateUser 和 CreateProcessWithLogonW 在不同的用户下启动 cmd.exe。我将 lpDesktop 指定为“WinSta0\Default”。唯一的问题是该服务必须在管理员帐户下运行(但这是一个不同的问题)。

当从命令提示符调用时(甚至在 Windows 7 上),这工作得很好。这在用户登录并查看他的桌面时从服务调用时也有效(就像我在同一台机器上调试时所做的那样)。但是,正如我上面所说,我真正的要求是即使在显示 Windows 登录屏幕时也能正常工作。目前,exe 给出了正确的退出代码,但窗口没有出现。但是,当用户登录时,他会在桌面上看到 cmd 窗口。

我找到的一个解决方案是对 lpDesktop 使用“WinSta0\WinLogon”而不是默认值。我还没有尝试这个。但是,这看起来会在登录屏幕的正上方显示 cmd 窗口。我真正需要的是实际模拟用户登录到 winlogon 并显示他的实际桌面(和 cmd 窗口)。

我环顾四周,找到了 GINA 和 Winlogon 通知包。他们似乎有点矫枉过正,我不确定这是否能解决这里的问题。此外,这些在 Windows Vista 中已被弃用,这让我认为有更好、更简洁的方法来解决这个问题。

关于我应该使用什么来实现这一点有什么建议吗?作为记录,可执行文件在 C# 中,使用 P/Invoke 进行 API 调用。我愿意使用也可以从此 C# 应用程序调用的 C dll。

谢谢你,
侯赛因

最佳答案

GINA 在 Vista/2008 中已被 Credential Providers 取代(在托管代码中不可用)。

我不知道如何做你需要的,但也许这是一条线索,可以让你走得更远。

郑重声明,这似乎是解决问题的错误方法。我只是不明白您如何需要在自动登录下运行命令提示符...为什么不编写一个服务来完成您的任务,并让它在一组特定于服务的凭据下运行?

我没有你的问题的背景,但这个描述让我不寒而栗。 :-)

[更新]嗯,回应你的评论。我会说为 <= Windows 2003 编写 GINA 替代品,或者为 Vista/2008+ 编写自定义凭证提供程序看起来是您的最佳选择。

您可以针对他的凭据存储提供自定义身份验证,然后根据需要允许或拒绝登录。

关于c# - 通过服务删除 Windows 登录屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1011047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com