Спецификация файловой системы exFAT

1. Введение

Файловая система exFAT является преемником файловой системы FAT32 в семействе файловых систем FAT. Эта спецификация описывает файловую систему exFAT и предоставляет всю информацию, необходимую для реализации файловой системы exFAT.

1,1. цели проектирования

Файловая система exFAT имеет три основных цели проектирования (см. список ниже).

  1. Сохраняйте простоту файловых систем на базе FAT.

    Две преимущества файловых систем FAT — это относительная простота и простота реализации. В конце его предшественников разработчики должны найти exFAT относительно просто и легко реализовать.

  2. Включите очень большие файлы и запоминающие устройства.

    Файловая система exFAT использует 64 бит для описания размера файла, тем самым позволяя приложениям, которые зависят от очень больших файлов. Файловая система exFAT также позволяет использовать кластеры размером 32 МБ, эффективно обеспечивая очень большие запоминающие устройства.

  3. Внедрение расширяемости для будущих инноваций.

    Файловая система exFAT включает в себя расширяемость, позволяя файловой системе непрерывно создавать нововведения в хранилище и изменять их использование.

1,2. Особая терминология

В контексте этой спецификации определенные термины (см. таблицу 1) имеют определенное значение для проектирования и реализации файловой системы exFAT.

Таблица 1 определение терминов, которые имеют очень специфичное значение

Термин Определение
Лицензия В этой спецификации для описания поведения, которое является обязательным, используется термин "должно быть".
Следует В этой спецификации используется термин "должен" для описания поведения, которое он настоятельно рекомендует, но не является обязательным.
Май В этой спецификации используется термин "Май" для описания поведения, которое является необязательным.
Обязательный В этом термине описывается поле или структура, которые должна изменить реализация, и они будут интерпретироваться, как описано в этой спецификации.
Необязательно В этом термине описывается поле или структура, которые могут быть не поддерживаются в реализации. Если реализация поддерживает заданное необязательное поле или структуру, он должен изменить и интерпретировать поле или структуру, как описано в этой спецификации.
Не определено. В этом термине описывается содержимое поля или структуры, которое может быть изменено при необходимости (т. е. при установке окружающих полей или структур в нулевом виде) и не может интерпретироваться как какое-либо конкретное значение.
Зарезервировано

В этом термине описывается содержимое поля или структуры, в котором реализованы следующие реализации:

  1. Инициализация до нуля и не должна использоваться для любых целей

  2. Не следует интерпретировать, за исключением случаев вычисления контрольных сумм

  3. Сохранение между операциями, которые изменяют окружающие поля или структуры

1,3. полный текст стандартных акронимов

В этой спецификации используются акронимы, используемые в отрасли персональных компьютеров (см. таблицу 2).

Таблица 2. полный текст стандартных акронимов

Сокращение Полнотекстовый
ASCII ASCII
BIOS Базовая входная система вывода
ЦП Центральная единица обработки
exFAT Расширяемая таблица распределения файлов
FAT Таблица распределения файлов
FAT12 Таблица распределения файлов, 12-разрядные индексы кластера
FAT16 Таблица распределения файлов, 16-разрядные индексы кластера
FAT32 Таблица размещения файлов, 32-разрядные индексы кластера
GPT таблица разделов GUID.
Код GUID Глобальный уникальный идентификатор (см. раздел 10,1)
INT Прервать
MBR- основная загрузочная запись (MBR).
тексфат Защищенная с транзакциями exFAT
Формат UTC. Время в формате UTC

1,4 квалификаторы полей и структур по умолчанию

Поля и структуры в этой спецификации имеют следующие квалификаторы (см. список ниже), если только заметки о спецификации в противном случае отсутствуют.

  1. Не подписаны

  2. Используйте десятичную нотацию для описания значений, где не указано иное. в этой спецификации используется буква "h" после исправления, чтобы обозначить шестнадцатеричные числа и заключать идентификаторы GUID в фигурные скобки

  3. Имеют формат с прямым порядком байтов

  4. Не требуется завершающий символ NULL для строк

1,5 Windows CE и Тексфат

Тексфат — это расширение exFAT, добавляющее операционную семантику, защищенную с помощью транзакций, поверх базовой файловой системы. Тексфат используется Windows CE. Тексфат требует использования двух битов Фатс и точечных рисунков выделения для использования в транзакциях. Он также определяет несколько дополнительных структур, включая дескрипторы заполнения и дескрипторы безопасности.

2 Структура тома

Том — это набор всех структур файловой системы и пространства данных, необходимых для хранения и извлечения данных пользователя. Все тома exFAT содержат четыре региона (см. таблицу 3).

Структура тома таблицы 3

Имя вспомогательной области

Offset

поставлен

Размер

плотность

Комментарии
Основной регион загрузки
Основной загрузочный сектор 0 1 Эта подобласть является обязательной, а раздел 3,1 определяет его содержимое.
Основные расширенные загрузочные секторы 1 8 Этот подраздел является обязательным, и раздел 3,2) определяет его содержимое.
Основные параметры OEM 9 1 Эта подобласть является обязательной, а раздел 3,3 определяет его содержимое.
Основной зарезервированный 10 1 Эта вложенная область является обязательной и ее содержимое зарезервировано.
Основная контрольная сумма загрузки 11 1 Эта подобласть является обязательной, а раздел 3,4 определяет его содержимое.
Резервный регион загрузки
Резервный загрузочный сектор 12 1 Эта подобласть является обязательной, а раздел 3,1 определяет его содержимое.
Резервное копирование расширенных загрузочных секторов 13 8 Эта подобласть является обязательной, а раздел 3,2 определяет его содержимое.
Параметры OEM для резервного копирования 21 1 Эта подобласть является обязательной, а раздел 3,3 определяет его содержимое.
Резервная копия зарезервирована 22 1 Эта вложенная область является обязательной и ее содержимое зарезервировано.
Контрольная сумма загрузки резервной копии 23 1 Эта подобласть является обязательной, а раздел 3,4 определяет его содержимое.
Регион FAT
Выравнивание в FAT 24 Фатоффсет – 24

Эта вложенная область является обязательной и ее содержимое (если таковое имеется) не определено.

Примечание. в основной и резервной загрузочных секторах содержится поле Фатоффсет.

Первая FAT фатоффсет фатленгс

Эта подобласть является обязательной, а раздел 4,1 определяет его содержимое.

Примечание. в основной и резервной загрузочных секторах содержатся поля Фатоффсет и Фатленгс.

Вторая FAT Фатоффсет + Фатленгс Фатленгс * (Нумбероффатс – 1)

Эта вложенная область является обязательной, а раздел 4,1 определяет его содержимое, если оно есть.

Примечание. в основной и резервной загрузочных секторах содержатся поля Фатоффсет, Фатленгс и Нумбероффатс. Поле Нумбероффатс может содержать только значения 1 и 2.

Область данных
Выравнивание кучи кластера Фатоффсет + Фатленгс * Нумбероффатс Клустерхеапоффсет — (Фатоффсет + Фатленгс * Нумбероффатс)

Эта вложенная область является обязательной и ее содержимое (если таковое имеется) не определено.

Примечание. в основной и резервной загрузочных секторах содержатся поля Фатоффсет, Фатленгс, Нумбероффатс и Клустерхеапоффсет. Допустимые значения поля Нумбероффатс: 1 и 2.

Куча кластера клустерхеапоффсет Клустеркаунт * 2секторсперклустершифт

Эта подобласть является обязательной, а раздел 5,1 определяет его содержимое.

Примечание. в основной и резервной загрузочных секторах содержатся поля Клустерхеапоффсет, Клустеркаунт и Секторсперклустершифт.

Лишнее пространство Клустерхеапоффсет + Клустеркаунт * 2секторсперклустершифт Волумеленгс — (Клустерхеапоффсет + Клустеркаунт * 2секторсперклустершифт)

Эта вложенная область является обязательной и ее содержимое (если таковое имеется) не определено.

Примечание. в основной и резервной загрузочных секторах содержатся поля Клустерхеапоффсет, Клустеркаунт, Секторсперклустершифт и Волумеленгс.

3 основные и резервные регионы загрузки

Основной регион загрузки содержит все необходимые инструкции Boot-Страппинг, идентифицирующие сведения и параметры файловой системы, позволяющие реализации выполнять следующие действия.

  1. Загрузочная система компьютера с тома exFAT.

  2. Найдите файловую систему на томе в качестве exFAT.

  3. Найдите расположение структур файловой системы exFAT.

Загрузочный регион резервного копирования — это резервная копия основного региона загрузки. Она помогает восстановить том exFAT в случае, если основной регион загрузки находится в нестабильном состоянии. За исключением редких случаев, таких как обновление инструкций загрузки Страппинг, реализации не должны изменять содержимое загрузочного региона резервного копирования.

3,1. подобласти главного и резервного загрузочного секторов

Основной загрузочный сектор содержит код для Boot-Страппинг из тома exFAT и основные параметры exFAT, описывающие структуру тома (см. табл. 4). BIOS, MBR или другие агенты Boot-Страппинг могут проверить этот сектор, а также загрузить и выполнить все содержащиеся в нем инструкции загрузки.

Резервный загрузочный сектор является резервной копией основного загрузочного сектора и имеет ту же структуру (см. табл. 4). Загрузочный сектор резервного копирования может способствовать операциям восстановления. Однако реализации должны рассматривать содержимое полей Волумефлагс и Перцентинусе как устаревшие.

Перед использованием содержимого основного или резервного загрузочного сектора реализации должны проверить их содержимое, проверив соответствующую контрольную сумму загрузки и убедившись, что все их поля находятся в пределах допустимого диапазона значений.

Хотя начальная операция форматирования инициализирует содержимое основного и резервного загрузочного сектора, реализации могут обновлять эти сектора (а также обновлять соответствующую контрольную сумму загрузки) по мере необходимости. Однако реализации могут обновлять поля Волумефлагс или Перцентинусе без обновления соответствующей контрольной суммы загрузки (в частности, контрольная сумма исключает эти два поля).

Таблица 4 Основная и резервная структура загрузочного сектора

Имя поля

Offset

двухбайтовых

Размер

байт

Комментарии
жумпбут 0 3 Это поле является обязательным, а раздел 3.1.1 определяет его содержимое.
филесистемнаме 3 8 Это поле является обязательным, а раздел 3.1.2 определяет его содержимое.
мустбезеро 11 53 Это поле является обязательным, а раздел 3.1.3 определяет его содержимое.
партитионоффсет 64 8 Это поле является обязательным, а раздел 3.1.4 определяет его содержимое.
волумеленгс 72 8 Это поле является обязательным, а раздел 3.1.5. определяет его содержимое.
фатоффсет 80 4 Это поле является обязательным, а раздел 3.1.6 определяет его содержимое.
фатленгс 84 4 Это поле является обязательным, а раздел 3.1.7 определяет его содержимое.
клустерхеапоффсет 88 4 Это поле является обязательным, а раздел 3.1.8 определяет его содержимое.
клустеркаунт 92 4 Это поле является обязательным, а раздел 3.1.9 определяет его содержимое.
фирстклустерофрутдиректори 96 4 Это поле является обязательным, а раздел 3.1.10 определяет его содержимое.
волумесериалнумбер 100 4 Это поле является обязательным, а раздел 3.1.11 определяет его содержимое.
филесистемревисион 104 2 Это поле является обязательным, а раздел 3.1.12 определяет его содержимое.
волумефлагс 106 2 Это поле является обязательным, а раздел 3.1.13 определяет его содержимое.
битесперсекторшифт 108 1 Это поле является обязательным, а раздел 3.1.14 определяет его содержимое.
секторсперклустершифт 109 1 Это поле является обязательным, а раздел 3.1.15 определяет его содержимое.
нумбероффатс 110 1 Это поле является обязательным, а раздел 3.1.16 определяет его содержимое.
дривеселект 111 1 Это поле является обязательным, а раздел 3.1.17 определяет его содержимое.
перцентинусе 112 1 Это поле является обязательным, а раздел 3.1.18 определяет его содержимое.
Зарезервировано 113 7 Это поле является обязательным и его содержимое зарезервировано.
Загрузоч 120 390 Это поле является обязательным, а раздел 3.1.19 определяет его содержимое.
бутсигнатуре 510 2 Это поле является обязательным, а раздел 3.1.20 определяет его содержимое.
ексцессспаце 512 2битесперсекторшифт — 512

Это поле является обязательным и его содержимое (если таковое имеется) не определено.

Примечание. в основной и резервной загрузочных секторах содержится поле Битесперсекторшифт.

Поле 3.1.1 Жумпбут

Поле Жумпбут должно содержать инструкцию перехода для ЦП, общих для персональных компьютеров, которые при исполнении "переходят" ЦП для выполнения инструкций Boot-Страппинг в поле загрузочный код.

Для этого поля допустимо значение (в порядке байтов с низким порядковым порядком до байта) Ебх 76h 90h.

Поле 3.1.2 Филесистемнаме

Поле Филесистемнаме должно содержать имя файловой системы на томе.

Допустимое значение для этого поля — в символах ASCII — EXFAT, который включает три конечных пробела.

Поле 3.1.3 Мустбезеро

Поле Мустбезеро должно соответствовать диапазону байтов, используемому упакованным блоком параметров BIOS на томах FAT12/16/32.

Допустимое значение для этого поля — 0, что помогает предотвратить неправильное подключение тома exFAT к реализациям FAT12/16/32.

Поле 3.1.4 Партитионоффсет

Поле Партитионоффсет должно описывать смещение сектора относительно носителя для раздела, на котором размещается указанный том exFAT. Это поле помогает загрузить Страппинг с тома с помощью расширенного INT 13h на персональных компьютерах.

Все возможные значения для этого поля допустимы; Однако значение 0 указывает, что реализации не будут учитывать это поле.

Поле 3.1.5. Волумеленгс

Поле Волумеленгс должно описывать размер данного тома exFAT в секторах.

Допустимый диапазон значений для этого поля:

  • Не менее 220/2битесперсекторшифт, что гарантирует, что минимальный том не будет превышать 1 МБ.

  • Не более 264– 1 — наибольшее значение, которое может описывать это поле

Однако если размер лишнего пробела в подобласти равен 0, то значение этого поля будет равно Клустерхеапоффсет + (232-11) * 2секторсперклустершифт.

Поле 3.1.6 Фатоффсет

Поле Фатоффсет должно описывать смещение секторов, относящихся к тому или иначе, для первой файловой системы FAT. Это поле позволяет реализациям согласовать первую систему FAT с характеристиками базового носителя хранилища.

Допустимый диапазон значений для этого поля:

  • По меньшей мере 24 учетные записи для секторов, используемых основными загрузочными и резервными регионами загрузки.

  • Не более Клустерхеапоффсет (Фатленгс * нумбероффатс). учетные записи для секторов, потребляемых кучей кластера

Поле 3.1.7 Фатленгс

Поле Фатленгс должно описывать длину в секторах каждой таблицы FAT (том может содержать до двух Фатс).

Допустимый диапазон значений для этого поля:

  • По меньшей мере (Клустеркаунт + 2) * 22/2битесперсекторшифтокругляется до ближайшего целого числа, что гарантирует, что каждой файловой системе FAT достаточно места для описания всех кластеров в куче кластера.

  • Не более (Клустерхеапоффсет-Фатоффсет)/Нумбероффатс округляется вниз до ближайшего целого числа, что гарантирует, что Фатс существовал до кучи кластера.

Это поле может содержать значение, превышающее нижнюю границу (как описано выше) для включения второй файловой системы FAT, если она есть, а также для соответствия характеристикам базового носителя хранилища. Содержимое пространства, которое превышает размер самой файловой системы FAT, если таковые имеются, не определены.

Поле 3.1.8 Клустерхеапоффсет

Поле Клустерхеапоффсет должно описывать смещение секторов, относительных для тома, в куче кластера. Это поле позволяет реализациям согласовать кучу кластера с характеристиками базового носителя хранилища.

Допустимый диапазон значений для этого поля:

  • По крайней мере Фатоффсет + Фатленгс * нумбероффатс, чтобы учитывать секторы, использованные в предыдущих регионах

  • Не более 232-1 или волумеленгс-(Клустеркаунт * 2секторсперклустершифт), в зависимости от того, какое из вычислений меньше

Поле 3.1.9 Клустеркаунт

Поле Клустеркаунт должно описывать количество кластеров, содержащихся в куче кластера.

Допустимое значение для этого поля должно быть меньше следующего:

  • (Волумеленгс-Клустерхеапоффсет)/2секторсперклустершифтокругляются вниз до ближайшего целого числа, которое точно соответствует количеству кластеров, которые могут подгоняться между началом кучи кластера и концом тома.

  • 232-11 — максимальное число кластеров, которое может описывать FAT

Значение поля Клустеркаунт определяет минимальный размер файловой системы FAT. Чтобы избежать очень больших Фатс, реализации могут управлять количеством кластеров в куче кластера, увеличивая размер кластера (через поле Секторсперклустершифт). Эта спецификация рекомендует не более 224-2 кластеров в куче кластера. Однако реализации должны иметь возможность обрабатывать тома с размером до 232в кластерной куче.

Поле 3.1.10 Фирстклустерофрутдиректори

Поле Фирстклустерофрутдиректори должно содержать индекс кластера для первого кластера корневого каталога. Реализации должны выполнять все усилия для размещения первого кластера корневого каталога в первом неповрежденном кластере после кластеров, используемых точечным рисунком выделения и таблицей вариантов.

Допустимый диапазон значений для этого поля:

  • По крайней мере 2 индекс первого кластера в куче кластера

  • Не более Клустеркаунт + 1 — индекс последнего кластера в куче кластера.

Поле 3.1.11 Волумесериалнумбер

Поле Волумесериалнумбер должно содержать уникальный серийный номер. Это помогает реализовать различия между различными томами exFAT. Реализации должны создать серийный номер, объединив дату и время форматирования тома exFAT. Механизм объединения даты и времени для формирования серийного номера зависит от конкретной реализации.

Все возможные значения для этого поля являются допустимыми.

Поле 3.1.12 Филесистемревисион

Поле Филесистемревисион должно описывать основной и дополнительный номера редакции для структур exFAT на заданном томе.

Старший байт — старший номер редакции, а младший байт — дополнительный номер редакции. Например, если старший байт содержит значение 01H, а младший байт содержит значение 05h, то поле Филесистемревисион описывает номер редакции 1,05. Аналогично, если старший байт содержит значение 0Ah, а младший байт содержит значение 0Fh, то поле Филесистемревисион описывает номер редакции 10,15.

Допустимый диапазон значений для этого поля:

  • По крайней мере 0 для байта нижнего порядка и 1 для байта высокого порядка

  • Не более 99 для байта низкого порядка и 99 для байта высокого порядка

Номер редакции exFAT, описанный в этой спецификации, — 1,00. Реализации этой спецификации должны подключить любой том exFAT с номером основной редакции 1 и не подключать любой том exFAT с любым другим старшим номером редакции. Реализации должны учитывать дополнительный номер редакции и не выполнять операции или создавать любые структуры файловой системы, не описанные в соответствующей спецификации соответствующего номера редакции.

Поле 3.1.13 Волумефлагс

Поле Волумефлагс должно содержать флаги, указывающие состояние различных структур файловой системы на томе exFAT (см. табл. 5).

Реализации не должны включать это поле при вычислении соответствующей контрольной суммы для начальной загрузки или резервной копии в загрузочном регионе. При ссылке на загрузочный сектор резервного копирования реализации должны считать это поле устаревшим.

Таблица 5 структура поля Волумефлагс

Имя поля

Offset

версий

Размер

числа

Комментарии
активефат 0 1 Это поле является обязательным, а раздел 3.1.13.1 определяет его содержимое.
волумедирти 1 1 Это поле является обязательным, а раздел 3.1.13.2 определяет его содержимое.
медиафаилуре 2 1 Это поле является обязательным, а раздел 3.1.13.3 определяет его содержимое.
клеартозеро 3 1 Это поле является обязательным, а раздел 3.1.13.4 определяет его содержимое.
Зарезервировано 4 12 Это поле является обязательным и его содержимое зарезервировано.
Поле 3.1.13.1 Активефат

Поле Активефат описывает, какие активные FAT и точечный рисунок выделения активны (и используются реализации) следующим образом.

  • 0, что означает, что первая файловая система FAT и рисунок первого размещения активны

  • 1, что означает, что вторая файловая система FAT и вторая точечная карта памяти активны и доступны только в том случае, если поле Нумбероффатс содержит значение 2.

Реализации должны рассматривать неактивную систему FAT и точечный рисунок выделения как устаревшие. Только реализации, поддерживающие Тексфат, будут переключать активные FAT и точечные рисунки выделения (см. раздел 7,1).

Поле 3.1.13.2 Волумедирти

Поле Волумедирти должно описывать, является ли том "грязным", следующим образом:

  • 0 — это означает, что том, вероятно, находится в стабильном состоянии.

  • 1, что означает, что том может находиться в нестабильном состоянии

Реализации должны установить значение этого поля равным 1 при обнаружении несоответствий метаданных файловой системы, которые они не разрешают. Если при подключении тома значение этого поля равно 1, только реализации, которые разрешают несоответствия метаданных файловой системы, могут очистить значение этого поля до 0. В таких реализациях только значение этого поля сбрасывается в 0 только после обеспечения того, что файловая система находится в стабильном состоянии.

Если при подключении тома значение этого поля равно 0, реализации должны установить это поле равным 1 перед обновлением метаданных файловой системы, а затем очистить это поле до 0, как показано в разделе 8,1.

Поле 3.1.13.3 Медиафаилуре

В поле Медиафаилуре должно быть указано, обнаружены ли в реализации сбои носителя или нет.

  • 0 — это означает, что на носителе, на котором размещен носитель, не обнаружены сбои, или все известные ошибки уже записаны в FAT как "плохие" кластеры.

  • 1, что означает, что на размещенном носителе обнаружены ошибки (т. е. произошел сбой операций чтения или записи).

Реализация должна присвоить этому полю значение 1, если:

  1. Носитель с размещенным носителем не удается получить доступ к любому региону в томе

  2. Реализация имеет исчерпанные алгоритмы повтора доступа, если таковые имеются

Если при подключении тома значение этого поля равно 1, то реализации, которые проверяют весь том на предмет сбоев носителя и регистрируют все сбои как "плохие" кластеры в файловой системе FAT (или иным образом устраняют сбои носителя), могут очистить значение этого поля до 0.

Поле 3.1.13.4 Клеартозеро

Поле Клеартозеро не имеет существенного значения в этой спецификации.

Допустимые значения для этого поля:

  • 0, у которого нет определенного значения

    1. Это означает, что реализации должны очистить это поле до 0 перед изменением структур, каталогов или файлов файловой системы.

Поле 3.1.14 Битесперсекторшифт

Поле Битесперсекторшифт должно описывать байты на сектор в виде журнала2(n), где N — число байт на сектор. Например, для 512 байт на сектор значение этого поля равно 9.

Допустимый диапазон значений для этого поля:

  • Не менее 9 (размер сектора 512 байт), что является наименьшим сектором, возможным для тома exFAT

  • Не более 12 (размер сектора в 4096 байт) — это размер страницы памяти для ЦП, общих для персональных компьютеров

Поле 3.1.15 Секторсперклустершифт

Поле Секторсперклустершифт должно описывать секторы на кластере в виде журнала2(n), где N — число секторов на кластер. Например, для 8 секторов на один кластер значение этого поля равно 3.

Допустимый диапазон значений для этого поля:

  • По крайней мере 0 (1 сектор на кластер), который может быть наименьшим кластером

  • Не более 25-Битесперсекторшифт, результатом вычисления которого является размер кластера 32 МБ

Поле 3.1.16 Нумбероффатс

В поле Нумбероффатс должно быть указано количество Фатс и точечных рисунков, содержащихся в томе.

Допустимый диапазон значений для этого поля:

  • 1, что означает, что том содержит только первую файловую систему FAT и точечный рисунок первого выделения.

  • 2, что означает, что том содержит первую систему FAT, вторую FAT, битовую карту размещения и второе растровое изображение выделения. Это значение допустимо только для томов Тексфат

Поле 3.1.17 Дривеселект

Поле Дривеселект должно содержать номер диска Extended INT 13h, который помогает загружать Страппинг с этого тома с помощью расширенного INT 13h на персональных компьютерах.

Все возможные значения для этого поля являются допустимыми. Аналогичные поля в предыдущих файловых системах на базе FAT часто содержали значение 80h.

Поле 3.1.18 Перцентинусе

Поле Перцентинусе должно описывать процент кластеров в куче кластера, которые выделены.

Допустимый диапазон значений для этого поля:

  • От 0 до 100 включительно, то есть процент выделенных кластеров в куче кластера, округляется вниз до ближайшего целого числа

  • Точно ФФХ, что указывает, что процент выделенных кластеров в куче кластера недоступен.

Реализации должны изменить значение этого поля в соответствии с изменениями в выделении кластеров в куче кластера или изменить его на ФФХ.

Реализации не должны включать это поле при вычислении соответствующей контрольной суммы для начальной загрузки или резервной копии в загрузочном регионе. При ссылке на загрузочный сектор резервного копирования реализации должны считать это поле устаревшим.

Поле загрузочного поля 3.1.19

Поле загрузочного поля содержит инструкции Boot-Страппинг. Реализации могут заполнить это поле инструкциями ЦП, необходимыми для загрузки компьютера, Страппинг систему. Реализации, которые не предоставляют инструкции Boot-Страппинг, загружают каждый байт в этом поле в F4h (инструкция halt для ЦП, общих для персональных компьютеров) в рамках операции форматирования.

Поле 3.1.20 Бутсигнатуре

В поле Бутсигнатуре необходимо указать, будет ли цель данного сектора использоваться в качестве загрузочного сектора.

Для этого поля допустимо значение AA55h. Любое другое значение в этом поле сделает соответствующий загрузочный сектор недействительным. Реализации должны проверять содержимое этого поля до зависимости от любого другого поля в соответствующем загрузочном секторе.

3,2. Основные и резервные регионы расширенных загрузочных секторов

Каждый сектор основных расширенных загрузочных секторов имеет одинаковую структуру. Однако каждый сектор может содержать отдельные инструкции Boot-Страппинг (см. табл. 6). Агенты Boot-Страппинг, такие как инструкции Boot-Страппинг в главном загрузочном секторе, альтернативные реализации BIOS или встроенное по встроенной системы, могут загрузить эти сектора и выполнить содержащиеся в них инструкции.

Резервная копия расширенных загрузочных секторов — это резервная копия основных загрузочных секторов с такой же структурой (см. табл. 6).

Перед выполнением инструкций основного или резервного копирования дополнительных загрузочных секторов реализации должны проверить их содержимое, убедившись в том, что каждое поле Екстендедбутсигнатуре сектора содержит предписанное значение.

Хотя начальная операция форматирования инициализирует содержимое основных и резервных дополнительных загрузочных секторов, реализации могут обновлять эти сектора (а также обновлять соответствующую контрольную сумму загрузки) по мере необходимости.

Таблица 6. Расширенная структура загрузочного сектора

Имя поля

Offset

двухбайтовых

Размер

байт

Комментарии
екстендедбуткоде 0 2битесперсекторшифт – 4

Это поле является обязательным, а раздел 3.2.1 определяет его содержимое.

Примечание. в основной и резервной загрузочных секторах содержится поле Битесперсекторшифт.

екстендедбутсигнатуре 2битесперсекторшифт – 4 4

Это поле является обязательным, а раздел 3.2.2 определяет его содержимое.

Примечание. в основной и резервной загрузочных секторах содержится поле Битесперсекторшифт.

Поле Екстендедбуткоде 3.2.1

Поле Екстендедбуткоде должно содержать инструкции Boot-Страппинг. Реализации могут заполнить это поле инструкциями ЦП, необходимыми для загрузки компьютера, Страппинг систему. Реализации, которые не предоставляют инструкции Boot-Страппинг, инициализируют каждый байт в этом поле в 17:00 в рамках их операции форматирования.

Поле 3.2.2 Екстендедбутсигнатуре

В поле Екстендедбутсигнатуре должно быть указано, будет ли цель данного сектора быть расширенным загрузочным сектором.

Для этого поля допустимо значение AA550000h. Любое другое значение в этом поле делает недействительным соответствующий основной или резервный расширенный загрузочный сектор. Реализации должны проверять содержимое этого поля до зависимости от любого другого поля в соответствующем расширенном загрузочном секторе.

3,3. подобласти параметров Main и Backup OEM

Основная часть параметров изготовителя оборудования содержит десять структур параметров, которые могут содержать сведения, относящиеся к изготовителю (см. таблицу 7). Каждая из десяти структур параметров является производной от шаблона универсальных параметров (см. раздел 3.3.2). Производители могут создавать собственные структуры пользовательских параметров из шаблона универсальных параметров. Сама спецификация определяет две структуры параметров: параметры null (см. раздел 3.3.3) и параметры Flash (см. раздел 3.3.4).

Параметры OEM Backup — это резервная копия основных параметров OEM с такой же структурой (см. табл. 7).

Прежде чем использовать содержимое основного или резервного OEM-параметров, реализации должны проверить их содержимое, проверив соответствующую контрольную сумму загрузки.

Изготовители должны заполнить основные и резервные параметры OEM, используя собственные структуры пользовательских параметров, если таковые имеются, и любые другие структуры параметров. Последующие операции форматирования сохраняют содержимое основного и резервного OEM-параметров.

При необходимости реализации могут обновлять основные и резервные параметры OEM, а также обновлять соответствующую контрольную сумму загрузки.

Таблица 7 параметры OEM-структуры

Имя поля

Offset

двухбайтовых

Размер

байт

Комментарии
Параметры [0] 0 48 Это поле является обязательным, а раздел 3.3.1 определяет его содержимое.

.

.

.

.

.

.

.

.

.

.

.

.

Параметры [9] 432 48 Это поле является обязательным, а раздел 3.3.1 определяет его содержимое.
Зарезервировано 480 2битесперсекторшифт — 480

Это поле является обязательным и его содержимое зарезервировано.

Примечание. в основной и резервной загрузочных секторах содержится поле Битесперсекторшифт.

параметры 3.3.1 [ 0 ] ... Параметры [ 9]

Каждое поле параметров в этом массиве содержит структуру параметров, которая является производной от шаблона универсальных параметров (см. раздел 3.3.2). Любое неиспользуемое поле параметров должно описываться как содержащее структуру параметров NULL (см. раздел 3.3.3).

Шаблон универсальных параметров 3.3.2

Шаблон универсальных параметров предоставляет базовое определение структуры параметров (см. таблицу 8). Все структуры параметров являются производными от этого шаблона. Поддержка этого шаблона универсальных параметров является обязательной.

Шаблон таблицы 8 универсальных параметров

Имя поля

Offset

двухбайтовых

Размер

байт

Комментарии
параметерсгуид 0 16 Это поле является обязательным, а раздел 3.3.2.1 определяет его содержимое.
кустомдефинед 16 32 Это поле является обязательным, и структуры, производные от этого шаблона, определяют его содержимое.
Поле 3.3.2.1 Параметерсгуид

Поле Параметерсгуид должно описывать идентификатор GUID, который определяет макет оставшейся части данной структуры параметров.

Все возможные значения для этого поля допустимы; Однако производители должны использовать средство создания GUID, например GuidGen.exe, для выбора идентификатора GUID при создании структур пользовательских параметров из этого шаблона.

3.3.3 параметры null

Структура параметров со значением NULL является производной от шаблона универсальных параметров (см. раздел 3.3.2) и описывает неиспользуемое поле параметров (см. таблицу 9). При создании или обновлении структуры параметров OEM реализации должны заполнять неиспользуемые поля параметров структурой параметров NULL. Кроме того, при создании или обновлении структуры параметров OEM реализации должны консолидировать структуры параметров NULL в конце массива, тем самым оставив все остальные параметры в начале структуры параметров OEM.

Поддержка структуры параметров NULL является обязательной.

Структура параметров в таблице 9 null

Имя поля

Offset

двухбайтовых

Размер

байт

Комментарии
параметерсгуид 0 16 Это поле является обязательным, а раздел 3.3.3.1 определяет его содержимое.
Зарезервировано 16 32 Это поле является обязательным и его содержимое зарезервировано.
Поле 3.3.3.1 Параметерсгуид

Поле Параметерсгуид должно соответствовать определению, предоставленному шаблоном универсальных параметров (см. раздел 3.3.2.1).

Допустимым значением для этого поля в нотации GUID является {00000000-0000-0000-0000-000000000000} .

Параметры Flash 3.3.4

Структура параметров Flash является производной от шаблона универсальных параметров (см. раздел 3.3.2) и содержит параметры для Flash Media (см. таблицу 10). Производители устройств хранения данных на базе Flash могут заполнить поле параметров (желательно [ поле параметров 0 ] ) с помощью этой структуры параметров. Реализации могут использовать сведения в структуре параметров Flash для оптимизации операций доступа во время операций чтения/записи и для выравнивания структур файловой системы, дурнинг форматирование носителя.

Поддержка структуры параметров Flash является необязательной.

Структура параметров Flash таблицы 10

Имя поля

Offset

двухбайтовых

Размер

байт

Комментарии
параметерсгуид 0 16 Это поле является обязательным, а раздел 3.3.4.1 определяет его содержимое.
ерасеблокксизе 16 4 Это поле является обязательным, а раздел 3.3.4.2 определяет его содержимое.
PageSize 20 4 Это поле является обязательным, а раздел 3.3.4.3 определяет его содержимое.
спаресекторс 24 4 Это поле является обязательным, а раздел 3.3.4.4 определяет его содержимое.
рандомакцесстиме 28 4 Это поле является обязательным, а раздел 3.3.4.5 определяет его содержимое.
программингтиме 32 4 Это поле является обязательным, а раздел 3.3.4.6 определяет его содержимое.
реадцикле 36 4 Это поле является обязательным, а раздел 3.3.4.7 определяет его содержимое.
вритецикле 40 4 Это поле является обязательным, а раздел 3.3.4.8 определяет его содержимое.
Зарезервировано 44 4 Это поле является обязательным и его содержимое зарезервировано.

Все возможные значения для всех полей параметров Flash, кроме поля Параметерсгуид, являются допустимыми. Однако значение 0 указывает на то, что поле на самом деле не имеет смысла (реализации должны игнорировать заданное поле).

Поле 3.3.4.1 Параметерсгуид

Поле Параметерсгуид должно соответствовать определению, указанному в шаблоне универсальных параметров (см. раздел 3.3.2.1).

Допустимым значением для этого поля в нотации GUID является {0A0C7E46-3399-4021-90C8-FA6D389C4BA2}.

Поле 3.3.4.2 Ерасеблокксизе

Поле Ерасеблокксизе должно описывать размер блока стирания флэш-памяти (в байтах).

Поле PageSize 3.3.4.3

Поле PageSize должно описывать размер (в байтах) страницы Flash-носителя.

Поле 3.3.4.4 Спаресекторс

Поле Спаресекторс должно описывать количество секторов, доступных для внутренних операций резервирования на носителе Flash.

Поле 3.3.4.5 Рандомакцесстиме

Поле Рандомакцесстиме должно описывать среднее время случайного доступа к носителю Flash в наносекундах.

Поле 3.3.4.6 Программингтиме

Поле Программингтиме должно описывать среднее время программирования Flash-носителя в наносекундах.

Поле 3.3.4.7 Реадцикле

Поле Реадцикле должно описывать среднее время цикла чтения Flash Media в наносекундах.

Поле 3.3.4.8 Вритецикле

Поле Вритецикле должно описывать среднее время цикла записи в наносекундах.

3,4. Главная и резервная контрольная сумма загрузочных областей

Главная и резервная контрольные суммы загрузки каждой из них содержат Повторяющийся шаблон из 4-байтовой контрольной суммы содержимого всех других подрегионов в соответствующих регионах загрузки. Вычисление контрольной суммы не должно включать поля Волумефлагс и Перцентинусе в соответствующий загрузочный сектор (см. рис. 1). Повторяющийся шаблон для 4-байтовой контрольной суммы заполняет соответствующую вложенную контрольную сумму загрузки с начала до конца вложенной области.

Перед использованием содержимого любых других подрегионов в основном или резервном регионах, реализации должны проверить их содержимое, проверив соответствующую контрольную сумму загрузки.

Хотя начальная операция форматирования будет заполнять как основную, так и резервную контрольную сумму с помощью повторяющейся схемы контрольной суммы, реализации будут обновлять эти секторы по мере изменения содержимого других секторов в соответствующих регионах загрузки.

Рис. 1 Вычисление контрольной суммы загрузки

UInt32 BootChecksum
(
    UCHAR  * Sectors,        // points to an in-memory copy of the 11 sectors
    USHORT   BytesPerSector
)
{
    UInt32 NumberOfBytes = (UInt32)BytesPerSector * 11;
    UInt32 Checksum = 0;
    UInt32 Index;

    for (Index = 0; Index < NumberOfBytes; Index++)
    {
        if ((Index == 106) || (Index == 107) || (Index == 112))
        {
            continue;
        }
        Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (UInt32)Sectors[Index];
    }

    return Checksum;
}

4 область таблицы выделения файлов

В области таблицы размещения файлов (FAT) может содержаться до двух Фатс, одна в первой подобласти FAT, а другая — во второй. Поле Нумбероффатс описывает количество Фатс, которое содержит этот регион. Допустимые значения для поля Нумбероффатс: 1 и 2. Таким образом, первая часть области FAT всегда содержит файловую систему FAT. Если поле Нумбероффатс равно двум, то Вторая часть области файловой системы FAT также содержит файловую систему FAT.

Поле Активефат в поле Волумефлагс описывает активную систему FAT. Только поле Волумефлагс в основном загрузочном секторе является актуальным. Реализации должны рассматривать файловую систему FAT, которая неактивна как устаревшая. Использование неактивной файловой системы FAT и переключение между Фатс зависит от конкретной реализации.

4,1 первый и второй подобласти FAT

FAT должен описывать цепочки кластеров в куче кластера (см. таблицу 11). Цепочка кластеров — это серия кластеров, которая предоставляет пространство для записи содержимого файлов, каталогов и других структур файловой системы. FAT представляет цепочку кластеров в виде однонаправленного списка индексов кластера. За исключением первых двух записей, каждая запись в файловой системе FAT представляет ровно один кластер.

Таблица 11. Структура таблицы размещения файлов

Имя поля

Offset

двухбайтовых

Размер

байт

Комментарии
Фатентри [0] 0 4 Это поле является обязательным, а раздел 4.1.2 определяет его содержимое.
Фатентри [1] 4 4 Это поле является обязательным, а раздел 4.1.2 определяет его содержимое.
Фатентри [2] 8 4 Это поле является обязательным, а раздел 4.1.3 определяет его содержимое.

.

.

.

.

.

.

.

.

.

.

.

.

Фатентри [Клустеркаунт + 1] (Клустеркаунт + 1) * 4 4

Это поле является обязательным, а раздел 4.1.3 определяет его содержимое.

Клустеркаунт + 1 никогда не может превышать FFFFFFF6h.

Примечание. в основной и резервной загрузочных секторах содержится поле Клустеркаунт.

ексцессспаце (Клустеркаунт + 2) * 4 (Фатленгс * 2битесперсекторшифт) — ((клустеркаунт + 2) * 4)

Это поле является обязательным и его содержимое (если таковое имеется) не определено.

Примечание. в основной и резервной загрузочных секторах содержатся поля Клустеркаунт, Фатленгс и Битесперсекторшифт.

поле 4.1.1 Фатентри [ 0 ]

В [ поле фатентри 0 ] должен быть указан тип носителя в первом байте (минимальный байт заказа), который должен содержать ФФХ в оставшихся трех байтах.

Тип носителя (первый байт) должен быть F8h.

поле 4.1.2 Фатентри [ 1 ]

Поле Фатентри [ 1 ] существует только в соответствии с приоритетом с предысторией и не описывает что-то, что интересно.

Для этого поля допустимо значение Ффффффффх. Реализации должны инициализировать это поле до предписанного значения и не использовать это поле для любых целей. Реализации не должны интерпретировать это поле и сохранять его содержимое во всех операциях, изменяющих окружающие поля.

4.1.3 Фатентри [ 2 ] ... Фатентри [ клустеркаунт + 1 ] поля

Каждое поле Фатентри в этом массиве должно представлять кластер в куче кластера. Фатентри [ 2 ] представляет первый кластер в куче кластера, а фатентри [ клустеркаунт + 1 ] — последний кластер в куче кластера.

Диапазон допустимых значений для этих полей должен быть следующим:

  • От 2 до Клустеркаунт + 1 включительно, что указывает на следующее Фатентри в данной цепочке кластеров; заданный Фатентри не должен указывать на любые Фатентри, которые предшествуют ему в данной цепочке кластеров.

  • Точно FFFFFFF7h, помечающая соответствующий кластер Фатентри как "плохой"

  • Точно Ффффффффх, который помечает соответствующий кластер Фатентри как последний кластер цепочки кластеров; Это единственное допустимое значение для последней Фатентри любой заданной цепочки кластеров

5 область данных

Область данных содержит кучу кластера, которая обеспечивает управляемое пространство для структур, каталогов и файлов файловой системы.

подобласть кучи кластера 5,1

Структура кучи кластера очень проста (см. таблицу 12); Каждый последовательный ряд секторов описывает один кластер, как определено в поле Секторсперклустершифт. Что важнее, в первом кластере кучи кластера есть два индекса, которые непосредственно соответствуют индексу Фатентри [ 2 ] .

В томе exFAT битовая карта выделения (см. раздел 7.1.5) поддерживает запись состояния выделения всех кластеров. Это существенное отличие от предшественников exFAT (FAT12, FAT16 и FAT32), в которых файловая система FAT поддерживает запись состояния выделения всех кластеров в куче кластера.

Структура кучи кластера таблицы 12

Имя поля

Offset

поставлен

Размер

плотность

Комментарии
Кластер [2] клустерхеапоффсет 2секторсперклустершифт

Это поле является обязательным, а раздел 5.1.1 определяет его содержимое.

Примечание. в основной и резервной загрузочных секторах содержатся поля Клустерхеапоффсет и Секторсперклустершифт.

.

.

.

.

.

.

.

.

.

.

.

.

Кластер [Клустеркаунт + 1] Клустерхеапоффсет + (Клустеркаунт – 1) * 2секторсперклустершифт 2секторсперклустершифт

Это поле является обязательным, а раздел 5.1.1 определяет его содержимое.

Примечание. в основной и резервной загрузочных секторах содержатся поля Клустеркаунт, Клустерхеапоффсет и Секторсперклустершифт.

5.1.1 кластер [ 2 ] ... Cluster [ клустеркаунт + 1 ] Fields

Каждое поле кластера в этом массиве представляет собой последовательность смежных секторов, размер которых определяется полем Секторсперклустершифт.

6 Структура каталогов

В файловой системе exFAT используется подход дерева каталогов для управления структурами файловой системы и файлами, которые существуют в куче кластера. Каталоги имеют связь «один ко многим» между родительским и дочерним элементами дерева каталогов.

Каталог, на который ссылается поле Фирстклустерофрутдиректори, является корнем дерева каталогов. Все остальные каталоги в порядке убывания из корневого каталога.

Каждый каталог состоит из ряда записей каталога (см. табл. 13).

Одна или несколько записей каталога объединяются в набор записей каталога, который описывает интересующий вас объект, например структуру файловой системы, вложенный каталог или файл.

Таблица 13. Структура каталогов

Имя поля

Offset

двухбайтовых

Размер

двухбайтовых

Комментарии
DirectoryEntry [0] 0 32 Это поле является обязательным, а раздел 6,1 определяет его содержимое.

.

.

.

.

.

.

.

.

.

.

.

.

DirectoryEntry [N – 1] (N – 1) * 32 32

Это поле является обязательным, а раздел 6,1 определяет его содержимое.

N, количество полей DirectoryEntry, — это размер (в байтах) цепочки кластеров, которая содержит заданный каталог, деленная на размер поля DirectoryEntry 32 байт.

6,1 DirectoryEntry [ 0 ] ... DirectoryEntry [ N--1]

Каждое поле DirectoryEntry в этом массиве является производным от универсального шаблона DirectoryEntry (см. раздел 6,2).

6,2 универсальный шаблон DirectoryEntry

Универсальный шаблон DirectoryEntry предоставляет базовое определение для записей каталога (см. таблицу 14). Все структуры записи каталога являются производными от этого шаблона, и только структуры записи каталога, определенные корпорацией Майкрософт, являются допустимыми (exFAT не имеет подположений для определенных производителем структур записи каталога, за исключением случаев, определенных в разделе 7,8 и разделе 7,9). Возможность интерпретировать универсальный шаблон DirectoryEntry является обязательной.

Таблица 14 универсальный шаблон DirectoryEntry

Имя поля

Offset

двухбайтовых

Размер

двухбайтовых

Комментарии
EntryType 0 1 Это поле является обязательным, а раздел 6.2.1 определяет его содержимое.
кустомдефинед 1 19 Это поле является обязательным, и структуры, производные от этого шаблона, могут определять его содержимое.
фирстклустер 20 4 Это поле является обязательным, а раздел 6.2.2 определяет его содержимое.
DataLength 24 8 Это поле является обязательным, а раздел 6.2.3 определяет его содержимое.

Поле 6.2.1 EntryType

Поле EntryType имеет три режима использования, которые определяет значение поля (см. список ниже).

  • 17:00, который является маркером конца каталога и относится к следующим условиям.

    • Все остальные поля в данной DirectoryEntry на самом деле зарезервированы

    • Все последующие записи каталога в указанном каталоге также являются маркерами конца каталога

    • Маркеры конца каталога допустимы только вне набора записей каталога

    • При необходимости реализации могут перезаписывать маркеры конца каталога

  • Между 01H и 7Fh включительно, который является маркером неиспользуемой записи и имеет следующие условия:

    • Все остальные поля в заданном DirectoryEntry на самом деле не определены

    • Неиспользуемые записи каталога допустимы только за пределами наборов записей каталога

    • Реализации могут перезаписывать неиспользуемые записи каталога по мере необходимости

    • Этот диапазон значений соответствует полю InUse (см. раздел 6.2.1.4), содержащему значение 0.

  • Между 81h и ФФХ включительно, что является обычной записью каталога и применимы следующие условия:

    • Содержимое поля EntryType (см. таблицу 15) определяет макет оставшейся части структуры DirectoryEntry

    • Этот диапазон значений и только этот диапазон значений являются допустимыми в наборе записей каталога.

    • Этот диапазон значений непосредственно соответствует полю InUse (см. раздел 6.2.1.4), содержащему значение 1

Чтобы предотвратить изменения в поле InUse (см. раздел 6.2.1.4), ошибочно приводящие к маркеру конца каталога, значение 80h недопустимо.

Таблица 15 Универсальная структура поля EntryType

Имя поля

Offset

версий

Размер

числа

Комментарии
Код типа 0 5 Это поле является обязательным, а раздел 6.2.1.1 определяет его содержимое.
типеимпортанце 5 1 Это поле является обязательным, а раздел раздела 6.2.1.2 определяет его содержимое.
типекатегори 6 1 Это поле является обязательным, а раздел 6.2.1.3 определяет его содержимое.
InUse 7 1 Это поле является обязательным, а раздел 6.2.1.4 определяет его содержимое.
Поле TypeCode 6.2.1.1

Поле TypeCode частично описывает конкретный тип заданной записи каталога. Это поле, а также поля Типеимпортанце и Типекатегори (см. раздел 6.2.1.2 and Section 6.2.1.3соответственно) уникально идентифицируют тип данной записи каталога.

Все возможные значения этого поля допустимы, если оба поля Типеимпортанце и Типекатегори не содержат значение 0; в этом случае значение 0 недопустимо для этого поля.

Поле 6.2.1.2 Типеимпортанце

Поле Типеимпортанце должно описывать важность данной записи каталога.

Допустимые значения для этого поля:

  • 0, что означает, что заданная запись каталога является критической (см. раздел 6.3.1.2.1 и раздел 6.4.1.2.1 для критических первичных и критических записей вторичного каталога соответственно).

  • 1, что означает, что данная запись каталога является критической (см. раздел 6.3.1.2.2 и раздел 6.4.1.2.2 для неблагоприятных основных и неблагоприятных записей вторичного каталога соответственно).

Поле 6.2.1.3 Типекатегори

Поле Типекатегори должно описывать категорию заданной записи каталога.

Допустимые значения для этого поля:

  • 0, что означает, что данная запись каталога является первичной (см. раздел 6,3).

  • 1, что означает, что данная запись каталога является вторичной (см. раздел 6,4).

Поле InUse 6.2.1.4

Поле InUse должно описывать, используется ли данная запись каталога.

Допустимые значения для этого поля:

  • 0, что означает, что данная запись каталога не используется; Это означает, что данная структура на самом деле является неиспользуемой записью каталога

  • 1, что означает, что данная запись каталога используется; Это означает, что данная структура является обычной записью каталога

Поле 6.2.2 Фирстклустер

Поле Фирстклустер должно содержать индекс первого кластера размещения в куче кластера, связанной с заданной записью каталога.

Допустимый диапазон значений для этого поля:

  • Точно 0. Это означает, что распределение кластеров не существует

  • Между 2 и Клустеркаунт + 1, который является диапазоном допустимых индексов кластера.

Структуры, производные от этого шаблона, могут переопределять поля Фирстклустер и DATALENGTH, если выделение кластера несовместимо с производной структурой.

Поле 6.2.3 DATALENGTH

Поле DATALENGTH описывает размер данных в байтах, содержащихся в связанном распределении кластера.

Допустимый диапазон значений для этого поля:

  • Не менее 0; Если поле Фирстклустер содержит значение 0, единственное допустимое значение этого поля — 0.

  • Не более Клустеркаунт * 2секторсперклустершифт * 2битесперсекторшифт

Структуры, производные от этого шаблона, могут переопределять поля Фирстклустер и DATALENGTH, если распределение кластеров невозможно для производной структуры.

6,3 универсальный шаблон основной DirectoryEntry

Первая запись каталога в наборе записей каталога должна быть записью основного каталога. Все последующие записи каталога (если они есть) в наборе записей каталога должны быть записями вторичного каталога (см. раздел 6,4).

Возможность интерпретировать универсальный основной шаблон DirectoryEntry является обязательной.

Все структуры записи первичного каталога являются производными от универсального основного шаблона DirectoryEntry (см. таблицу 16), который является производным от универсального шаблона DirectoryEntry (см. раздел 6,2).

Таблица 16 универсальный основной шаблон DirectoryEntry

Имя поля

Offset

двухбайтовых

Размер

двухбайтовых

Комментарии
EntryType 0 1 Это поле является обязательным, а раздел 6.3.1 определяет его содержимое.
секондарикаунт 1 1 Это поле является обязательным, а раздел 6.3.2 определяет его содержимое.
SetChecksum 2 2 Это поле является обязательным, а раздел 6.3.3 определяет его содержимое.
женералпримарифлагс 4 2 Это поле является обязательным, а раздел 6.3.4 определяет его содержимое.
кустомдефинед 6 14 Это поле является обязательным, и структуры, производные от этого шаблона, определяют его содержимое.
фирстклустер 20 4 Это поле является обязательным, а раздел 6.3.5 определяет его содержимое.
DataLength 24 8 Это поле является обязательным, а раздел 6.3.6 определяет его содержимое.

Поле 6.3.1 EntryType

Поле EntryType должно соответствовать определению, указанному в универсальном шаблоне DirectoryEntry (см. раздел 6.2.1).

Поле TypeCode 6.3.1.1

Поле TypeCode должно соответствовать определению, указанному в универсальном шаблоне DirectoryEntry (см. раздел 6.2.1.1).

Поле 6.3.1.2 Типеимпортанце

Поле Типеимпортанце должно соответствовать определению, указанному в универсальном шаблоне DirectoryEntry (см. раздел 6.2.1.2).

Записи критического первичного каталога 6.3.1.2.1

Критические записи первичного каталога содержат сведения, которые важны для правильного управления томом exFAT. Только корневой каталог содержит критически важные записи первичного каталога (это исключение см. в разделе 7,4).

Определение критических записей первичного каталога соответствует основному номеру редакции exFAT. Реализации должны поддерживать все важные записи первичного каталога и записывать только критически важные структуры входа первичного каталога, определяемые спецификацией.

Записи 6.3.1.2.2 неблагоприятных первичных каталогов

Небезопасные записи основного каталога содержат дополнительные сведения, которые могут быть полезны для управления томом exFAT. Любой каталог может содержать небезопасные записи первичного каталога.

Определение немягких записей первичного каталога соотносится с номером дополнительной редакции exFAT. Поддержка любой некритической записи первичного каталога, заданной спецификацией, или любой последующей спецификации, определяется необязательно. Нераспознанная Неизвестная запись первичного каталога визуализирует весь набор записей каталога как нераспознанный (за пределами определения соответствующих шаблонов записи каталога).

Поле 6.3.1.3 Типекатегори

Поле Типекатегори должно соответствовать определению, указанному в универсальном шаблоне DirectoryEntry (см. раздел 6.2.1.3).

Для этого шаблона допустимое значение для этого поля должно быть равно 0.

Поле InUse 6.3.1.4

Поле InUse должно соответствовать определению, указанному в универсальном шаблоне DirectoryEntry (см. раздел 6.2.1.4).

Поле 6.3.2 Секондарикаунт

Поле Секондарикаунт должно описывать количество записей вторичного каталога, которые сразу следуют за заданной записью основного каталога. Эти записи вторичного каталога вместе с заданной записью основного каталога составляют набор записей каталога.

Допустимый диапазон значений для этого поля:

  • По крайней мере 0 — Эта запись первичного каталога является единственной записью в наборе записей каталога

  • Не более 255. Это означает, что следующие 255 записей каталогов и эта запись первичного каталога составляют набор записей каталога.

Критические структуры записи первичного каталога, производные от этого шаблона, могут переопределять поля Секондарикаунт и Сетчекксум.

Поле 6.3.3 Сетчекксум

Поле Сетчекксум должно содержать контрольную сумму всех записей каталога в заданном наборе записей каталога. Однако контрольная сумма исключает это поле (см. рис. 2). Реализации должны проверить допустимость содержимого этого поля до использования любой другой записи каталога в заданном наборе записей каталога.

Критические структуры записи первичного каталога, производные от этого шаблона, могут переопределять поля Секондарикаунт и Сетчекксум.

Рис. 2. Вычисление Ентрисетчекксум

UInt16 EntrySetChecksum
(
    UCHAR * Entries,       // points to an in-memory copy of the directory entry set
    UCHAR   SecondaryCount
)
{
    UInt16 NumberOfBytes = ((UInt16)SecondaryCount + 1) * 32;
    UInt16 Checksum = 0;
    UInt16 Index;

    for (Index = 0; Index < NumberOfBytes; Index++)
    {
        if ((Index == 2) || (Index == 3))
        {
            continue;
        }
        Checksum = ((Checksum&1) ? 0x8000 : 0) + (Checksum>>1) +  (UInt16)Entries[Index];
    }
    return Checksum;
}

Поле 6.3.4 Женералпримарифлагс

Поле Женералпримарифлагс содержит флаги (см. таблицу 17).

Основные структуры записи первичного каталога, производные от этого шаблона, могут переопределить это поле.

Таблица 17 Универсальная структура поля Женералпримарифлагс

Имя поля

Offset

версий

Размер

числа

Комментарии
аллокатионпоссибле 0 1 Это поле является обязательным, а раздел 6.3.4.1 определяет его содержимое.
нофатчаин 1 1 Это поле является обязательным, а раздел 6.3.4.2 определяет его содержимое.
кустомдефинед 2 14 Это поле является обязательным, и структуры, производные от этого шаблона, могут определить это поле.
Поле 6.3.4.1 Аллокатионпоссибле

Поле Аллокатионпоссибле описывает, возможно ли для данной записи каталога выделение памяти в куче кластера.

Допустимые значения для этого поля:

  • 0 — это означает, что связанное выделение кластеров невозможно, а поля Фирстклустер и DATALENGTH фактически не определены (структуры, производные от этого шаблона, могут переопределять эти поля).

  • 1, это означает, что возможно связанное выделение кластеров, а поля Фирстклустер и DATALENGTH определены как определенные.

Поле 6.3.4.2 Нофатчаин

Поле Нофатчаин должно указывать, описывает ли активная система FAT цепочку кластеров данного выделения.

Допустимые значения для этого поля:

  • 0 — это означает, что соответствующие записи в файловой системе FAT для цепочки кластеров выделения действительны, и реализации должны их интерпретировать. Если поле Аллокатионпоссибле содержит значение 0 или если поле Аллокатионпоссибле содержит значение 1, а поле Фирстклустер содержит значение 0, то это поле действительно только значение 0.

  • 1, то есть связанное выделение — это один непрерывный ряд кластеров; соответствующие записи FAT для кластеров недопустимы, и реализации не должны их интерпретировать. реализации могут использовать следующее уравнение для вычисления размера связанного выделения: DATALENGTH/(2секторсперклустершифт * 2битесперсекторшифт), округленное до ближайшего целого числа

Если важные структуры записи первичного каталога, производные от этого шаблона, переопределяют поле Женералпримарифлагс, то соответствующие записи FAT для цепочки кластеров связанного выделения являются допустимыми.

Поле 6.3.5 Фирстклустер

Поле Фирстклустер должно соответствовать определению, указанному в универсальном шаблоне DirectoryEntry (см. раздел 6.2.2).

Если бит Нофатчаин равен 1, Фирстклустер должен указывать на допустимый кластер в куче кластера.

Критические структуры записи первичного каталога, производные от этого шаблона, могут переопределять поля Фирстклустер и DATALENGTH. Другие структуры, производные от этого шаблона, могут переопределять поля Фирстклустер и DATALENGTH только в том случае, если поле Аллокатионпоссибле содержит значение 0.

Поле 6.3.6 DATALENGTH

Поле DATALENGTH должно соответствовать определению, указанному в универсальном шаблоне DirectoryEntry (см. раздел 6.2.3).

Если бит Нофатчаин равен 1, то длина не должна равняться нулю. Если поле Фирстклустер равно нулю, то параметр DATALENGTH также должен быть равен нулю.

Критические структуры записи первичного каталога, производные от этого шаблона, могут переопределять поля Фирстклустер и DATALENGTH. Другие структуры, производные от этого шаблона, могут переопределять поля Фирстклустер и DATALENGTH только в том случае, если поле Аллокатионпоссибле содержит значение 0.

6,4 шаблон общего вторичного DirectoryEntry

Основное назначение записей вторичного каталога заключается в предоставлении дополнительных сведений о наборе записей каталога. Возможность интерпретировать универсальный вторичный шаблон DirectoryEntry является обязательной.

Определение критически важных и безопасных записей вторичного каталога соответствует дополнительному номеру редакции exFAT. Поддержка любых критических или неблагоприятных вторичных записей каталога. Эта спецификация или последующие спецификации определяются необязательно.

Все структуры записи вторичного каталога являются производными от универсального вторичного шаблона DirectoryEntry (см. таблицу 18), который является производным от универсального шаблона DirectoryEntry (см. раздел 6,2).

Таблица 18. универсальный шаблон вспомогательной DirectoryEntry

Имя поля

Offset

двухбайтовых

Размер

двухбайтовых

Комментарии
EntryType 0 1 Это поле является обязательным, а раздел раздела 6.4.1 определяет его содержимое.
женералсекондарифлагс 1 1 Это поле является обязательным, а раздел 6.4.2 определяет его содержимое.
кустомдефинед 2 18 Это поле является обязательным, и структуры, производные от этого шаблона, определяют его содержимое.
фирстклустер 20 4 Это поле является обязательным, а раздел 6.4.3 определяет его содержимое.
DataLength 24 8 Это поле является обязательным, а раздел 6.4.4 определяет его содержимое.

6.4.1 поле EntryType

Поле EntryType должно соответствовать определению, указанному в универсальном шаблоне DirectoryEntry (см. раздел 6.2.1).

Поле TypeCode 6.4.1.1

Поле TypeCode должно соответствовать определению, указанному в универсальном шаблоне DirectoryEntry (см. раздел 6.2.1.1).

Поле 6.4.1.2 Типеимпортанце

Поле Типеимпортанце должно соответствовать определению, указанному в универсальном шаблоне DirectoryEntry (см. раздел 6.2.1.2).

6.4.1.2.1 критические записи вторичного каталога

Критические записи вторичного каталога содержат сведения, которые важны для правильного управления содержащим его набором записей каталога. Хотя поддержка какой-либо конкретной критической записи вторичного каталога необязательна, неизвестная критическая запись каталога визуализирует весь набор записей каталога как нераспознанный (помимо определения применимых шаблонов записи каталога).

Однако если набор записей каталога содержит по крайней мере одну критическую запись вторичного каталога, которая не распознается реализацией, то реализация должна в большей мере интерпретировать шаблоны записей каталога в наборе записей каталога, а не данные, связанные с любой записью каталога в наборе записей каталога (это исключение см. в разделе 7,4).

Записи 6.4.1.2.2 некритического вторичного каталога

Небезопасные записи вторичного каталога содержат дополнительные сведения, которые могут быть полезны для управления содержащимся в нем набором записей каталога. Поддержка любой конкретной записи дополнительного вторичного каталога необязательна. Нераспознанные небезопасные записи вторичного каталога не отображают весь набор записей каталога как нераспознанный.

Реализации могут игнорировать любую неопасную вторичную запись, которая не распознается.

Поле 6.4.1.3 Типекатегори

Поле Типекатегори должно соответствовать определению, указанному в универсальном шаблоне DirectoryEntry (см. раздел 6.2.1.3).

Для этого шаблона допустимым значением для этого поля является 1.

Поле InUse 6.4.1.4

Поле InUse должно соответствовать определению, указанному в универсальном шаблоне DirectoryEntry (см. раздел 6.2.1.4).

Поле 6.4.2 Женералсекондарифлагс

Поле Женералсекондарифлагс содержит флаги (см. табл. 19).

Таблица 19. Общая структура поля Женералсекондарифлагс

Имя поля

Offset

версий

Размер

числа

Комментарии
аллокатионпоссибле 0 1 Это поле является обязательным, а раздел 6.4.2.1 определяет его содержимое.
нофатчаин 1 1 Это поле является обязательным, а раздел 6.4.2.2 определяет его содержимое.
кустомдефинед 2 6 Это поле является обязательным, и структуры, производные от этого шаблона, могут определить это поле.
Поле 6.4.2.1 Аллокатионпоссибле

Поле Аллокатионпоссибле должно иметь такое же определение, как и поле с тем же именем в универсальном шаблоне основной DirectoryEntry (см. раздел 6.3.4.1).

Поле 6.4.2.2 Нофатчаин

Поле Нофатчаин должно иметь такое же определение, как и поле с тем же именем в универсальном шаблоне основной DirectoryEntry (см. раздел 6.3.4.2).

Поле 6.4.3 Фирстклустер

Поле Фирстклустер должно соответствовать определению, указанному в универсальном шаблоне DirectoryEntry (см. раздел 6.2.2).

Если бит Нофатчаин равен 1, Фирстклустер должен указывать на допустимый кластер в куче кластера.

Поле 6.4.4 DATALENGTH

Поле DATALENGTH должно соответствовать определению, указанному в универсальном шаблоне DirectoryEntry (см. раздел 6.2.3).

Если бит Нофатчаин равен 1, то длина не должна равняться нулю. Если поле Фирстклустер равно нулю, то параметр DATALENGTH также должен быть равен нулю.

7 определений записей каталога

Редакция 1,00 файловой системы exFAT определяет следующие записи каталога:

7,1 запись каталога битовой карты выделения

В файловой системе exFAT FAT не описывает состояние выделения кластеров. Вместо этого точечный рисунок размещения выполняет. В куче кластера существуют точечные рисунки размещения (см. раздел 7.1.5) и имеются соответствующие важные записи первичного каталога в корневом каталоге (см. таблицу 20).

Поле Нумбероффатс определяет количество допустимых записей каталога битовой карты размещения в корневом каталоге. Если поле Нумбероффатс содержит значение 1, то единственным допустимым числом записей каталога битовой карты выделения будет 1. Кроме того, запись каталога точечных рисунков с одним размещением допустима только в том случае, если она описывает первое битовое изображение выделения (см. раздел 7.1.2.1). Если поле Нумбероффатс содержит значение 2, то единственным допустимым числом записей каталога битовой карты размещения является 2. Кроме того, две записи каталога битовой карты размещения допустимы только в том случае, если один из них описывает первый точечный рисунок размещения, а другой — второй точечный рисунок выделения.

Таблица 20 точечная карта размещения, структура DirectoryEntry

Имя поля

Offset

двухбайтовых

Размер

двухбайтовых

Комментарии
EntryType 0 1 Это поле является обязательным, а раздел 7.1.1 определяет его содержимое.
битмапфлагс 1 1 Это поле является обязательным, а раздел 7.1.2 определяет его содержимое.
Зарезервировано 2 18 Это поле является обязательным и его содержимое зарезервировано.
фирстклустер 20 4 Это поле является обязательным, а раздел 7.1.3 определяет его содержимое.
DataLength 24 8 Это поле является обязательным, а раздел 7.1.4 определяет его содержимое.

Поле 7.1.1 EntryType

Поле EntryType должно соответствовать определению, указанному в универсальном шаблоне основной DirectoryEntry (см. раздел 6.3.1).

Поле TypeCode 7.1.1.1

Поле TypeCode должно соответствовать определению, предоставленному в универсальном шаблоне основной DirectoryEntry (см. раздел 6.3.1.1).

Для записи каталога битовой карты размещения допустимое значение для этого поля равно 1.

Поле 7.1.1.2 Типеимпортанце

Поле Типеимпортанце должно соответствовать определению, указанному в универсальном шаблоне основной DirectoryEntry (см. раздел 6.3.1.2).

Для записи каталога битовой карты размещения допустимое значение для этого поля равно 0.

Поле 7.1.1.3 Типекатегори

Поле Типекатегори должно соответствовать определению, указанному в универсальном шаблоне основной DirectoryEntry (см. раздел 6.3.1.3).

Поле InUse 7.1.1.4

Поле InUse должно соответствовать определению, предоставленному в универсальном шаблоне основной DirectoryEntry (см. раздел 6.3.1.4).

Поле 7.1.2 Битмапфлагс

Поле Битмапфлагс содержит флаги (см. таблицу 21).

Таблица 21 Битмапфлагс структура поля

Имя поля

Offset

версий

Размер

числа

Комментарии
битмапидентифиер 0 1 Это поле является обязательным, а раздел 7.1.2.1 определяет его содержимое.
Зарезервировано 1 7 Это поле является обязательным и его содержимое зарезервировано.
Поле 7.1.2.1 Битмапидентифиер

В поле Битмапидентифиер должно быть указано, какие битовые карты выделения будут описаны в данной записи каталога. Реализации должны использовать первое битовое изображение выделения в сочетании с первой файловой системой FAT и использовать второй точечный рисунок в сочетании со вторым блоком FAT. Поле Активефат описывает, какие ресурсы FAT и точечный рисунок будут активны.

Допустимые значения для этого поля:

  • 0, что означает, что данная запись каталога описывает первый точечный рисунок выделения.

  • 1, что означает, что данная запись каталога описывает второй точечный рисунок размещения и может быть доступна, только если Нумбероффатс содержит значение 2

Поле 7.1.3 Фирстклустер

Поле Фирстклустер должно соответствовать определению, указанному в универсальном шаблоне основной DirectoryEntry (см. раздел 6.3.5).

Это поле содержит индекс первого кластера цепочки кластеров, как описано в разделе FAT, где размещается точечный рисунок выделения.

Поле 7.1.4 DATALENGTH

Поле "Cluster" (кластер данных) должно соответствовать определению, указанному в универсальном шаблоне основной DirectoryEntry (см. раздел 6.3.6).

Точечный рисунок выделения 7.1.5

Точечный рисунок размещения записывает состояние выделения кластеров в куче кластера. Каждый бит в битовой карте выделения указывает, доступен ли соответствующий кластер для выделения.

Точечный рисунок размещения представляет кластеры от нижнего до высшего индекса (см. таблицу 22). По историческим причинам первый кластер имеет индекс 2. Примечание. первый бит точечного рисунка — это бит наименьшего порядка первого байта.

Таблица 22. Структура битовой карты выделения

Имя поля

Offset

версий

Размер

числа

Комментарии
Битмапентри [2] 0 1 Это поле является обязательным, а раздел раздела 7.1.5.1 определяет его содержимое.

.

.

.

.

.

.

.

.

.

.

.

.

Битмапентри [Клустеркаунт + 1] Клустеркаунт-1 1

Это поле является обязательным, а раздел 7.1.5.1 определяет его содержимое.

Примечание. в основной и резервной загрузочных секторах содержится поле Клустеркаунт.

Зарезервировано клустеркаунт (DATALENGTH * 8) — Клустеркаунт

Это поле является обязательным и его содержимое зарезервировано.

Примечание. в основной и резервной загрузочных секторах содержится поле Клустеркаунт.

7.1.5.1 Битмапентри [ 2 ] ... Битмапентри [ клустеркаунт + 1 ] поля

Каждое поле Битмапентри в этом массиве представляет кластер в куче кластера. Битмапентри [ 2 ] представляет первый кластер в куче кластера, а битмапентри [ клустеркаунт + 1 ] — последний кластер в куче кластера.

Допустимые значения для этих полей:

  • 0, которое описывает соответствующий кластер как доступный для выделения.

  • 1, описывающий соответствующий кластер как недоступный для выделения (выделение кластера может уже использовать соответствующий кластер, или активная система FAT может описать соответствующий кластер как неисправный)

7,2. запись в каталоге таблицы вариантов

Таблица вариантов вверх определяет преобразование в прописные и строчные буквы. Это важно, поскольку запись каталога имени файла (см. раздел 7,7) использует символы Юникода, а файловая система exFAT не учитывает регистр и сохраняет регистр. Таблица актуальных данных существует в куче кластера (см. раздел 7.2.5) и имеет соответствующую запись критического первичного каталога в корневом каталоге (см. таблицу 23). Допустимое число записей в каталоге для таблицы вариантов использования — 1.

Из-за связи между таблицей вариантов и именами файлов, реализации не должны изменять таблицу «Up», за исключением результатов операций форматирования.

Таблица 23. Структура DirectoryEntry таблицы вариантов

Имя поля

Offset

двухбайтовых

Размер

двухбайтовых

Комментарии
EntryType 0 1 Это поле является обязательным, а раздел 7.2.1 определяет его содержимое.
Reserved1 1 3 Это поле является обязательным и его содержимое зарезервировано.
таблечекксум 4 4 Это поле является обязательным, а раздел 7.2.2 определяет его содержимое.
Reserved2 8 12 Это поле является обязательным и его содержимое зарезервировано.
фирстклустер 20 4 Это поле является обязательным, а раздел 7.2.3 определяет его содержимое.
DataLength 24 8 Это поле является обязательным, а раздел 7.2.4 определяет его содержимое.

Поле 7.2.1 EntryType

Поле EntryType должно соответствовать определению, указанному в универсальном шаблоне основной DirectoryEntry (см. раздел 6.3.1).

Поле TypeCode 7.2.1.1

Поле TypeCode должно соответствовать определению, предоставленному в универсальном шаблоне основной DirectoryEntry (см. раздел 6.3.1.1).

Для записи в каталоге таблицы вариантов актуальности для этого поля допустимо значение 2.

Поле 7.2.1.2 Типеимпортанце

Поле Типеимпортанце должно соответствовать определению, указанному в универсальном шаблоне основной DirectoryEntry (см. раздел 6.3.1.2).

Для записи в каталоге таблицы вариантов актуальности для этого поля допустимо значение 0.

Поле 7.2.1.3 Типекатегори

Поле Типекатегори должно соответствовать определению, указанному в универсальном шаблоне основной DirectoryEntry (см. раздел 6.3.1.3).

Поле InUse 7.2.1.4

Поле InUse должно соответствовать определению, предоставленному в универсальном шаблоне основной DirectoryEntry (см. раздел 6.3.1.4).

Поле 7.2.2 Таблечекксум

Поле Таблечекксум содержит контрольную сумму таблицы с обновленными вариантами (которая описывает поля Фирстклустер и DATALENGTH). Реализации должны проверить допустимость содержимого этого поля до использования таблицы с более ранними вариантами.

Рис. 3 вычисление Таблечекксум

UInt32 TableChecksum
(
    UCHAR  * Table,    // points to an in-memory copy of the up-case table
    UInt64   DataLength
)
{
    UInt32 Checksum = 0;
    UInt64 Index;

    for (Index = 0; Index < DataLength; Index++)
    {
        Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (UInt32)Table[Index];
    }

    return Checksum;
}

Поле 7.2.3 Фирстклустер

Поле Фирстклустер должно соответствовать определению, указанному в универсальном шаблоне основной DirectoryEntry (см. раздел 6.3.5).

Это поле содержит индекс первого кластера цепочки кластеров, как описано в разделе FAT, где размещается таблица вариантов.

Поле 7.2.4 DATALENGTH

Поле "Cluster" (кластер данных) должно соответствовать определению, указанному в универсальном шаблоне основной DirectoryEntry (см. раздел 6.3.6).

7.2.5, таблица вариантов

Таблица с любыми вариантами — это последовательность сопоставлений символов Юникода. Сопоставление символов состоит из 2-байтового поля с индексом поля в таблице, представляющим собой символ Юникода, и с 2-байтовым полем, представляющим символ Юникода в формате с учетом регистра.

Первые 128 символов Юникода имеют обязательные сопоставления (см. таблицу 24). Таблица наиболее подстановки с любым другим сопоставлением символов для любого из первых 128 символов Юникода является недопустимой.

Реализации, которые поддерживают только символы из обязательного диапазона сопоставления, могут игнорировать сопоставления остальной таблицы вариантов. Такие реализации должны использовать только символы из обязательного диапазона сопоставления при создании или переименовании файлов (с помощью записи каталога имен файлов см. в разделе 7,7). При использовании существующих имен файлов с прописными буквами такие реализации не должны иметь символов из необязательного диапазона сопоставления, но оставить их без изменений в результирующем имени файла (это частичная Подстрочная буква). При сравнении имен файлов такие реализации должны рассматривать имена файлов, которые отличаются от имен в сравнении с необязательными диапазонами сопоставления, как эквивалентные. Хотя такие имена файлов потенциально эквивалентны, такие реализации не могут гарантировать, что полное имя файла не будет конфликтовать с именем при сравнении.

Таблица 24 обязательная первая 128. записи в таблице вариантов

Индекс таблицы Записи таблицы
+ 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7
0000h 0000h 0001h 0002h 0003h 0004h 0005h 0006h 0007h
0008h 0008h 0009h 000Ah 000Bh 000Ch 000Dh 000Eh 000Fh
0010h 0010h 0011h 0012h 0013h 0014h 0015h 0016h 0017h
0018h 0018h 0019h 001Ah 001Bh 001Ch 001Dh 001Eh 001Fh
0020h 0020h 0021h 0022h 0023h 0024h 0025h 0026h 0027h
0028h 0028h 0029h 002Ah 002Bh 002Ch 002Dh 002Eh 002Fh
0030h 0030h 0031h 0032h 0033h 0034h 0035h 0036h 0037h
0038h 0038h 0039h 003Ah 003Bh 003Ch 003Dh 003Eh 003Fh
0040h 0040h 0041h 0042h 0043h 0044h 0045h 0046h 0047h
0048h 0048h 0049h 004Ah 004Bh 004Ch 004Dh 004Eh 004Fh
0050h 0050h 0051h 0052h 0053h 0054h 0055h 0056h 0057h
0058h 0058h 0059h 005Ah 005Bh 005Ch 005Dh 005Eh 005Fh
0060h 0060h 0041h 0042h 0043h 0044h 0045h 0046h 0047h
0068h 0048h 0049h 004Ah 004Bh 004Ch 004Dh 004Eh 004Fh
0070h 0050h 0051h 0052h 0053h 0054h 0055h 0056h 0057h
0078h 0058h 0059h 005Ah 007Bh 007Ch 007Dh 007Eh 007Fh

(Примечание. записи с сопоставлениями неудостоверений в случае неоднозначности выделены жирным шрифтом)

При форматировании тома реализации могут создавать таблицы в сжатом формате с помощью сжатия сопоставления удостоверений, так как большая часть пространства символов Юникода не имеет понятия Case (это означает, что символы "нижний регистр" и "верхний регистр" эквивалентны). Реализации сжимают таблицу Up, представляя ряд сопоставлений идентификаторов со значением Ффффх, за которым следует число сопоставлений идентификаторов.

Например, реализация может представлять первые 100 (64h) сопоставлений символов со следующими восемью записями сжатой таблицы вариантов.

Ффффх, 0061h, 0041h, 0042h, 0043h

Первые две записи указывают первые 97 (61h) символов (от 0000h к 0060h) с сопоставлениями удостоверений. Последующие символы, 0061h через 0063h, сопоставляются с символами 0041h через 0043h соответственно.

Возможность предоставления сжатой таблицы вариантов сжатия при форматировании тома необязательна. Однако возможность интерпретировать как несжатую, так и сжатую таблицу с учетом регистра является обязательной. Значение поля Таблечекксум всегда соответствует тому, как таблица с наиболее подделами находится на томе, что может быть в сжатом или несжатом формате.

При форматировании тома реализации должны записать рекомендуемую таблицу вариантов в сжатом формате (см. таблицу 25), для которой значение поля Таблечекксум равно E619D30Dh.

Если в реализации определена собственная таблица Up, сжатая или несжатая, то эта таблица должна охватывать весь диапазон символов Юникода (от кодов символов 0000h до Ффффх включительно).