для этого пакета IRP. Процедурой завершения каждого драйвера фильтрации рассматривается код ошибки и тег повторной обработки в пакете IRP. Если драйвер не распознает тег как собственный, он вызывает диспетчер ввода-вывода, который должен вызвать процедуру завершения следующего драйвера. Предположим, что один из драйверов распознал тег точки повторной обработки. После этого драйвер может использовать данные точки для повторной отправки пакета IRP, измененного в соответствии с данными, предоставленными точкой повторной обработки; например, перед повторной отправкой пакета IRP может быть изменен путь к файлу.
7. Файловая система NTFS завершает обработку повторно отправленного пакета IRP. Типичным примером может служить изменение пути и успешное завершение запроса. Диспетчер ввода-вывода завершает запрос на открытие файла, после чего через процедуры завершения может быть вызван каждый драйвер фильтрации файловой системы. Наконец обработка пакета IRP завершается, и приложение получает дескриптор файла.
Если ни один драйвер фильтрации не распознает тег точки повторной обработки, запрос на открытие файла или каталога завершается неудачно.
Одним приложениям требуются сведения о наличии точек повторной обработки, в то время как другим они совершенно не нужны. К последним, например, относятся приложения Microsoft Office, поэтому при открытии документа Word, PowerPoint или Excel функции точки повторной обработки, которая перенаправляет запрос на открытие на другой том, во внимание не принимаются. Тем не менее некоторым приложениям, которые рекурсивно просматривают дерево каталогов, требуются сведения о возможности создания зацикленных путей. Приложения могут аннулировать функции точек повторной обработки, передав соответствующие параметры (FILE_OPEN_REPARSE_POINT) 1 в запросах CreateFile, DeleteFile и RemoveDir. Именно таким образом можно создавать, удалять и модифицировать точки повторной обработки. Функция GetVolumelnf ormation возвращает флаг FILE_SUPPORTS_REPARSE_POINTS. Функции FindFirstFile и FindNextFile возвращают флаг FILE_ATTRIBUTE_ REPARSE_POINT для указания на наличие точки повторной обработки.
Все точки повторной обработки тома NTFS индексируются в файле, который называется $Index и находится в каталоге \$Extend. Таким образом, приложение может быстро обнаружить все точки повторной обработки, которые существуют на томе.
Следует подчеркнуть, что в этом разделе описываются точки повторной обработки, которые являются неотъемлемой частью NTFS. Хотя файловая система FAT не поддерживает точки повторной обработки, независимые производители программного обеспечения или компания Microsoft могут создать другую файловую систему, которая будет отличаться от NTFS и поддерживать точки повторной обработки. Это весьма нетривиальная задача, но стоит обратить внимание, что точки повторной обработки должны быть реализованы в трех областях.
Файловая система, например NTFS.
Подсистема ввода-вывода и набор функций Win32 API.
Утилиты и инструменты.
Очевидно, что Microsoft выполнила'необходимый объем работ во всех трех областях и высока вероятность, что новая файловая система (в случае ее появления) также будет поддерживать точки повторной обработки.
В разделах 10.2.10.1–10.2.10.4 рассматриваются конкретные сферы применения точек повторной обработки.
В Windows NT 4.0 для монтирования томов требовалось использование буквы диска. Это ограничивало количество томов (всего можно было монтировать до 26 томов), которые могли использоваться в системе. В Windows 2000 разрешено монтирование тома без использования буквы диска. Но существуют и ограничения:
том может монтироваться только на локальный каталог, т.е. том не может быть смонтирован на сетевой ресурс;
том может быть смонтирован только на пустой каталог;
пустой каталог должен размещаться в томе NTFS (на данный момент только NTFS поддерживает точки повторной обработки).
Приложения, которые получают доступ к каталогу, содержащему точку монтирования, не «замечают» ничего особенного, если только приложение специально не запрашивает информацию о каталоге.
Были добавлены и модифицированы API, которые предоставляют приложениям поддержку точек монтирования томов. Функция GetVolumelnformation с помощью флага показывает, поддерживает ли том точки монтирования. Функции FindFirstVolumeMountPoint и FindNextVolumeMountPoint используются для поиска точек монтирования томов. Функция FindVolumeMountPointClose применяется для освобождения ресурсов, задействованных функциями FindFirstVolumeMountPoint и FindNextVolumeMountPoint. И наконец, функция GetVolumeNameForMountPoint возвращает имя тома, в который преобразуется точка монтирования.