gpt4 book ai didi

java - 使用密码的 Windows 7 登录脚本

转载 作者:可可西里 更新时间:2023-11-01 09:47:40 25 4
gpt4 key购买 nike

我一直在尝试编写脚本批处理文件或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);
}

我也尝试过使用 AutoLogon using LogonExpert

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

请帮帮我...

最佳答案

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

这并不容易。

一点历史

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

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

要记住的重要事项是:

  1. 您必须实现 COM 接口(interface)才能与登录过程交互
  2. 您可以决定显示什么 UI,或者根本不显示 UI

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

您现在面临的问题

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

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

创建安全 token 的 Windows API 是 LogonUser , 顺便说一下。

如何修复它

您必须编写一个 Credential Provider。我从没听说过用 Java 做这件事的方法,这太过平台特定且不可移植。所有的文档都是针对 C++ 的,但我听说它可以在 .Net 中完成。 Platform SDK 中的 Credential Providers 示例是一个很好的起点。

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

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

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

呸!我们还没有登录!

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

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

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


+加密和管理用户密码留作练习 ;) 但您可能想看看 Data Protection API .

关于java - 使用密码的 Windows 7 登录脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27687201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com