使用密码的Windows 7登录脚本

时间:2014-12-29 10:34:17

标签: java windows windows-7 autologin startupscript

我一直在尝试编写脚本批处理文件或exe来执行登录。它应该执行基本操作 - 只需登录我不在网络中的Windows 7 pc。我有一个在后台运行的jar文件。我想写一个带密码的脚本来登录我自己的Windows 7 pc。

我已经查看了一些实用程序Logon.exe

以上实用程序无法在我的电脑上显示一些错误,如

Windows Logon version 1.04
Copyright (c) 2003-2010 SoftTree Technologies, Inc.

Unable to install logon service (OpenSCManager failed).
Logon failed.

某处告诉该文件应该以admin身份运行。

这是我的代码:

Process process = new ProcessBuilder("C:\\Logon.exe","-p","welcome").start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
  System.out.println(line);
}

我也尝试过使用AutoLogon using LogonExpert

上述工具运行正常。但我需要的是只在需要时使用java登录。

请帮帮我们......

3 个答案:

答案 0 :(得分:5)

您想要做的是可行的,但您必须遵守不包含Java的规则。这是一个小历史,为什么你当前的尝试不起作用,以及如何解决它。

这不容易。

一点历史

首先,Windows从Windows Vista获取凭据的方式发生了根本性的变化。您提到的logon.exe实用程序使用旧的体系结构。那时,你可以做任何你想做的事情,因为任何摆弄登录架构的东西在Winlogon的进程中都是一个DLL。您可能已经找到了一些自定义GINA,例如this one I wrote。它们在最新版本的Windows中被忽略。

如今,Winlogon要求LogonUI获取凭据。 LogonUI是一个托管凭据提供程序的过程。凭证提供者由" tile"表示。在登录屏幕上。有一些COM接口要实现,以便LogonUI要求您提供凭据。

要记住的重要事项是:

  1. 您必须实现COM接口才能与登录过程进行交互
  2. 您可以决定您提供的UI,或者根本没有UI
  3. 实现COM接口几乎不包括Java。

    您现在面临的问题

    记录用户意味着为他获取安全令牌。但是以交互方式记录用户意味着您必须告诉Winlogon打开门。 Winlogon将为此监听的唯一过程是LogonUI。

    换句话说,即使您拥有可以创建安全令牌的代码,您也无法使用它来解锁桌面。

    顺便说一句,用于创建安全令牌的Windows API为LogonUser

    如何解决问题

    您必须编写凭证提供程序。我从来没有听说过在Java中这样做,这是太平台特定和不可移植的。所有文档是否适用于C ++,但我听说它可以在.Net中完成。一个很好的起点是Platform SDK中的Credential Providers样本。

    当您的凭据提供程序初始化时,您将生成一个等待某个事件的线程,例如显示的蓝牙设备。只要您可以与CP通信,就可以运行服务。

    您还需要在ICredentialProvider::Advise的实现中保存指向LogonUI事件机制的指针。

    当您的硬件检测线程检测到您的蓝牙设备时,请让它呼叫ICredentialProviderEvents::CredentialsChanged。它将告诉LogonUI再次通过所有凭据提供程序。调用时,您必须回答您是默认的自动登录提供程序。

    唷!我们还没有登录!

    最后一步是检索为该用户保存的密码,并在调用ICredentialProviderCredential::GetSerialization时将其发送到LogonUI。

    LogonUI将从那里获取它。它将指示Winlogon为您调用身份验证包并将用户登录。

    This SO answer说同样的话,但它有点简洁。这个MSDM article比我的回答更完整。


    +加密和管理用户的密码留作练习;)但您可能需要查看Data Protection API

答案 1 :(得分:1)

正如ixe013回答解释了完成交互式登录的本地方式(也检查了这个SO Q&A),我花了一些时间研究logonExpert工具,该工具已经根据您的反馈成功完成了工作,该工具是用Borland Delphi编写的(与PEiD核实。

我不确定您是否注意到le.exe cmd工具,它使您能够以与logon.exe类似的方式按需调用它。 (通过阅读帮助chm文件找到)。

虽然我的回答没有添加有价值的技术亮点,但我认为你可能错过了cmd工具选项。

免责声明:我与logonexpert完全没有任何关系。

编辑:我刚刚发现MS SysinternalsSuite包含autologon工具,可以从cmd(自动登录用户域密码)调用。

答案 2 :(得分:0)

您还可以使用已存在的自动登录功能。

以管理员身份登录并执行(WIN-R):

  

控制userpasswords2

取消选中用户必须输入用户名和密码才能使用此计算机

您的电脑仍可安全远程访问。