使用密码的Windows 7登录脚本

Vig*_*ala 2 java windows startupscript windows-7 autologin

我一直在尝试编写脚本批处理文件或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.
Run Code Online (Sandbox Code Playgroud)

它告诉该文件应该以管理员身份运行.

这是我的代码:

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);
}
Run Code Online (Sandbox Code Playgroud)

我还尝试使用LogonExpert使用AutoLogon

上面的工具工作得很好.但我需要的是只在需要时使用java登录.

请帮帮我们......

ixe*_*013 5

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

这并不容易.

有点历史

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

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

要记住的重要事项是:

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

实现COM接口几乎排除了Java.

你现在面临的问题

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

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

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

你如何解决它

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

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

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

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

唷!我们还没有登录!

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

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

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


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