【发布时间】:2014-06-04 18:38:38
【问题描述】:
我正在尝试查找目标文件的最后一个簇并从中读取二进制数据。我从 CreateFile() 开始,并在 DeviceIoControl() 中使用了控制代码 FSCTL_GET_RETRIEVAL_POINTERS 的结果。
hfile = CreateFile(result,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
RETRIEVAL_POINTERS_BUFFER retrievalBuffer;
const DWORD Clusters = 1000;
const DWORD rpBufferSize = sizeof(RETRIEVAL_POINTERS_BUFFER) + (2 * (Clusters - 1) *sizeof(LARGE_INTEGER));
BYTE output[rpBufferSize];
STARTING_VCN_INPUT_BUFFER startVcn;
startVcn.StartingVcn.QuadPart = 0;
returns = DeviceIoControl(hfile,
FSCTL_GET_RETRIEVAL_POINTERS,
&startVcn,
sizeof(startVcn),
&output,
sizeof(output),
&bytesReturned,
NULL);
所以我真的不知道下一步该做什么。如果我从RETRIEVAL_POINTERS_BUFFER 显示LARGE_INTEGER Lcn,我会得到一个代表当前范围的巨大数字。我也有一个开关错误情况,它显示为NO_ERROR,所以我假设所有集群数据都已成功读取。 Lcn号怎么办才能帮我找到文件的最后一个簇?
【问题讨论】:
标签: c++ winapi deviceiocontrol