Хранение длинных имен.
Требование совместимости, которым должна удовлетворять система Windows означает что невозможно просто изменить существующий формат хранения данных на диске, который применяется в FAT. VFAT поддерживает как длинные так и короткие имена. 32х битный элемент каталога идентичен тому формату, который поддерживают предыдущие версии ОС. Метод работы с длинными именами файлов строится на использовании байта атрибута элемента каталога для коротких имен файлов. Установка младших 4х битов этого байта задает элементу каталога атрибуты: только чтение, скрытый, системный, метка тома. Добавление метки тома дает не имеющее смысла сочетание и защищает элемент каталога от изменения. Windows использует для формирования длинного имени несколько последовательных коротких имен элементов каталога, защищая каждое при помощи байта атрибута 0Fh.
Элементы с длинным именем файла располагаются в каталоге в соответствии с определенным форматом. Длинное имя файла не может существовать без связанного с ним элемента с коротким именем. Если есть такая ситуация, значит, нарушена целостность данных на диске.
Сегмент длинного имени располагается так:
Каждый 32х байтный элемент описывающий длинное имя содержит порядковый номер, защитный байт атрибута, и контрольную сумму. Порядковый номер позволяет виндовозу узнать о непоследовательном или некорректном изменении структуры каталога. Контрольная сумма вычисляется по связанному с данным файлом короткому имени, и если короткое имя изменится вне структуры винды то ОС поймет что элементы длинного имени больше не имеют смысла. Система хранит длинные имена файлов в виде символов таблиц юникод (2байта на символ). Поле тип нигде не используется.
Контрольная сумма вычисляется по связанному с длинным файлом короткому имени. Если короткое имя изменится вне среды Windows, то элементы длинного имени больше не будут иметь смысл.
Основная проблема при формировании короткого имени, связанного с длинным, заключается в создании уникального короткого имени, которое не совпадет с уже каким-нибудь существующим коротким именем.
При формировании коротких имен учитываются следующие правила:
- если длинное имя может быть принято как короткое, оно должно быть уникальным
- если из длинного имени не получается короткое, ОС выполняет ряд операций усечения и преобразования, чтобы получить допустимое короткое имя. Longna~1.doc
Для работы с короткими именами используют функции 56h и 7156h.
!!! Дальше идет инфа, которую нам не давала Караваева.
Для того, чтобы распространить использование длинных имен файлов на все типы приложений, Microsoft расширила набор функций прерывания MS DOS Int 21h для работы с длинными именами файлов, блокировки устройств с заменяемыми носителями и блокировки дисков. Расширение состояло в добавлении новых функций, которые полностью эквивалентны функциям Win32 API, и в совершенствовании существующих функций MS DOS, которые работают с именами. Обращения к новым и к модифицированным функциям Int 21h продолжают использовать стандартные для MS-DOS соглашения о передаче и возвращении параметров через регистры. Эти функции по-прежнему реализованы в виде 16-разрядного кода.
Прежде, чем использовать функции поддержки длинных имен файлов, программа должна выполнить несколько проверок. Во-первых, необходимо проверить версию MS-DOS. Если значение, возвращаемое функцией 30h прерывания Int 21h меньше 7, то функции использовать нельзя. Затем нужно проверить, работает ли программа под управлением Windows - в режиме DOS-приложений эти функции также использовать нельзя. Далее следует проверить, поддерживаются ли длинные имена файлов для данного устройства. Новая функция 71A0h прерывания Int 21h позволяет получить информацию об устройстве. В регистре ВХ возвращаются флаги, описывающие данное устройство.
Дата добавления: 2015-07-30; просмотров: 891;