我正在尝试从Java中解锁由bitlocker保护的驱动器。据我所知,没有可以帮助我处理它的库,所以我通过cmd尝试它。这是代码:
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代码,我会The handle is invalid
获得Code 0x80070006
。
我已尝试过的内容
manage-bde
)"cmd.exe", "/k", "manage-bde.exe", "-unlock", "D:", "-password",
或/c
而不是/k
manage-bde.exe -unlock D: -password
(效果很好)-password
的命令(让“bitlocker声称我必须定义如何解锁驱动器”)我google了一段时间,发现其他人遇到了这些问题,但与其他应用程序的方式不同。所以这似乎是一个非常常见的错误信息。
我的猜测
我认为这与我如何将Java输出作为Bitlocker输入处理有关。也许我正在使用错误的流写入。
我无法在脚本变量中提供密码的值,因为Bitlocker不希望接受这种输入密码的方式。通常在命令行中输入manage-bde -unlock D: -password
,在几行输出后Bitlocker会要求您输入密码。
我把它描述得尽可能好,希望有人知道问题是什么。
任何建议,即使它只是导致更准确的错误信息,我们将不胜感激。如果您有任何疑问,请告诉我们!
提前致谢!
答案 0 :(得分:1)
我最近遇到了同样的问题。我做了很多搜索。似乎mange-bde.exe没有从stdin读取用户输入。有人说在Linux上运行ssh client和telent clent并没有从stdin读取密码。另一个例子是Linux命令passwd。它有一个名为-stdin的标志,它使shell能够从stdin读取密码。因此,我猜想manage-bde.exe可能会以类似的方式工作。
我的解决方案是模拟键盘输入。 awt包可以完成这项工作。