我一直在尝试编写脚本批处理文件或 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.
在某个地方,它告诉文件应该以管理员身份运行。
这是我的代码:
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 是一个将托管凭据提供程序的进程。凭据提供程序在登录屏幕上由“磁贴”表示。有几个 COM 接口要实现,以便 LogonUI 向您询问凭据。
要记住的重要事情是:
必须实现 COM 接口才能与登录进程交互
您可以决定呈现什么 UI,或者根本没有 UI
实现 COM 接口几乎不包括 Java。
你现在面临的问题
登录用户意味着为他获取安全令牌。但是以交互方式登录用户意味着您必须告诉 Winlogon 打开门。Winlogon 将的唯一进程是 LogonUI。
换句话说,即使您有可以创建安全令牌的代码,您也无法使用它来解锁桌面。
顺便说一下,创建安全令牌的 Windows API 是LogonUser
。
你怎么能解决它
您必须编写一个 Credential Provider。我从未听说过在 Java 中执行此操作的方法,这过于平台特定且不可移植。所有的文档如果为 C++,但我听说它可以在.Net 中完成。一个很好的起点是平台 SDK 中的 Credential Providers 示例。
当您的 Credential Provider 初始化时,您将生成一个等待某些事件的线程,例如蓝牙设备出现。只要您可以与 CP 通信,运行服务就可以工作。
您还需要在ICredentialProvider::Advise
的实现中保存指向 LogonUI 的事件机制的指针。
当您的硬件检测线程检测到您的蓝牙设备时,让它调用ICredentialProviderEvents::CredentialsChanged
。它会告诉 LogonUI 再次检查所有凭据提供程序。当被调用时,您必须回答您是默认的自动登录提供程序。
呼!我们还没有登录呢!
最后一步是检索您为该用户保存的密码,并在调用ICredentialProviderCredential::GetSerialization
时将其发送到 LogonUI。
LogonUI 将从那里获取它。它将指示 Winlogon 为您调用身份验证包并登录用户。
This SO answer说同样的事情,但它有点简洁。这个MSDM article比我的答案更完整。
+ 加密和管理用户的密码是作为一个 exercice;),但你可能想看看Data Protection API。
您还可以使用已经存在的自动登录功能。
以 admin 身份登录并执行 (WIN-R):
控制用户密码2
取消选中用户必须输入用户名和密码才能使用此计算机。
您的 PC 仍然可以安全地进行远程访问。
由于 ixe013 答案解释了完成交互式登录的本机方式(也检查此SO Q&A),我花了一些时间来研究 logonExpert 工具,该工具已经根据您的反馈成功完成了工作,该工具是用 Borland Delphi 编写的(使用 PEiD 检查)。
我不知道你是否注意到 le.exe cmd 工具,它使您能够以类似于 logon.exe 的方式按需调用它。(通过阅读帮助 chm 文件找到)。
虽然我的回答没有添加有价值的技术亮点,但我认为你可能会错过 cmd 工具选项。
免责声明:我与 logonexpert 没有任何关系。
编辑:我刚刚发现 MS SysinternalsSuite 包括autologon工具,可以从 cmd(自动登录用户域密码)调用。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(75条)