вопрос по NTFS MFT парсингу
От: x76adf1  
Дата: 01.06.09 01:18
Оценка:
здрасте, господа.

делаю следующее:
bResult = DeviceIoControl(hVol,
FSCTL_GET_NTFS_VOLUME_DATA,
NULL, 0,
ntfs_vdb, sizeof(*ntfs_vdb),
&junk, (LPOVERLAPPED) NULL);
if (!bResult) return bResult;

size_t mftRecordSize = ntfs_vdb->BytesPerCluster / 4;
LONGLONG total_file_count = ntfs_vdb->MftValidDataLength.QuadPart/mftRecordSize;

затем для каждого из total_file_count читаю PNTFS_FILE_RECORD_OUTPUT_BUFFER, делаю из этого буфера PFILE_RECORD_HEADER и хожу по атрибутам записи в поисках AttributeFileName;
далее делаю PFILENAME_ATTRIBUTE name = PFILENAME_ATTRIBUTE((PATTRIBUTE)((char *)pAttribute + PRESIDENT_ATTRIBUTE(pAttribute)->ValueOffset));
и какого-то чёрта получаю для name имя файла в досовском формате, ну в смысле 8.3... не пойму почему
объясните пожалуйста.

И ещё, при выводе каждого такого имени из числа total_file_count попадается куча одинаковых подряд идущих имён, видимо один файл на несколько записей распределён. Как-нить можно это предотвратить? может какие-нить поля из структур атрибутов об этом могут сказать — не в курсе — уж больно мало инфы про нтфс. Делитесь опытом, господа...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.