Для получения списка кластеров, занимаемых файлом на диске в формате FAT32 с помощью Delphi, можно использовать следующий код:
```delphi
procedure GetClustersList(const FileName: string);
var
FileHandle: THandle;
BytesRead: DWORD;
BuffSize: DWORD;
FirstCluster: DWORD;
Cluster: DWORD;
ClusterEntry: DWORD;
CurrentCluster: DWORD;
ClustersList: TStringList;
begin
FileHandle := CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
if FileHandle = INVALID_HANDLE_VALUE then
begin
ShowMessage('Error opening file');
Exit;
end;
BuffSize := SizeOf(ClusterEntry);
SetLength(ClustersList, 0);
// Чтение номера первого кластера из дескриптора файла
ReadFile(FileHandle, FirstCluster, BuffSize, BytesRead, nil);
CurrentCluster := FirstCluster;
ClustersList := TStringList.Create;
ClustersList.Add(IntToStr(CurrentCluster));
// Поиск следующих кластеров файла
repeat
ClusterEntry := ReadFATEntry(CurrentCluster);
Cluster := ClusterEntry and $0FFFFFFF;
if (Cluster >= 0x0FFFFFF8) or (Cluster = 0) then
Break;
ClustersList.Add(IntToStr(Cluster));
CurrentCluster := Cluster;
until False;
CloseHandle(FileHandle);
// Вывод списка кластеров файла
ShowMessage('Clusters list: ' + ClustersList.CommaText);
end;
```
Для извлечения номера первого кластера файла из 4-байтового дескриптора в FAT32 можно использовать функцию `ReadFile()`, как показано в примере выше. Для разбора дескриптора файла и преобразования его в структуру данных типа record, необходимо определить структуру файла в соответствии с форматом FAT32 и использовать операции чтения байтов из дескриптора.
Извлечь необходимую информацию о номере начального кластера из 4-байтового дескриптора можно путем чтения первых байтов дескриптора и извлечения номера кластера из соответствующих битов.