我试图找到目标文件的最后一个集群并从中读取二进制数据。我从 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);
所以我真的不知道下一步该怎么做。如果我从中显示LARGE_INTEGER Lcn
,RETRIEVAL_POINTERS_BUFFER
我会得到一个代表当前范围的巨大数字。我也出现了一个开关错误情况,NO_ERROR
因此我假设所有集群数据都已成功读取。Lcn号怎么办才能帮我找到文件的最后一个簇?