База данных начинается с
заголовка, в котором первые 8 байт это обязательная сигнатура "DSMBASE",0. BASE_HEADER struc Signature CHAR "DSMBASE",0 ;сигнатура RootIndex ULONG64 ? ;номер индекса корневой директории IndStrCnt ULONG64 ? ;количество индексов строк IndDirCnt ULONG64 ? ;количество индексов директорий IndFileCnt ULONG64 ? ;количество индексов файлов ErasedCnt ULONG64 ? ;количество индексов удалённых объектов MaxIndex ULONG64 ? ;самый большой используемый номер индекса BASE_HEADER ends |
После заголовка идет массив
индексов именных строк. Все строки уникальные, копии строк с разными индексами
не допускаются. Всего IndStrCnt структур STR_INDEX. STR_INDEX struc Index ULONG64 ? ;номер индекса именной строки BaseOffset ULONG64 ? ;оффсет именной строки UseCount ULONG64 ? ;количество объектов использующих строку в качестве имени STR_INDEX ends |
После массива индексов именных строк
располагается массив индексов директорий. Всего IndDirCnt структур OBJ_INDEX. OBJ_INDEX struc Index ULONG64 ? ;номер индекса директории BaseOffset ULONG64 ? ;оффсет тела директории, тело содержит массив 8-байтных(тип ULONG64) номеров индексов вложенных объектов NameInd ULONG64 ? ;номер индекса именной строки HostInd ULONG64 ? ;номер индекса "директории владельца" FileSize ULONG64 ? ;размер директории, всегда кратен 8 OBJ_INDEX ends |
После массива индексов
директорий следует массив индексов файлов. Всего IndFileCnt структур OBJ_INDEX. OBJ_INDEX struc Index ULONG64 ? ;номер индекса файла BaseOffset ULONG64 ? ;оффсет тела файла, тело содержит произвольные бинарные данные NameInd ULONG64 ? ;номер индекса именной строки HostInd ULONG64 ? ;номер индекса "директории владельца" FileSize ULONG64 ? ;размер файла OBJ_INDEX ends |
После массива индексов файлов следует массив
8-байтных(тип ULONG64) номеров индексов ранее удаленных строк, директорий и
файлов. При создании новых строк, директорий и файлов они используются в первую очередь. |
Далее распологаются тела директорий. Они отделены от тел файлов и строк потому-что они всегда выровнены на границу 8-байт. |
Все остальное в базе приходится на тела файлов и строк. Они ни каким образом не упорядочены и не требуют выравнивания. |