Московский физико-технический институт
Опубликован: 12.12.2007 | Доступ: свободный | Студентов: 5489 / 1826 | Оценка: 4.34 / 4.14 | Длительность: 13:57:00
ISBN: 978-5-94774-827-7
Лекция 11:

Интерфейс файловой системы

< Лекция 10 || Лекция 11: 123 || Лекция 12 >

Разделы диска. Операция монтирования

В ОС Windows принято разбивать диски на логические диски (это низкоуровневая операция), иногда называемые разделами (partitions). Бывает, что, наоборот, объединяют несколько физических дисков в один логический диск. На разделе или логическом диске хранится корневой каталог данного и все вложенные в него каталоги, а задание пути к файлу начинается с имени логического диска или "буквы" диска.

Имена логических дисков хранятся в каталоге "\??" пространства имен объектов, которые и осуществляют связь логического диска и реального устройства. Указав букву диска, прикладная программа получает доступ к его файловой системе.

По аналогии с Unix операционная система Windows позволяет пользователю создать точку монтирования - связать какой-либо пустой каталог с каталогом логического диска. В случае успешного завершения операции содержимое этих каталогов будет соответствовать друг другу.

Эксперимент. Монтирование логического диска с помощью штатной утилиты mountvol

Чтобы смонтировать логический диск, нужно выполнить команду

>mountvol  [<диск>:]<путь> <имя тома>

Здесь параметр <путь> задает имя пустого каталога, а имя тома задается в виде \\?\Volume{код_GUID}\, где GUID - глобальный уникальный идентификатор.

Например

>mountvol  f:\tmp1   \\?\Volume\{2eca078d-5cbc-43d3-aff8-7e8511f60d0e}\}

Имена глобальных уникальных идентификаторов и их связь с буквами диска можно узнать, дав команду

>mountvol /?

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

Наконец, смонтировать диск можно программным образом с помощью Win32-функции SetVolumeMountPoint.

Защита файлов

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

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

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

В новых версиях NTFS дескрипторы защиты всех файлов хранятся в отдельном файле метаданных \$Secure, который описывается 9-й записью главной файловой таблицы тома MFT (консолидированная защита).

Более подробно защита от несанкционированного доступа описана в части V данного курса.

Заключение

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

< Лекция 10 || Лекция 11: 123 || Лекция 12 >
Ирина Оленина
Ирина Оленина
Николай Сергеев
Николай Сергеев

Здравствуйте! Интересует следующий момент. Как осуществляется контроль доступа по тому или иному адресу с точки зрения обработки процессом кода процесса. Насколько я понял, есть два способа: задание через атрибуты сегмента (чтение, запись, исполнение), либо через атрибуты PDE/PTE (чтение, запись). Но как следует из многочисленных источников, эти механизмы в ОС Windows почти не задействованы. Там ключевую роль играет менеджер памяти, задающий регионы, назначающий им атрибуты (PAGE_READWRITE, PAGE_READONLY, PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE, PAGE_NOACCESS, PAGE_GUARD: их гораздо больше, чем можно было бы задать для сегмента памяти) и контролирующий доступ к этим регионам. Непонятно, на каком этапе может включаться в работу этот менеджер памяти? Поскольку процессор может встретить инструкцию: записать такие данные по такому адресу (даже, если этот адрес относится к региону, выделенному менеджером памяти с атрибутом, например, PAGE_READONLY) и ничего не мешает ему это выполнить. Таким образом, менеджер памяти остается в стороне не участвует в процессе...