2010-07-16 26 views
3

我想編寫一個程序,讀取NTFS捲上所有未使用的羣集。 (我正在從意外截斷的文件中恢復數據)。如何查找NTFS邏輯集羣是否空閒?

根據this page我可以調用卷句柄上的SetFilePointer()和ReadFile()以遍歷捲上的每個邏輯集羣。但是,我怎麼知道哪些文件正在被文件使用,哪些是免費的?

回答

1

爲了獲得NTFS捲上所有未使用的羣集,您必須構建所有文件和流的所有分配的映射。這是非常複雜的,因爲你必須解析非駐留文件屬性的特定列表。和MFT。

但是,您可以在截斷的文件上使用IOCTL或fsutil文件queryallocranges並讀取最後一個範圍以及之後的範圍。計算當前文件結束的位置,您將得到文件鬆弛。

也就是說,如果該文件未被壓縮或EFS加密。

免費或商業數據恢復程序將是一個更快的方法。

1

FSCTL_GET_VOLUME_BITMAP應該是你正在尋找的東西,而且應該很快。這就是很多組件用來嘗試整理單個文件的過程,比如說,將它們整合到一個大的連續空間中。