7

我想在登录前屏幕(用户通常输入其用户名/密码的屏幕)上显示一个与用户交互的 UI
我读到 Winlogon 包的体系结构已经改变,在 Windows 7 中对我没有帮助。我被推荐使用 WTS 功能,但是我仍然不清楚如何使用它们或使用哪些功能。

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

4

4 回答 4

3

您要做的是使用Windows 交互式登录体系结构

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

Windows 7技术网文章

于 2012-09-19T18:08:08.817 回答
0

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

作为登录屏幕保护程序,您可以执行的操作是有限的,但它可能对您有用。

于 2012-09-22T23:57:11.133 回答
0

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

(1) 在凭证的 SetSelected 方法中编写一个自定义 CP,其中包含您的 UI 作为模态对话框:这种方法将允许您自定义任何 UI。一旦模式窗口被关闭,实际的密码 CP 就建立起来了(假设你包装了默认密码 CP)。

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

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

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

于 2012-11-26T13:52:16.320 回答
0

做这种事情很难是有原因的。程序是用户的奴才。登录前,(通常)没有用户可以成为奴才。它是一个安全的东西。

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

于 2012-09-19T16:54:16.720 回答