【发布时间】:2011-04-23 12:34:10
【问题描述】:
有什么方法可以在不使用 DLL 注入、服务等的情况下使用 .net 解锁本地计算机?我的程序可以使用 windows 用户名和密码。
【问题讨论】:
-
由于 VNC 可以做到,我希望在查看 VNC 源之后,您将能够通过一些 pinvoke 调用来模仿它的行为。
有什么方法可以在不使用 DLL 注入、服务等的情况下使用 .net 解锁本地计算机?我的程序可以使用 windows 用户名和密码。
【问题讨论】:
我认为没有可用于解锁计算机的 .NET 功能,也没有捷径可以实现。但是有办法。
您需要实现您的自定义 ICredentialProvider 组件,将其挂接到 Windows 身份验证机制中,并实现它与您的应用程序之间的通信。
Windows 7 身份验证机制由两部分组成。它们是 WinLogon 和 LogonUI。 LogonUI 负责显示登录窗口并通知 WinLogon 用户的操作。 Winlogon 对来自 LogonUI 的事件做出反应,并对登录用户、注销用户、锁定会话和解锁会话执行所需的操作。
Microsoft 提供了一种将自定义行为挂钩到 LogonUI 的机制。为此,您需要创建一个实现 ICredentialProvider 的 COM 对象并将其注册到系统中。您的组件可以告诉 LogonUI 告诉 WinLogon 解锁会话。
以下是一些关于如何构建自定义凭据提供程序的示例: How to Build Custom Logon UI’s in Windows Vista, Create Custom Login Experiences With Credential Providers For Windows Vista
此机制适用于 Windows Vista 和 Windows 7。如果您想在 Windows XP 上获得相同的结果,则需要使用称为 GINA 的类似机制。 在这里您可以阅读更多关于 GINA 的信息:Winlogon and GINA
有一个技巧可以让您在 Windows XP 中“解锁”会话。
Windows XP 中的 WinLogon 创建了一个额外的桌面,并在用户选择锁定会话时切换到该桌面。可以使用 Windows API 切换回“普通”桌面。一切正常,除了 WinLogon 仍然虽然该系统被锁定并且没有对 Ctrl-Alt-Del 做出反应。 我相信它不适用于 Windows Vista 和 7。但你可以试试。这比实现自定义凭据提供程序要简单。
这是一个如何做到这一点的示例:Remotely Unlock a Windows Workstation
我希望这回答了你的问题。
【讨论】:
不,至少不在您问题中指定的上下文中。但我不得不问 - 你为什么要解锁它?如果您需要运行应用程序,则无需解锁机器即可。
【讨论】: