Структура системы FAT. Структура файловой записи. Цепочки кластеров, корневой каталог, файловые атрибуты. Структура построения проекта. Функции и переменные управляющего приложения и DLL-модуля. Ошибка, вызванная некорректным ID контроля диалогового окна.
Файловая система (англ. file system) - порядок, определяющий способ организации, хранения и именования данных на носителях информации в компьютерах, а также в другом электронном оборудовании: цифровых фотоаппаратах, мобильных телефонах и т. п. Конкретная файловая система определяет размер имени файла (папки), максимальный возможный размер файла и раздела, набор атрибутов файла. Файловая система связывает носитель информации с одной стороны и API для доступа к файлам - с другой. Когда прикладная программа обращается к файлу, она не имеет никакого представления о том, каким образом расположена информация в конкретном файле, так же, как и на каком физическом типе носителя (CD, жестком диске, магнитной ленте, блоке флеш-памяти или другом) он записан. Именно файловая система устанавливает, где и как будет записан файл на физическом носителе (например, жестком диске).В файловой системе FAT смежные секторы диска объединяются в единицы, называемые кластерами. Для хранения данных файла отводится целое число кластеров (минимум один), так что, например, если размер файла составляет 40 байт, а размер кластера 4 кбайт, реально занят информацией файла будет лишь 1% отведенного для него места. Так как емкость диска вполне может и не выражаться целым числом кластеров, обычно в конце тома присутствуют т.н. surplus sectors - «остаток» размером менее кластера, который не может отводиться ОС для хранения информации. Содержит служебные структуры, которые принадлежат загрузочной записи раздела (Partition Boot Record - PBR, для отличия от Master Boot Record - главной загрузочной записи диска; также PBR часто некорректно называется загрузочным сектором) и используются при инициализации тома; Если кластер принадлежит файлу, то соответствующая ему ячейка содержит номер следующего кластера этого же файла.BPB в принципе отсутствовал в FAT, обслуживавшей MS-DOS 1.x, так как в то время предполагалось лишь два различных типа тома - одно-и двусторонние пятидюймовые дискеты на 360 кб, причем формат тома определялся по первому байту области FAT. BPB был введен в MS-DOS 2.x в начале 1983 г. как обязательная структура загрузочного сектора, по которой впредь следовало определять формат тома; старая схема определения по первому байту FAT лишилась поддержки. Структура BPB в MS-DOS 2.x содержала 16-битное поле «общего количества секторов», что означало принципиальную неприменимость этой версии FAT для томов объемом более 216 = 65536 секторов, т.е. более 32 Мб при стандартном размере сектора 512 байт. В MS-DOS 4.0 (1988) вышеназванное поле BPB было расширено до 32 бит, что означало увеличение максимального размера тома до 232 = 4294967296 секторов, т.е. до 2 Гб при 512-байтном секторе. Каждый из них содержит сигнатуру 0XAA55 по адресу 0x1FE, т.е. в последних двух байтах при том, что сектор = 512 байт.Определение типа FAT тома (т.е. выбор между FAT12, FAT16 и FAT32) производится ОС по количеству кластеров в томе, которое в свою очередь определяется из полей BPB. Далее определяется, какие из полей BPB_FATSZ16/32 и BPB_TOTSEC16/32 не равны нулю, и они используются при определении количества секторов области данных тома: DATASEC = TOTSEC - По количеству кластеров проводится однозначное соответствие с файловой системой: - COUNTOFCLUSTERS <4085 - FAT12Следующая важная структура тома FAT - это сама таблица FAT, занимающая отдельную логическую область. Между кластерами и индексными указателями таблицы имеется взаимно однозначное соответствие - N-й указатель соответствует кластеру с тем же номером. кластер занят файлом и не является последним кластером файла - значение указателя - это номер следующего кластера файла; кластер является последним кластером файла - указатель содержит метку EOC (End Of Clusterchain), значение которой зависит от версии FAT: для FAT12 меткой EOC считается любое значение, большее или равное 0x0FF8 (по умолчанию 0x0FFF); для FAT16 - большее или равное 0XFFF8 (по умолчанию 0XFFFF); для FAT32 - любое значение, большее или равное 0x0FFFFFF8 (по умолчанию 0x0FFFFFFF); кластер поврежден - указатель содержит специальную метку, значение которой для FAT12 0x0FF7, для FAT16 0XFFF7 и для FAT32 0x0FFFFFF7.Непосредственно после окончания последней таблицы FAT следует область данных, содержащая файлы и папки.В FAT12/FAT16 корневой каталог имеет фиксированный размер в секторах, который вычисляется из значения BPB_ROOTENTCNT, и следует на диске непосредственно после таблицы FAT. В FAT32 корневой каталог, как любой другой, имеет переменный размер и является цепочкой кластеров.Файловая запись FAT32 состоит из следующих структур: - DIR_Name. 11-байтное поле по относительному адресу 0, содержит короткое имя файла (в рамках стандарта 8.3). Байт по адресу 0x0B, отвечающий за атрибуты файла. Байт по адресу 0x0C, используется в Windows NT. Дата последнего доступа к файлу (т.е. последнего чтения или записи - в последнем случае приравнивается DIR_WRTDATE).Поле DIR_Name логически разбивается на первые 8 символов, образующие имя файла, и последние 3, обра