NTFS, перечисляющий все файлы и каталоги

Я пытаюсь составить список всех файлов и папок на смонтированном томе NTFS, и я до сих пор сделал 2 способа, которые дали разные результаты (к сожалению).

(ПРИМЕЧАНИЕ: я не мог включить дополнительные источники здесь, потому что лимит ссылок)

Есть несколько вещей, которые я бы хотел прояснить:

(1) Почему определенные файлы / папки имеют странные неузнаваемые символы в середине имени? и как мне написать распечатать их в wstringstream, а затем, как мне правильно написать их в wofstream?

Пример пути к файлу: C: \ Users \ Rahul \ AppData \ Local \ Packages \ winstore_cw5n1h2txyewy \ LocalState \ Cache \ 4 \ 4-https∺∯∯wscont.apps.microsoft.com∯winstore∯6.3.0.1∯100∯US∯en -us∯MS∯482∯features1908650c-22a4-485e-8e88-b12d01c84f2f.json.dat

Как это выглядит, если вы использовали dir в cmd: C: \ Users \ Rahul \ AppData \ Local \ Packages \ winstore_cw5n1h2txyewy \ LocalState \ Cache \ 4 \ 4-https ??? wscont.apps.microsoft.com?winstore?6.3 .0.1? 100? США? ан-нас? MS? 482? features1908650c-22a4-485e-8e88-b12d01c84f2f.json.dat

Как это выглядит, если вы использовали wprintf в C ++: C: \ Users \ Rahul \ AppData \ Local \ Packages \ winstore_cw5n1h2txyewy \ LocalState \ Cache \ 4 \ 4-https

Имя файла отображается правильно в проводнике Windows, но возникают проблемы при печати в cmd. В notepad ++ это выглядит как поле, но если щелкнуть правой кнопкой мыши, оно отображается правильно, поэтому notepad ++ также может правильно отображать символы (что-то вроде изменения кодировки?).

В настоящее время я использую (ss — поток строк, инициализированный как wstingstream ss («»);)

wstringstream ss("");
(my program methods here)
wofstream out("...", wofstream::out);
out << ss.rdbuf();
out.close();

Я предполагаю, что кодировка хоть как-то связана с этим, но в то же время я не уверен, какие флаги использовать.

(2) Все ли файлы перечислены в MFT?
Каждая ссылка в NTFS говорит о том, что вся информация о файлах и атрибуты хранятся в MFT, но в соответствии с открытым исходным кодом NTFSLib (имеет ограничение на число ссылок, которое можно найти путем поиска в Google An-NTFS-Parser-Lib), существует 131840 файловых записей.

Когда я запускаю свою собственную программу, я получаю Файл 50 МБ (включает разрешения и тому подобное). Моя программа использует FSCTL_MFT_ENUM_USN_DATA и CreateFile для дескрипторов и GetFileInformationByHandle для получения расширенной информации.
CreateFile обычно принимает WCHAR * и не имеет странных проблем с нулевым завершением (я думаю, может быть, даже не уверен, что это может быть в случае отсутствующих файлов).

Это показывает, что есть 129454 файла, которые он мог прочитать, я предполагаю, что другие 131840-129454 = 2386 файлы — это файлы, которые были удалены, но все еще находятся в журнале USN.

(3) Почему моя Java-версия кода выводит больше файловых записей, чем MFT даже содержит?

Вывод моего кода Java является Файл 150 МБ (включает разрешения, перечисляет имена вместо символов, потому что я не знаю, как этого не делать, так что это намного больше).

Как вы можете видеть здесь, в этом файле 161430 записей. Это больше, чем сказал NTFSLib. Да, возможно, многие из этих файловых записей 131840 являются «дополнительными именами», но я явно избегал символических ссылок в моей версии Java. Это тот случай, когда эти дополнительные 30000 файлов генерируются из жестких ссылок или как-то больше имен не зависит от символических ссылок?

-2

Решение

Решение (1):

Вы должны написать свою собственную библиотеку, которая может писать UTF-16, так как иногда это может привести к неправильному выравниванию символов и будет думать, что есть ноль, например:
0xD00A может столкнуться с символом 0x00 во время неправильного выравнивания и, таким образом, завершится.

Я использовал следующие два файла, чтобы записать как Unicode. Обрабатывает wchar_t, wchar_t *, char, char *, длинный без знака и длинный длинный без знака:
UTF16.h,
UTF16.c

(2,3):

Да, они все там. Вы можете найти количество ссылок в методе GetInformationByHandle, и это будет учитывать количество файлов, содержащихся в Java.

Все еще ищете: Как вы перечислите имена всех ссылок на запись файла в MFT?

0

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


По вопросам рекламы [email protected]