Этот псевдокод предназначен для чтения и записи номера кластера из / в таблицу размещения файлов. Док говорит это прямо между двумя частями псевдокода. Это единственная возможность, если только у вас нет ни малейшего представления о том, как работает FAT12 / 16/32.
------ 8 <------ </p>
Предположим, что это считывается в 8-битный байтовый массив с именем SecBuff. Также предположим, что тип WORD является 16-разрядным без знака, а тип DWORD является 32-разрядным без знака.
If(FATType == FAT16)
FAT16ClusEntryVal = *((WORD *) &SecBuff[ThisFATEntOffset]);
Else
FAT32ClusEntryVal = (*((DWORD *) &SecBuff[ThisFATEntOffset])) & 0x0FFFFFFF;
Извлекает содержимое этого кластера. Чтобы установить содержимое этого же кластера, выполните следующие действия:
If(FATType == FAT16)
*((WORD *) &SecBuff[ThisFATEntOffset]) = FAT16ClusEntryVal;
Else {
FAT32ClusEntryVal = FAT32ClusEntryVal & 0x0FFFFFFF;
*((DWORD *) &SecBuff[ThisFATEntOffset]) =
(*((DWORD *) &SecBuff[ThisFATEntOffset])) & 0xF0000000;
*((DWORD *) &SecBuff[ThisFATEntOffset]) =
(*((DWORD *) &SecBuff[ThisFATEntOffset])) | FAT32ClusEntryVal;
}
------ 8 <------ </p>
Именно эти номера кластеров в ячейках, которыми манипулирует псевдокод выше:
![enter image description here](https://i.stack.imgur.com/9TlIv.gif)
Они говорят, где находится следующая часть файла (если есть), в каком кластере. Каждый файл или каталог представляет собой цепочку кластеров.
SecBuff
- массив, содержащий 512-байтовый сектор таблицы размещения файлов. *((DWORD *)
приведено во избежание чтения / записи 32-битных значений в отдельных 8-битных фрагментах.