使用DeviceIoControl时出现错误87(FSCTL_GET_RETRIEVAL_POINTERS)

时间:2017-03-22 13:00:25

标签: python winapi handle createfile deviceiocontrol

我试图获取磁盘上文件的物理位置。 这是当前的代码:

import win32file
import winioctlcon

handle = win32file.CreateFile(raw_input("File: "), win32file.GENERIC_READ, win32file.FILE_SHARE_READ | win32file.FILE_SHARE_WRITE, None, win32file.OPEN_EXISTING, win32file.FILE_ATTRIBUTE_NORMAL | win32file.FILE_FLAG_OVERLAPPED,None)
loc = win32file.DeviceIoControl(handle, winioctlcon.FSCTL_GET_RETRIEVAL_POINTERS,"",8192,None)

当我尝试运行代码时,出现此错误:

pywintypes.error: (87, 'DeviceIoControl', '\xfe\xfe\xe4\xf4\xf8\xee\xe8\xf8 \xf9
\xe2\xe5\xe9.')

此错误是"参数无效"。我使用了哪些参数错误?

1 个答案:

答案 0 :(得分:0)

请查看this MSDN网站。

您的参数计数不正确。您需要一个输入缓冲区和一个输出缓冲区。输入是启动VCN(> = 0),句柄需要是备用流,文件,卷或目录句柄。输入缓冲区的类型为

typedef struct {
  LARGE_INTEGER StartingVcn;
} STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER;
相关问题