Последний кластер в системе NTFS

Мне нужно уточнить, как найти последний кластер файла. Вот некоторые фрагменты кода о том, как я получил информацию о кластере.

hFile = CreateFile(result,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

while (error == ERROR_MORE_DATA){

DWORD bytesReturned;

returns = DeviceIoControl(hfile.hanFile,
FSCTL_GET_RETRIEVAL_POINTERS,
&startVcn,
sizeof(startVcn),
&output,
sizeof(output),
&bytesReturned,
NULL);
error = GetLastError();
DWORD lastExtentN = retrievalBuffer->ExtentCount - 1;
LONGLONG lastExtent = retrievalBuffer->Extents[lastExtentN].Lcn.QuadPart;
LONGLONG lengthOfCluster = retrievalBuffer->Extents[lastExtentN].NextVcn.QuadPart - retrievalBuffer->Extents[lastExtentN - 1].NextVcn.QuadPart;

switch (error){

case ERROR_HANDLE_EOF:
//file sizes 0-1kb will return EOF error
cout << "ERROR_HANDLE_EOF" << endl;
returns = true;
break;

case ERROR_MORE_DATA:
cout << "ERROR_MORE_DATA" << endl;
startVcn.StartingVcn = retrievalBuffer->Extents[0].NextVcn;

case NO_ERROR:

cout << "NO_ERROR, here is some info: " << endl
cout << "This is the lcnextent : "<<retrievalBuffer->Extents[lastExtentN].Lcn.QuadPart << endl;
cout << "This is the nextvnc: " << retrievalBuffer->Extents[lastExtentN].NextVcn.QuadPart << endl;
cout << "This is the Extent count: " << retrievalBuffer->ExtentCount << endl;
cout << "This is the Starting Vnc" << retrievalBuffer->StartingVcn.QuadPart << endl;
cout << " The length of the cluster is: " << lengthOfCluster << endl;
cout << " The last cluster is: " << lastExtent + lengthOfCluster - 1 << endl << endl << endl;
break;

default:
cout << "Error in the code or input error" << endl;
break;
}
}

Я не уверен, что нашел правильный кластер. Чтобы найти последний кластер, я сначала нашел размер последнего кластера Extents[lastExtentN].NextVcn.QuadPartExtents[lastExtentN - 1].NextVcn.QuadPart Затем я нашел место с Extents[lastExtentN].Lcn.QuadPart + lengthOfCluster — 1 Например, в моем выводе я получаю:

This is the lcnextent : 76638
This is the nextvnc: 285
This is the Extent count: 3
This is the Starting Vnc 0
The length of the cluster is: 1
The last cluster is: 76638

Имеет ли смысл мой код и вывод? Вычислены ли числа в байтах?

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector