以下是Java代码。
HANDLE h = kernel32.CreateFile("\\\\.\\d:",
kernel32.GENERIC_READ
| kernel32.GENERIC_WRITE,
0, null, kernel32.OPEN_EXISTING,
0, null);
IntByReference nbread = new IntByReference();
ByteBuffer b = ByteBuffer.allocate(48);
boolean result = kernel32.ReadFile(h, b, b.capacity(), nbread, null);
System.out.println(kernel32.GetLastError());
它会出现错误87 (Invalid parameter)
可能是什么问题?
答案 0 :(得分:0)
您没有检查错误。你必须把它做对。文档解释了如何。阅读文档是无可替代的。
检查返回值。将h
与INVALID_HANDLE_VALUE
进行比较。该值表示失败,如果是,只有这样,请致电GetLastError
。
文档说明了如何打开直接访问卷:
要成功调用,必须满足以下要求:
- 来电者必须具有管理权限。有关更多信息,请参阅使用特殊权限运行。
- dwCreationDisposition参数必须具有OPEN_EXISTING标志。
- 打开卷或软盘时,dwShareMode参数必须具有FILE_SHARE_WRITE标志。
您未达到最终要求。可能不是第一个。
对于ReadFile
的调用,您没有检查返回值。文档说:
返回值
如果函数成功,则返回值为非零(TRUE)。
如果函数失败或异步完成,则返回值为零(FALSE)。要获取扩展错误信息,请调用GetLastError函数。
您还需要确保执行扇区对齐读取。你没有这样做。
您对GetLastError
的来电也是错误的。他们需要修复。请参阅此问题:How to make GetLastError reliably work with JNA?