Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过cmd从java解锁bitlocker驱动器_Java_Windows_Command Line - Fatal编程技术网

通过cmd从java解锁bitlocker驱动器

通过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

我正在尝试从Java解锁由bitlocker保护的驱动器。据我所知,没有libs可以帮助我处理这个问题,所以我通过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代码,我会得到
句柄无效
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包可以完成这项工作

    没有设法让这个工作,所以我建立了一个变通办法