Файловая система, например NTFS.
Подсистема ввода-вывода и Win32 API.
Утилиты и инструменты.
Компания Microsoft провела необходимую работу во всех трех областях; таким образом, новая файловая система вполне может содержать точки повторной обработки.
Точки повторной обработки – это объект каталога или файла NTFS. Приложение может создавать их, управлять ими и удалять их с помощью функций Win32 API в целом и функций CreateFile, ReadFile и WriteFile в частности. Набор функций Win32 API предоставляет приложению возможность создания определенных пользователем атрибутов для файлов и каталогов. Точки повторной обработки можно воспринимать как определеннее пользователем атрибуты, которые обрабатываются особым образом. Это подразумевает обеспечение уникальности некоторых фрагментов объекта атрибута и обработку в подсистеме ввода-вывода. Независимый поставщик программного обеспечения должен создать:
Рис. 6.11. Тег точки повторной обработки
ш утилиты пользовательского режима, позволяющие создавать и удалять точки повторной обработки, а также управлять ими;
драйвер фильтрации файловой системы, который реализует функции, относящиеся к точкам повторной обработки.
Точки повторной обработки состоят из компонентов, описанных ниже.
Уникальный тег размером 32 бит, назначаемый Microsoft. Независимые поставщики программного обеспечения могут запросить назначение уникального тега. Тег точки повторной обработки обладает хорошо определенной структурой (рис. 6.11).
Флаг М указывает, предназначен ли тег для драйвера устройства Microsoft.
Флаг L указывает, должен ли драйвер использовать большие временные задержки при получении первого байта данных. Примером служит система HSM, в которой получение данных из удаленного источника связано с длительными задержками.
Флаг N указывает, является ли файл или каталог псевдонимом другого файла или каталога.
Зарезервированные флаги.
Фактическое значение 16-разрядного тега.
Двоичный объект данных размером 16 Кбайт. Файловая система NTFS делает этот объект доступным драйверу устройства стороннего разработчика в качестве элемента операции ввода-вывода, проводимой с точкой повторной обработки.
Рис. 6.12. Архитектура точек повторной обработки
На рис. С. 12 показана последовательность операций и реализация точек повторной обработки. Предположим, у пользователя есть необходимые права для выполнения запрошенной операции. Чтобы не усложнять рис. 6.12, на нем представлен только один драйвер фильтрации файловой системы.
Далее приведена последовательность действий для реализации функций точек повторной обработки, которые показаны на рис. 6.12.
С помощью подсистемы Win32 приложение запрашивает открытие файла.
После определенных проверок подсистема Win32 направляет запрос выполняемому модулю NT.
Диспетчер ввода-вывода Windows NT создает пакет запроса ввода-вывода (IRP) с запросом на открытие (IRP_MJ_OPEN). Обычно этот запрос переходит драйверу NTFS. Так как в процессе участвует драйвер фильтрации, например драйве]) фильтрации точки повторной обработки, диспетчер ввода-вывода отправляет запрос драйверу фильтрации, предоставляя ему возможность предварительной обработки пакета IRP до того, как пакет попадет на обработку драйверу NTFS.
Драйвер фильтрации точки повторной обработки указывает процедуру завершения в своем фрагменте пакета IRP и отправляет пакет драйверу NTFS.
Пакет IRP достигает файловой системы. Она принимает запрос IRP_MJ_ OPEN, находит файл или каталог и отмечает тег точки повторной обработки, который связан с этим каталогом или файлом. Файловая система NTFS размещает тег точки повторной обработки и данные в пакете IRP и неудачно завершает обработку пакета IRP с возвратом специального кода ошибки.
Подсистема ввода-вывода вызывает каждый драйвер фильтрации (по одному разу), который зарегистрировал процедуру завершения для этого пакета IRP. Каждая процедура завершения отмечает код ошибки; если это специальный код ошибки точки повторной обработки, то процедура завершения драйвера проверяет тег точки повторной обработки, сохраненный в пакете IRP. Если драйвер не распознает тег как собственный, он вызывает диспетчер ввода-вывода для вызова следующей процедуры завершения. Предположим, что один из драйверов распознал тег повторной обработки в качестве собственного. Далее драйвер может использовать данные из пакета IRP для повторной передачи пакета IRP в обработку, внеся изменения на основе данных точки повторной обработки; например, перед повторной отправкой меняется имя файла.
Файловая система NTFS завершает повторную операцию IRP. Типичным примером может быть изменение пути и успешное завершение обработки запроса. Диспетчер ввода-вывода завершает обработку запроса открытия; после этого каждый драйвер фильтрации файловой системы еще раз вызывается через процедуру завершения. Драйвер отмечает, что запрос на открытие завершился успешно, и выполняет необходимую последовательность действий. Наконец обработка пакета IRP завершается, и приложение получает управление для обработки файла.
Если ни один из драйверов фильтрации не распознал тег повторной обработки, запрос на открытие файла или каталога завершается неудачно.
Некоторым приложениям требуются точки повторной обработки; в то время как другие приложения совершенно в них не нуждаются. Приложению Microsoft Office, открывающему документ Word, PowerPoint или Excel, могут не понадобиться функции точки повторной обработки, перенаправляющей запрос на другой том. Однако некоторые приложения, рекурсивно обрабатывающие дерево каталогов, должны «знать» о возможности создания цикличных путей.
Приложения могут подавлять функции точек повторной обработки. Для этого запросам CreateFile, DeleteFile и RemoveDir необходимо передать параметр FILE_0PEN_REPARSE_P0INT. Вызов функции GetVolumelnformation возвращает флаг FILE_SUPPORTS_REPARSE_POINTS. Вызовы GetFileAttributes, FindFirstFile и FindNextFile возвращают флаг FILE_ATTRIBUTE_REPARSE_
POINT для индикации наличия точки повторной обработки. Точки повторной обработки создаются с помощью параметра FSCTL_SET_REPARSE_POINT функции DeviceloControl.
Операционная система Windows 2000 позволяет приложениям перечислять все точки повторной обработки и/или точки монтирования, расположенные в пределах тома. Для этого NTFS хранит информацию о точках повторной обработки (включая точки монтирования) в файле $Extend$Reparse. Все точки повторной обработки на томе NTFS индексируются в файле $Index, который находится в каталоге $Extend. Таким образом, приложение может быстро индексировать все эти точки.
6.5.22.1 Точки монтирования томов
Операционная система Windows NT 4.0 для монтирования тома или раздела требовала использования буквы диска. Это ограничение не позволяло операционной системе иметь больше 26 томов. Операционная система Windows 2000 позволяет монтировать том без буквы диска. Однако существуют некоторые ограничения:
том может быть смонтирован только на локальный каталог; другими словами, том нельзя смонтировать на каталог сетевого ресурса;
s том может быть смонтирован только на пустой каталог;
пустой каталог должен располагаться в разделе NTFS (поскольку только NTFS поддерживает точки повторной обработки).
Приложения, получающие доступ в каталог, который содержит точку монтирования, не воспринимают особенностей каталога, если приложение специально не запросит необходимую информацию.
В состав пакета Windows SDK включены программные интерфейсы приложений, которые поддерживают добавление и изменение точек монтирования томов. Некоторые функции перечислены ниже.
GetVolumelnformation может использоваться для получения информации о томе, включая индикацию поддержки точек монтирования.
ш FindFirstVolumeMountPoint и FindNextVolumeMountPoint используются для поиска точек монтирования томов.
FindVolumeMountPointClose освобождает ресурсы, полученные функциями FindFirstVolumeMountPoint и FindNextVolumeMountPoint.
GetVolumeNameForMountPoint возвращает соответствующее имя тома, в которое преобразуется имя точки монтирования.
6.5.22.2 Точки соединения каталогов
Точки соединения каталогов связаны с точками монтирования томов. Разница между ними заключается в том, что точка монтирования «превращает» каталог в новый том, а точка соединения каталогов превращает каталог в другой каталог, который расположен на том же локальном томе, что и точка соединения каталогов. Точки соединения каталогов могут создаваться с помощью утилиты linkd. exe или утилиты junction. ехе, которая поставляется в наборе Resource Kit для Windows 2000 или в комплекте самой операционной системы.