Windows上的Java无法写入到PhysicalDriveX

我在Windows上运行Java这个讨厌的问题。 (Linux上的Java没有这个问题。)

在Linux上,作为root用户,我可以使用new RandomAccessFile(new File("/dev/sdb"), "rw"); 读取和写入我的第二个驱动器的原始扇区。

在Windows上,作为pipe理员,我可以使用RandomAccessFile(new File("//./PhysicalDrive1"), "r"); 读取相同的第二个驱动器的原始扇区。 但是,如果我指定了"rw"模式,我得到一个java.io.FileNotFoundException

我可以在Windows上使用JNI + C作为解决方法,但是我想要基于Java的非基于DLL的跨平台解决scheme。

有没有人有任何提示如何解决这个问题?

编辑:

我得到的确切例外是关于一些“参数”是“不正确的”:

 Exception in thread "main" java.io.FileNotFoundException: \\.\PhysicalDrive1 (The parameter is incorrect) at java.io.RandomAccessFile.open(Native Method) at java.io.RandomAccessFile.<init>(RandomAccessFile.java:241) at java.io.RandomAccessFile.<init>(RandomAccessFile.java:122) at MyTest.main(MyTest.java:100) 

正如@ daniel-alder在这里提到的,你可以尝试运行下面的代码:

 String pathname; // Full drive: // pathname = "\\\\.\\PhysicalDrive0"; // A partition (also works if windows doesn't recognize it): pathname = "\\\\.\\GLOBALROOT\\ArcName\\multi(0)disk(0)rdisk(0)partition(5)"; Path diskRoot = ( new File( pathname ) ).toPath(); FileChannel fc = FileChannel.open( diskRoot, StandardOpenOption.READ, StandardOpenOption.WRITE ); ByteBuffer bb = ByteBuffer.allocate( 4096 ); fc.position( 4096 ); fc.read( bb ); fc.position( 4096 ); fc.write( bb ); fc.close();