Как определить, свободен ли логический кластер NTFS? - PullRequest
3 голосов
/ 16 июля 2010

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

Согласно этой странице Я могу вызывать SetFilePointer () и ReadFile () на дескрипторе тома, чтобы пройти через каждый логический кластер на томе.Но как мне узнать, какие кластеры используются файлами, а какие бесплатны?

Ответы [ 2 ]

1 голос
/ 27 августа 2010

FSCTL_GET_VOLUME_BITMAP должно быть именно тем, что вы ищете, и должно быть довольно быстро.Это то, что многие компоненты используют для дефрагментации одного файла, скажем, в большое непрерывное пространство.

1 голос
/ 24 августа 2010

Чтобы получить все неиспользуемые кластеры на томе NTFS, вам нужно построить карту всех распределений всех файлов и потоков.Это очень сложно, так как вы должны проанализировать внешние списки для файловых атрибутов-нерезидентов.И MFT.

Но вы можете использовать IOCTL или queryallocranges файла fsutil для усеченного файла и читать последний экстент и далее.Вычислите, где заканчивается текущий файл, и вы получите слабый файл.

То есть, если файл не сжат или не зашифрован EFS.

Бесплатная или коммерческая программа восстановления данных будет быстреепуть сюда.

...