通过cmd从java解锁bitlocker驱动器
我正在尝试从Java解锁由bitlocker保护的驱动器。据我所知,没有libs可以帮助我处理这个问题,所以我通过cmd进行了尝试。代码如下:通过cmd从java解锁bitlocker驱动器,java,windows,command-line,Java,Windows,Command Line,我正在尝试从Java解锁由bitlocker保护的驱动器。据我所知,没有libs可以帮助我处理这个问题,所以我通过cmd进行了尝试。代码如下: public static boolean unlockDisk(String pwd) throws IOException { String[] script = { "manage-bde.exe", "-unlock", "D:", "-password", }; Process
public static boolean unlockDisk(String pwd) throws IOException
{
String[] script =
{
"manage-bde.exe", "-unlock", "D:", "-password",
};
Process process = new ProcessBuilder(script).start();
InputStream inputStream = process.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
final OutputStream outputStream = process.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream));
writer.write(pwd);
writer.newLine();
writer.close();
System.out.println("--------------------------------------");
System.out.println("Bitlocker log:");
String line;
while ((line = bufferedReader.readLine()) != null)
{
System.out.println(line);
}
bufferedReader.close();
BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
System.out.println("Here is the standard error of the command (if any):\n");
String tmp;
while ((tmp = stdError.readLine()) != null)
{
System.out.println(tmp);
}
System.out.println("--------------------------------------");
return true;
}
我的问题
如果我执行这个java代码,我会得到句柄无效code 0x80070006
我已经尝试过的
不同的JDK版本32和64位Java 8和Java 7(JDK 32不知何故抱怨它找不到命令manage bde
)
输出流的不同组合,带和不带换行符
processbuilder的另一个脚本命令,如“cmd.exe”、“/k”、“manage bde.exe”、“-unlock”、“D:”、“-password”、
或使用/c
代替/k
有和没有管理员权限
使用命令manage-bde.exe-unlock D:-密码
(工作正常)简单*.bat
通过java命令锁定驱动器(工作正常)
不带-password
的命令(让bitlocker声明我必须定义如何解锁驱动器)
我在谷歌上搜索了一段时间,发现其他人也有这个问题,但在其他应用程序中情况不同。因此,这似乎是一个非常常见的错误消息
我猜
我认为这与我如何将Java输出作为Bitlocker输入处理有关。也许我使用了错误的数据流进行写入
我无法在脚本变量中提供密码值,因为Bitlocker want不接受这种输入密码的方式。通常,在命令行中输入manage bde-unlock D:-password
,然后输出几行Bitlocker请求您输入密码
我尽我所能地描述了它,希望有人知道问题出在哪里
任何建议,即使只是导致更准确的错误信息,都将不胜感激。如果你有任何问题,请告诉我
提前谢谢 我最近遇到了同样的问题。我做了很多搜索。mange-bde.exe似乎不从stdin读取用户输入。有人说在Linux上运行的ssh客户端和TelentClent不会从stdin读取密码。另一个例子是Linux命令passwd。它有一个名为-stdin的标志,使shell能够从stdin读取密码。因此,我猜manage-bde.exe可能以类似的方式工作
我的解决方案是模拟键盘输入。awt包可以完成这项工作 没有设法让这个工作,所以我建立了一个变通办法