Модель и архитектура управляемых фильтров файловой системы

Иллюстрации

Показать все

Изобретение относится к области компьютерной техники, в частности к использованию драйверов фильтров, которые управляются для приема обратных вызовов для запросов на ввод/вывод, в получении которых драйверы фильтров зарегистрировали свою необходимость. Технический результат, заключающийся в повышении эффективности и оптимальном использовании ресурсов системы, достигается за счет того, что копии драйверов фильтров для каждого тома регистрируются администратором фильтров для предварительных обратных вызовов (для ввода/вывода к файловой системе) и заключительных обратных вызовов (для ввода/вывода от файловой системы), и идентифицируют, от каких запросов на ввод/вывод (например, создание, чтение, запись) они зарегистрированы для получения обратных вызовов. Администратор фильтров упорядочивает копии для обратных вызовов. При получении запроса на ввод/вывод администратор фильтров преобразует запрос на ввод/вывод в данные обратного вызова и вызывает "заинтересованные" фильтры в порядке обратных вызовов, при помощи чего копии фильтров могут обрабатывать данные ввода/вывода. После возвращения запроса от файловой системы фильтры, требующие заключительного обратного вызова, вызываются в обратном порядке. 4 н. и 90 з.п. ф-лы, 7 ил.

Реферат

ОБЛАСТЬ, К КОТОРОЙ ОТНОСИТСЯ ИЗОБРЕТЕНИЕ

Изобретение в целом относится к компьютерным системам, а более точно к файловым системам и фильтрам файловых систем.

ПРЕДШЕСТВУЮЩИЙ УРОВЕНЬ ТЕХНИКИ

В современных операционных системах, таких как операционная система Windows® XP фирмы Microsoft Corporation's с лежащими в их основе файловыми системами, такими как Windows® NTFS (файловая система Windows® NT), FAT, CDFS, файловая система перенаправления согласно протоколу SMB, или файловые системы WebDav между менеджером ввода/вывода, принимающим запросы пользователя на ввод/вывод, и драйвером файловой системы могут находиться один или более драйверов фильтров файловой системы. В общем случае драйверы фильтров ('фильтры') являются драйверами ядра, расширяющими нижележащую файловую систему, выполняя различные связанные с файлами вычислительные задачи, которые требуются пользователю, включая такие задачи, как прохождение ввода/вывода (запросов и данных) файловой системы через антивирусное программное обеспечение, средства предоставления квот файловой системы, репликаторы файлов и средства шифрования/дешифрования. Например, антивирусные продукты обеспечивают фильтр, следящий за вводом/выводом в файлы определенных типов и из них (.exe,.doc и т.п.), отыскивая сигнатуры вирусов, тогда как продукты репликации выполняют зеркальное резервирование файлов на системном уровне. Другие типы драйверов фильтров файловой системы предназначены для восстановления системы (производящие резервное копирование системных файлов непосредственно перед их изменением таким образом, что пользователь имеет возможность вернуться к начальному состоянию), обеспечения квотирования диска, резервного копирования открытых файлов, восстановления стертых файлов, шифрования файлов и т.д. Таким образом, при помощи установки ( инсталлирования) драйверов фильтров файловой системы пользователи компьютера могут выбирать особенности (средства) файловой системы, которые они желают или которые им необходимы, способом, позволяющим проводить обновления, замену, добавление, удаление компонентов без необходимости изменения действующей операционной системы или кода драйвера файловой системы.

Существующая модель фильтра файловой системы в современных операционных системах семейства Windows® (например, Windows® NT, Windows® 2000, Windows® XP, Windows®.NET Server 2003) используется модель наследуемого ввода/вывода, представляющая собой пакетно-ориентированный подход. С этой целью фильтры файловой системы загружаются в стек как обычные драйверы и подключаются к объектам устройства томов нижележащей файловой системы. Запросы пользователя на ввод/вывод преобразуются администратором ввода/вывода в пакеты запросов ввода/вывода (-ПЗВВ, IRP), которые посылаются в стек драйверов и обрабатываются верхним драйвером, который может выполнить их, послать их ниже к файловой системе, вызвав другой драйвер, который вызывает следующий нижележащий драйвер и т.д. В общем случае каждый драйвер выполняет обработку ПЗВВ, для выполнения которой он предназначен, и затем в явном виде передает ПЗВВ ниже к следующему нижележащему драйверу (или файловой системе, если это нижний уровень), или выполняет (или не выполняет) ПЗВВ и передает его вверх по стеку вышележащему драйверу (или администратору ввода/вывода, если это верхний уровень).

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

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

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

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

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

РАСКРЫТИЕ ИЗОБРЕТЕНИЯ

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

В общем случае, (программа -) администратор фильтров транслирует (преобразует) ввод/вывод, либо ПЗВВ, либо быстрый ввод/вывод, либо обратный вызов фильтра ФС (файловой системы) и т.п. в унифицированную структуру, называемую ''данные обратного вызова''. С этой целью администратор фильтров может быть помещен в стек существующих драйверов фильтров, как если бы он был традиционным драйвером фильтра, таким образом, что он может принимать и обрабатывать ПЗВВ. Затем администратор фильтров может просматривать список соответствующим образом зарегистрированных драйверов фильтров для вызова зарегистрированных вызовов для осуществления ввода/вывода.

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

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

Для эффективного отслеживания того, какие драйверы фильтров зарегистрировались для каких типов обратных вызовов и таким образом эффективно производить обратные вызовы требуемых драйверов в надлежащем порядке, администратор фильтров для каждого тома поддерживает упорядоченные списки, причем каждый список индексируется по типу операции, для которой фильтры зарегистрировали свой интерес в получении предварительных обратных вызовов и/или заключительных обратных вызовов. Администратор фильтров использует такой список для обратного вызова фильтров в требуемом порядке, и каждый фильтр возвращает статус (состояние). Если операции прошли успешно, то после последнего предварительного обратного вызова менеджер фильтров производит обратное преобразование данных обратного вызова в ПЗВВ и посылает ПЗВВ файловой системе.

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

Администратор фильтров также обеспечивает богатый набор API (программный интерфейс с приложением), которые обеспечивают функции, обычно требуемые фильтрам. Например, некоторым фильтрам требуется выполнение своего собственного ввода/вывода, поэтому обеспечиваются различные функции, которые упрощают такие операции. Также различные функции обеспечивают эффективную поддержку контекста копий, томов, файлов, дескрипторов потоков или потоков, отслеживая данные контекста для каждого фильтра относительно требуемого объекта. Настоящее изобретение обеспечивает поддержку извещения посредством набора обратных вызовов, которые устанавливают извещение для логического объекта, и упрощает ассоциацию контекста данного логического объекта с каждым фильтром. Контексты могут быть установлены и/или переустановлены произвольное количество раз. Другие функции допускают обмен между драйверами фильтров режима ядра и дополнительными службами и программами пользовательского режима, тогда как другие функции обеспечивают указанную поддержку, как это описано в патентной заявке США №10/187119, поданной 28 августа, 2002.

Другие преимущества будут очевидными из нижеследующего детального описания совместно с чертежами.

КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ

На фиг.1 приведена блок-схема, представляющая в общем виде компьютерную систему, в которой может быть реализовано настоящее изобретение.

На фиг.2 приведена блок-схема, представляющая в общем виде архитектуру, включающую в себя компоненты для управления вводом/выводом для фильтров согласно одному из аспектов настоящего изобретения.

На фиг.3 приведена блок-схема, представляющая в общем виде примеры управляемых фильтров согласно одному из аспектов настоящего изобретения.

На фиг.4 приведена блок-схема, представляющая в общем виде структуры данных, используемые администратором фильтров для выборочной передачи ввода/вывода к соответствующим образом зарегистрированным фильтрам согласно одному из аспектов настоящего изобретения.

На фиг.5 приведено представление стека узлов завершения для возвращаемых данных обратного вызова для зарегистрированных драйверов фильтров в операции заключительного обратного вызова согласно одному из аспектов настоящего изобретения.

На фиг.6 приведена блок-схема, представляющая дерево для эффективного определения, для каких копий имеются данные контекста согласно одному из аспектов настоящего изобретения.

На фиг.7 приведена блок-схема, представляющая возвращение данных контекста драйверу фильтра согласно одному из аспектов настоящего изобретения.

ПОДРОБНОЕ ОПИСАНИЕ

ИЛЛЮСТРАТИВНАЯ РАБОЧАЯ СРЕДА

На Фиг.1 показан пример подходящей среды 100 компьютерной системы, в которой может быть реализовано настоящее изобретение. Среда 100 компьютерной системы является только одним примером подходящей компьютерной среды и не предназначена для введения каких-либо ограничений как на объем, так и на функциональность данного изобретения. Также компьютерную среду 100 не следует интерпретировать как имеющую какую-либо зависимость или требования, относящиеся к любому компоненту, приведенному в иллюстративной рабочей среде 100 или их комбинации.

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

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

Со ссылкой на фиг.1 иллюстративная система для реализации настоящего изобретения включает в себя компьютерное устройство общего назначения в виде компьютера 110. Компоненты компьютера 110 могут включать в себя, но не ограничиваться ими, процессорное устройство 120, системную память 130 и системную шину 121, связывающую различные компоненты системы, в том числе и системную память с процессорным устройством 120. Системная шина 121 может быть шинной структурой любого типа, включая шину памяти или контроллер памяти, периферийную шину и локальную шину любой из многочисленных шинных архитектур. Для примера, но не с целью ограничения, такие архитектуры включают в себя шину архитектуры промышленного стандарта (ISA), шину микроканальной архитектуры (MCA), расширенную ISA (EISA) шину, локальную шину ассоциации стандартов видеоэлектроники (VESA) и шину соединений периферийных компонентов (PCI), также известную как шину Mezzanine.

Компьютер 110 обычно включает в себя ряд читаемых компьютером носителей данных. Читаемые компьютером носители данных могут быть любыми доступными носителями данных, к которым может получить доступ компьютер 110, и включают в себя как энергозависимые, так и энергонезависимые носители данных и как съемные, так и несъемные носители данных. Для примера, но не с целью ограничения, считываемые компьютером носители данных могут включать в себя компьютерную среду хранения данных и среду связи. Компьютерная среда хранения данных включает в себя как энергозависимые, так и энергонезависимые, и как съемные, так и несъемные средства хранения данных, реализованные с применением любого способа или технологии хранения информации, такой как считываемые компьютером инструкции, структуры данных, программные модули или другие данные. Компьютерная среда хранения данных включает в себя, но не ограничиваются ими ОЗУ, ПЗУ, EEPROM, флэш память или другую технологию памяти, CD-ROM, универсальные цифровые диски (DVD) или другие оптические средства хранения данных, магнитные кассеты, магнитные ленты, средства хранения данных на магнитных дисках или другие магнитные средства хранения данных или любые другие носители данных, которые могут быть использованы для хранения необходимой информации и к которым может получить доступ компьютер 110. Среда связи представляет считываемые компьютером инструкции, структуры данных, программные модули или другие данные в виде модулированного сигнала данных, такого как несущая или другой транспортный механизм, и включают в себя любую среду доставки информации. Термин "модулированный сигнал данных" означает сигнал, имеющий одну или более его характеристик, установленных или изменяемых таким образом, что при этом в сигнале кодируется информация. Для примера, но не с целью ограничения, среда связи включает в себя кабельные средства, такие как кабельная сеть или прямое кабельное соединение, беспроводные средства, такие как акустические, РЧ (радиочастотные), инфракрасные и другие беспроводные средства. К считываемым компьютером носителей данных также следует отнести любую комбинацию упомянутых выше носителей.

Системная память 130 включает в себя компьютерную среду хранения данных в виде энергозависимой и/или энергонезависимой памяти, такой как постоянное запоминающее устройство (ПЗУ) 131 и оперативное запоминающее устройство (ОЗУ) 132. Базовая система 133 ввода/вывода (BIOS), содержащая основные подпрограммы, участвующие в передаче информации между элементами в компьютере 110, например, во время запуска, обычно хранятся в ПЗУ 131. ОЗУ 132 обычно содержит данные и/или программные модули, которые являются непосредственно доступными и/или выполняются в настоящее время процессорным устройством 120. Для примера, но не с целью ограничения на Фиг.1 показаны операционная система 134, файловая система 135, прикладные программы 136, другие программные модули 137 и данные 138 программ. Компьютер 110 также может включать в себя другие сменные/несменные, энергозависимые/энергонезависимые компьютерные средства хранения данных. Исключительно в качестве примера на Фиг.1 показан привод 141 жесткого диска, считывающий и записывающий на несъемный, энергонезависимый магнитный носитель данных, привод 151 магнитного диска, считывающий и записывающий на съемный энергонезависимый магнитный диск 152 и привод 155 оптического диска, считывающий и записывающий на съемный энергонезависимый оптический диск 156, такой как CD-ROM или другой оптический носитель данных. Другие сменные/несменные, энергозависимые/энергонезависимые компьютерные средства хранения данных, которые могут применяться в иллюстративной рабочей среде, включают в себя, но не ограничиваются ими кассеты с магнитной лентой, карты флэш памяти, универсальные цифровые диски, цифровую видеоленту, твердотельное ОЗУ, твердотельное ПЗУ, и т.п. Привод 141 жесткого диска обычно связан с системной шиной 121 посредством интерфейса несъемной памяти, таким как интерфейс 140, а привод 151 магнитного диска и привод 155 оптического диска обычно связаны с системной шиной 121 посредством интерфейса съемной памяти, таким как интерфейс 150.

Приводы и ассоциированные с ними компьютерные среды хранения данных, обсуждаемые выше и иллюстрированные на фиг.1, обеспечивают в компьютере 110 хранение считываемых компьютером инструкций, структур данных, программных модулей и других данных. Например, на Фиг.1 привод жесткого диска изображен хранящим операционную систему 144, прикладные программы 145, другие программные модули 146 и данные 147 программ. Необходимо заметить, что эти компоненты те же самые или отличаются от операционной системы 134, прикладных программ 136, других программных модулей 137 и данных 138 программ. Операционная система 144, прикладные программы 145, другие программные модули 146 и данные 147 программ имеют в данном случае отличающиеся номера для иллюстрации того, что, по меньшей мере, они являются отдельными копиями. Пользователь может вводить команды и информацию в компьютер 110 через устройства ввода, такие как планшет (цифровое устройство ввода графической информации) 164, микрофон 163, клавиатуру 162 и указывающее устройство 167, обычно называемое мышью, трекболом или сенсорным планшетом. Эти и другие устройства ввода часто соединены с процессорным устройством 120 через пользовательский интерфейс 160 ввода, связанный с системной шиной, но могут быть подсоединены через другой интерфейс или шинные структуры, такие как параллельный порт, игровой порт или универсальную последовательную шину (USB). Монитор 191 или другое устройство отображения также подсоединен к системной шине 121 через интерфейс, такой как видеоинтерфейс 190. Монитор 191 может также быть интегрирован с сенсорным экраном или ему подобным. Необходимо заметить, что монитор и/или сенсорный экран может быть физически связан с корпусом, в который встроено компьютерное устройство 110, например, как в персональном компьютере планшетного типа. Дополнительно, компьютеры, такие как компьютерное устройство 110, могут также включать в себя другие периферийные устройства вывода, такие как громкоговорители 192 и принтер 196, которые могут быть подсоединены через интерфейс 194 периферийных устройств вывода или ему подобный.

Компьютер 110 может работать в сетевом окружении, используя логические соединения с одним или более удаленными компьютерами, таким как удаленный компьютер 180. Удаленный компьютер 180 может быть персональным компьютером, сервером, маршрутизатором, сетевым ПК, одноранговым узлом сети или другим обычным узлом сети и обычно включает в себя ряд элементов, описанных выше в связи с компьютером 110, или все указанные элементы, несмотря на то, что на фиг.1 изображено только запоминающее устройство 181. Изображенные на фиг.1 логические соединения включают в себя локальную сеть (ЛС) 171 и глобальную сеть (ГС) 173, но также могут включать в себя другие сети. Такие типы сетевого окружения являются обычными в офисах, промышленных компьютерных сетях, интрасетях, Интернете. Например, в настоящем изобретении компьютерная система 110 может включать в себя машину-источник, из которой пересылаются данные, и удаленный компьютер 180 может включать в себя машину-приемник. Необходимо заметить, что машина-источник и машина-приемник не обязательно должны быть соединены посредством сети или каких-либо других средств, напротив, данные могут пересылаться посредством носителей данных, на которые платформа-источник может производить запись и с которых платформа (или платформы)-приемник может производить считывание.

При использовании в локальной сетевой среде компьютер 110 подсоединяется к ЛС 171 через сетевой интерфейс или адаптер 170. При использовании в глобальной сетевой среде компьютер 110 обычно включает в себя модем 172 или другие средства для установления соединения через ГС 173, такую как Интернет. Модем 172, который может быть внутренним или внешним, может быть подсоединен к системной шине 121 через пользовательский интерфейс 160 ввода или другим подходящим способом. В сетевой среде программные модули, описанные в связи с компьютером 110, или часть их могут храниться в удаленном устройстве хранения данных. Для примера, но не с целью ограничения, на Фиг.1 показаны удаленные прикладные программы 185, размещенные в запоминающем устройстве 181. Очевидно, что показанные сетевые соединения являются иллюстративными и могут быть использованы другие средства организации соединения между компьютерами.

МОДЕЛЬ И АРХИТЕКТУРА УПРАВЛЯЕМОГО ФИЛЬТРА ФАЙЛОВОЙ СИСТЕМЫ

Настоящее изобретение в целом относится к модели и архитектуре фильтров файловой системы и предназначено для улучшения управления вводом/выводом файловой системой при помощи фильтров, включая упрощение взаимодействия между различными продуктами, имеющими отношение к файловой системе. Необходимо заметить, что в данном описании модель в целом описывается со ссылками на драйверы фильтров, работающие между администратором ввода/вывода и основной файловой системой, которая может быть либо локальной, либо удаленной файловой системой и не описывается со ссылками на другие драйверы, включая драйверы фильтров, работающих между файловой системой и драйвером или драйверами устройства хранения данных (таких как FtDisk или DMIO).

Как используется в настоящем описании, "традиционные" драйверы фильтров обрабатывают пакеты запросов ввода/вывода - ПЗВВ, (IRP) традиционным способом по сравнению с новой моделью, которая использует обратные вызовы к зарегистрированным драйверам фильтров, как описано ниже. Поскольку предполагается, что использование традиционных драйверов фильтров будет со временем прекращено, драйверы фильтров, соответствующие новой модели регистрации и обратного вызова, будут называться в настоящем описании просто "драйверы фильтров".

Один из основных аспектов новой модели фильтров направлен на устранение традиционного, сложного прохождения ввода/вывода от традиционного фильтра к традиционному фильтру через модель стека и заменяет эту модель моделью управляемого обратного вызова, в которой ПЗВВ, быстрые пути ввода/вывода, обратные вызовы администратора памяти и т.п. преобразуются администратором фильтров в обратные вызовы, предоставляющие фильтрам данные обратного вызова в определенном формате. Фильтры не вызывают другие фильтры и не передают управление непосредственно другим фильтрам, а производят необходимые манипуляции с данными обратного вызова и возвращают статус (состояние) в виде ответа на обратный вызов, как это описано ниже. Поскольку фильтрам больше не требуется работать с ПЗВВ и т.п., большая часть сложной обработки ввода/вывода удаляется из фильтров и встраивается в один администратор фильтров, устраняя многие проблемы, вызываемые различными фильтрами. Например, ПЗВВ часто содержат неявную, сложную информацию, с обработкой которой традиционные фильтры обычно имеют трудности; настоящее изобретение устраняет эту проблему, вынуждая обрабатывать неявную информацию в администраторе фильтров и пропуская к фильтрам только явный контекст. Модель обратного вызова имеет дополнительное преимущество, решая проблему переполнения стека, и локализует вызовы, связанные с цепочечной отправкой ПЗВВ.

На Фиг.2 представлен иллюстративный вариант 200 реализации новой модели. Одним из преимуществ варианта реализации, представленного на Фиг.2, является то, что для применения новой модели не требуется каким-либо образом модифицировать существующие приложения, компоненты операционной системы и файловые системы. Например, в операционных системах Windows® приложение 202 будет продолжать совершать вызовы файловой системы (например, посредством вызовов функций/методов) через уровень 204 API к администратору 206 ввода/вывода. Как известно, администратор 206 ввода/вывода генерирует ПЗВВ или другой тип ввода/вывода и посылает ввод/вывод к вершине (традиционного) стека 208 драйверов фильтров. Как описано ниже, один из компонентов в стеке 208 является администратором 212 фильтров.

В общем случае администратор 212 фильтров преобразует ввод/вывод, т.е. один из ПЗВВ, быстрый ввод/вывод, обратный вызов фильтра ФС либо им подобные в унифицированные структуры, известные как данные обратного вызова. Подходящая структура данных обратного вызова описана ниже. Затем администратор 212 фильтров просматривает список зарегистрированных драйверов фильтров (например, пять таких драйверов 282А-282Е фильтров показаны на Фиг.2, хотя может быть и любое другое разумное количество драйверов), и для каждого драйвера фильтра может произвести зарегистрированную диспетчеризацию для операции ввода/вывода. Важно то, что в модели настоящего изобретения фильтры не принимают и/или не обрабатывают ПЗВВ, а вместо этого, по существу, инструктируют администратора 212 фильтров в том, что делать с запросом на ввод/вывод.

На Фиг.2 также показано, что традиционные драйверы 210 фильтров также будут поддерживаться в данном варианте осуществления, например, если поместить их на верх стека 210. Необходимо заметить, что возможно организовать их в каком-либо другом порядке относительно других компонентов стека. Например, поскольку традиционные драйверы фильтров приспособлены для обработки ПЗВВ, а не обратных вызовов, такие традиционные фильтры может «окружать» специальный управляющий код, генерирующий ПЗВВ из данных обратного вызова, для передачи в фильтры и приема от них (возможно модифицированного) ПЗВВ и преобразования его в ответ о состоянии. В этом случае традиционный фильтр может быть внедрен в модель обратного вызова и изолирован в ней. В любом случае традиционные фильтры могут быть использованы в новой модели.

Подводя итог рассмотрению варианта осуществления, показанного на Фиг.2, в новой модели используется администратор 212 фильтров файловой системы и помещается в стек 208 драйверов фильтров как традиционный драйвер фильтра таким образом, что он может принимать и обрабатывать ПЗВВ. Необходимо заметить, что это позволяет администратору фильтров упростить работу в существующей системе ввода/вывода, хотя очевидно, что может быть использована эквивалентная модель (например, без вышележащих традиционных фильтров), в которой обновленный администратор ввода/вывода передает данные ввода/вывода в администратор фильтров в виде, отличном от структуры данных ПЗВВ. Например, когда администратор ввода/вывода формирует ПЗВВ, драйвер фильтра генерирует структуру данных обратного вызова из ПЗВВ и, таким образом, может оказаться более эффективным, если администратор ввода/вывода будет непосредственно генерировать структуру данных обратного вызова. Необходимо заметить, что кое-что другое, чем ПЗВВ, уже используется в существующих системах для быстрого ввода/вывода, обратных вызовов менеджера памяти и т.п., основанные для повышения производительности на способе обратного вызова, а не на пакетном способе, для некоторых общих задач ввода/вывода, таких как чтение/запись/управление устройствами ввода/вывода. Дополнительно необходимо заметить, что в существующих системах быстрый ввод/вывод все еще проходит через стек (то есть является цепочечным) и таким образом отличается от модели согласно настоящему изобретению, основанной на обратном вызове. Для простоты, если не оговорено обратное, в настоящем описании будут использоваться главным образом примеры, основанные на ПЗВВ.

В одном из вариантов осуществления изобретения драйверы фильтров содержат объекты или им подобные структуры, которые при создании экземпляра объекта, обычно во время процедуры инициализации их драйвера, регистрируются при помощи механизма регистрации в администраторе 212 фильтров. Для большей эффективности драйверы фильтров обычно регистрируются только для запросов файловой системы, в обработке которых они заинтересованы. С этой целью, в качестве части процедуры регистрации, каждый драйвер фильтра извещает администратор фильтров о типах запросов ввода/вывода, в которых он заинтересован (например, создание, чтение, запись, закрытие и т.п.). Например, драйвер фильтра шифрования может зарегистрироваться для чтения и записи ПЗВВ и не регистрироваться для других, где данные не требуют шифрования или дешифрования. Аналогично, фильтр квоты может быть заинтересован только в операциях создания файлов и записи файлов. В результате данная модель является более эффективной, чем модель стека фильтров, так как драйверы фильтров видят только ввод/вывод, для которого они зарегистрированы.

Для того чтобы сделать возможным подключение к томам, модель согласно настоящему изобретению определяет концепцию "копии" драйвера фильтра (и также контекст тома, как описано ниже). Более точно, драйверы фильтров, которым требуется подключиться к тому, извещаются посредством сообщения об установке копии, когда монтируется новый том. Аналогичное извещение обеспечивается для томов, уже смонтированных перед загрузкой драйвера. Затем драйверы фильтров могут выбрать подключение к тому посредством регистрации, как описано ниже, и, если это так, объект-копия используется для представления копии подключения. Аналогично извещаются драйверы фильтров, когда том демонтируется, а именно, через уведомление об отключении копии. Настоящая модель также позволяет драйверам фильтров динамически отключаться от смонтированного тома.

Драйвер фильтра может быть ассоциирован с «высотой», которая указывает, где в последовательности обратных вызовов расположен этот драйвер, как это в общем виде описано в заявке на патент США №09/768098 озаглавленной "Method and System for Deterministic Ordering of Software Modules". Более того, как показано на фиг.3, драйверы фильтров могут подключаться к одному тому много раз, создавая копию для каждого подключения (хотя для того, чтобы делать это, каждая копия для одного и того же тома должна находиться на разной «высоте», либо по порядковому номеру, либо при помощи какого-либо механизма доминирования).

На фиг.3 показан пример фильтра, который имеет множество копий. На фиг.3 фильтр А, например фильтр "мониторинга активности файловой системы", контролирует файловый ввод/вывод и имеет две копии, фильтр А и фильтр А'. Таким образом, продукт мониторинга файловой активности имеет возможность наблюдать (через фильтр А) ввод/вывод входящий в промежуточный (например, антивирусный) фильтр В, и также наблюдать (через фильтр А') ввод/вывод проходящий в конечном итоге через промежуточный фильтр, на его пути к файловой системе. Например, продукт мониторинга файловой активности может включать в себя программу пользовательского режима (отдельно не показана), которой как фильтр А, так и фильтр А' посылают отчеты при помощи сообщений, как это описано ниже.

Таким образом, копии драйвера фильтра для каждого тома могут быть ассоциированными с «высотой», которая определяет местоположение каждой копии для данного тома. Высоты могут быть заранее заданы для данной копии фильтра, например, как описано в заявке на патент США №09/768098, и/или могут быть использованы механизм флагов или им подобный (описанный ниже) для определения подходящей высоты для фильтра. Например, антивирусному фильтру не должно быть разрешено находиться между фильтром шифрования и основной файловой системой, так как ему необходимо отслеживать данные как они есть, до шифрования. Флаги могут указывать, исследуют ли фильтры данные (например, антивирусный фильтр), модифицируют ли они данные (например, фильтр шифрования) и т.д., исходя из чего может быть определена «высота». В этом случае порядок обратных вызовов основывается не на порядке загрузки драйверов, а на неком заранее определенном логическом базисе.

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

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