2

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

我已经研究了一些实用程序Logon.exe

上述实用程序在我的电脑中不起作用显示一些错误,例如

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

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

在某处它告诉该文件应该以管理员身份运行。

这是我的代码:

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);
}

而且我还尝试使用 LogonExpert 使用 AutoLogon

上述工具运行良好。但我的需要是仅在需要时使用 java 登录。

请大家帮帮我...

4

3 回答 3

5

你想做的事情是可行的,但你必须遵守规则,其中不包括Java。这里有一点历史,为什么您当前的尝试不起作用,以及如何解决它。

这并不容易。

一点历史

首先,从 Windows Vista 开始,Windows 获取凭据的方式发生了根本性的变化。您提到的那个 logon.exe 实用程序使用旧架构。那时,您几乎可以做任何您想做的事情,因为任何与登录体系结构有关的东西都在 Winlogon 的进程中作为 DLL 运行。你可能已经找到了一些自定义的 GINA,比如我写的这个。它们在最新版本的 Windows 中被忽略。

如今,Winlogon 要求 LogonUI 获取凭据。LogonUI 是一个将托管Credential Providers的进程。凭据提供程序由登录屏幕上的“磁贴”表示。有几个 COM 接口要实现,以便 LogonUI 要求您提供凭据。

要记住的重要事项是:

  1. 您必须实现一个 COM 接口才能与登录过程进行交互
  2. 您可以决定呈现什么 UI,或者根本不呈现 UI

实现 COM 接口几乎不包括 Java。

你现在面临的问题

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

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

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

你怎么能解决它

您必须编写凭据提供程序。我从来没有听说过用 Java 做的方法,这太特定于平台且不可移植。如果是 C++ 的所有文档,但我听说可以在 .Net 中完成。一个很好的起点是 Platform SDK 中的凭据提供程序示例。

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

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

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

呸!而且我们还没有登录!

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

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

这个 SO 答案说的是同样的事情,但它有点简洁。这篇MSDM 文章比我的回答更完整。


+加密和管理用户密码留作练习 ;) 但您可能想看看数据保护 API

于 2015-03-11T19:13:15.147 回答
1

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

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

控制用户密码2

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

您的 PC 仍可免受远程访问。

于 2015-03-11T12:05:28.173 回答
1

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

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

尽管我的回答没有添加有价值的技术亮点,但我认为您可能会错过 cmd 工具选项。

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

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

于 2015-03-11T19:57:33.200 回答