Подсистема ввода-вывода вызывает каждый драйвер фильтрации (по одному разу), который зарегистрировал процедуру завершения для этого пакета 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 или в комплекте самой операционной системы.
Читать дальше