远程login一个Windows用户知道它的名字和密码

这是我想要做的:

一个在networking上收听消息的程序,当收到该消息时,如果用户没有login(例如刚打开电脑的计算机和Windows显示经典的login屏幕),它会自动login到某个用户给消息。 用户名和密码是已知的,并在我正在讨论的程序的configuration中安全地存储在计算机内部。

我想到的是一个Windows服务,从电脑开始,也听这些消息,如果有人收到,那么它的工作

但我不知道从哪里开始

(基本上我试图login一个用户,而不必input密码,我说这是存储和知道 – 需要的东西,大多像指纹软件的Windows 7自带的,你必须安装在Vista / XP所以指纹login会起作用(指纹只是一个例子))

有两种方法可以根据您要运行的操作系统来执行。

对于Windows XP,Windows 2000和Windows server 2003,您需要创建一个GINA.DLL。 这是一个替代DLL,它必须遵循处理认证过程的特定规则。 在你的情况下,你的替换DLL将被正在监听你的启动信号的服务所知道,并且它会根据用户名和密码来调用DLL。

MSDN杂志文章定制GINA.DLL
GINA上的MSDN条目

对于Windows Vista / 7及以上版本,您需要查看Credential Provider API。

Vista中的Credential Provider API的MSDN杂志文章 。
MSDN条目在Credential Provider API上

您可以使用Windows自动登录功能来执行此操作。

创建一个等待网络套接字上所需数据的服务。 确保该服务在网络服务(Tcpip)之后启动。 修改winlogon服务属性(手动),以便它取决于您的服务。 依赖,我的意思是winlogon服务在服务之后启动。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon为1

一旦您收到您的网络套接字上的数据,请设置以下注册表项:

  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword 

一旦注册表设置到位,那么winlogon服务就可以读取这些值并继续登录过程。

有关设置注册表值的更多详细信息,请参阅: http : //support.microsoft.com/kb/315231

我想澄清一点Vikram.exe的建议。

因为AutoAdminLogon的使用似乎是本机的问题,但在HKLM\...\Winlogon\DefaultPassword中将密码保存为明文的密码并不好。 从Windows 2000开始,它支持秘密DefaultPassword的使用,它与DefaultPassword注册表值相同(请参阅保护代码示例的自动登录密码 )。

另一种强制用户登录或在登录屏幕上执行任何其他操作的方法是切换到Winlogon桌面(全名WinSta0\Winlogon )。 您可以使用SwitchDesktop和SetProcessWindowStation来执行此操作(请参阅窗口站和桌面 )。 如果服务在System帐户下运行,您将拥有完成此操作的所有权限。 根据服务的配置,还可能需要使用SetTokenInformation和TokenSessionId来更改当前的会话ID。 在WinSta0\Winlogon桌面上运行服务进程之后,可以使用FindWindow和其他GUI API等函数将任何信息放在其他进程的窗口(用户名,密码等)的控件中。 所以你可以实现更复杂的场景。

首先让我只是说我不是100%确定如何完全完成这样的应用程序,但我有一些技巧。

您将需要创建一个在预登录期间启动的Windows服务,您可以使用C#创建一个服务。创建C#服务的示例链接如下:

http://msdn.microsoft.com/en-us/library/zt39148a(VS.80).aspx

在您的应用程序中,您可以将“启动类型”属性设置为“自动”,这将在启动时自动启动服务。

你应该知道,Windows服务运行在一个安全的上下文帐户,所以你将不得不让你的服务运行privs这样做。

在你的服务属性中,你可以点击登录,你就可以

  • 要指定该服务使用本地服务帐户,请单击“此帐户”,然后键入以下NT AUTHORITY \ LocalService

  • 要指定该服务使用网络服务帐户,请单击此帐户,然后键入以下NT AUTHORITY \ NetworkService

当您试图远程执行此操作时,您将不得不查看WMI(Windows Management Instrumentation),您将能够启动/停止并向您的服务发送命令。

您的服务然后将发送一个命令到登录管理(不知道名称)。

你也可能希望检查这个WOL类,它将远程切换电脑,只要它支持局域网唤醒,如果这是为了企业环境,那么我建议你检查你的网卡,以确保它们被支持

http://www.codeproject.com/KB/IP/wolclass.aspx

我知道一些我用于名为CC4的学校的教育软件( http://www.rm.com/shops/rmshop/story.aspx?cref=PS1026195 ),我们可以在这个系统中正确地做到这一点,我不完全确定它是如何工作的,但我相信它采用上述相同的原则。