如何在Windows 7中的登录屏幕上显示UI

我想在预登录屏幕(用户通常输入用户名/密码的屏幕)上显示与用户交互的UI
我读到Winlogon软件包的体系结构已经改变,并且在Windows 7中无法帮助我。我被称为使用WTS函数,但是我仍然不清楚如何使用它们或哪些。

我已经创建了一个带有notepad.exe的服务(现在),但是当用户处于登录前屏幕时我需要触发此服务。 我不确定是什么或如何实现它。

您要做的是使用Windows Interactive Logon Architecture

此处的 Windows Vista示例(凭据提供程序)

Windows 7 technet文章

有一个原因是做这种事情很难。 程序是用户的爪牙。 登录前,(通常)没有用户成为其中的仆从。 这是一件安全的事情。

只需在用户登录时关闭您的服务即可。

在没有任何人登录的情况下让UI显示的一种方法是使用登录屏幕保护程序。 您的代码(可能是.NET)将在超时之后运行,直到您退出或某人按下Ctrl-Alt-Del。

作为登录屏幕保护程序,您可以做什么限制,但它可能适合您。

根据我对您的要求的理解,您希望在凭据提供程序级别显示自定义用户界面。 您可以通过以下方法之一来实现此目的:

(1)在凭证的SetSelected方法中编写包含UI作为模式对话框的自定义CP:此方法允许您自定义任何UI。 一旦模态窗口被解除,实际的密码CP就会被构建(假设你包装了默认密码CP)。

(2)从Windows服务启动应用程序:此方法不会阻止提供程序进行初始化。 基本上,Windows服务用于在Winsta0 \ Winlogon桌面中启动进程。 您可以使用Alt + TAB访问启动的进程。 以下是您需要使用的基本步骤:

  1. WTSGetActiveConsoleSessionId获取活动会话ID
  2. WTSQueryUserToken()获取winlogon pid
  3. DuplicateTokenEx复制令牌
  4. 通过调用AdjustTokenPrivileges调整令牌权限
  5. 使用lpDesktop作为Winsta0 \ Winlogon的CreateProcessAsUser

我用过这两种方法。 第一个用于引入更安全的登录。 第二个用于启动远程访问工具,cmd提示等。