MS>>Можно двигать только часть файла.
MS>>StartingVcn — это и есть смещение этой части относительно начала файла.
MS>>Пусть файл занимает 13 кластеров.
MS>>Указываешь StartingVcn = 0, ClusterCount = 5. Двигаешь в свободное место
MS>>Указываешь StartingVcn = 5, ClusterCount = 5. Двигаешь в свободное место
MS>>Указываешь StartingVcn = 10, ClusterCount = 3. Двигаешь в свободное место
SO>я тут читал и у меня появилося вопрос:
SO>-а если файл который мы перемещаем большой и все кластеры раскиданы по винту групами, то как их перемещать? как узнать сколько кластеров в групе?
SO> имея:
SO>2*number of extents array — the vcn and the lcn as pairs
На приведенном выше примере все 13 кластеров могут быть в одной группе. А с помощью FSCTL_MOVE_FILE мы эту группу можем частями перенести в другое место. Нет никакой необходимости работать целиком с группой.
Посмотрите MSDN к FSCTL_GET_RETRIEVAL_POINTERS
Если вам вернули три группы
ExtentCount = 3;
StartingVcn = AAA;
// NextVcn Lcn
Extents[0] = { BBB, 666 }
Extents[1] = { CCC, 777 }
Extents[2] = { EEE, 888 }
То группы кластеров на диске это
- [666, 666+BBB-AAA)
- [777, 777+ССС-BBB)
- [888, 888+EEE-CCC)