Порядок загрузки фильтра файловой системы
Операционная система Windows загружает драйверы фильтров файловой системы на основе следующих компонентов:
- Начальный тип драйвера, где каждый тип запуска представляет этапы загрузки системы.
- Группы заказов загрузки для драйверов фильтров файловой системы, загруженных при запуске системы. Драйверы минифильтра нуждаются в концепции групп заказов загрузки для взаимодействия с устаревшими драйверами фильтров файловой системы. Драйвер ninifilter можно загрузить в любое время.
Необходимо понять типы запуска драйверов и группы заказов загрузки, прежде чем изучать, когда и как загружаются драйверы фильтров файловой системы во время последовательности загрузки системы.
Типы запуска драйвера
Тип запуска драйвера в режиме ядра указывает, должен ли драйвер загружаться во время или после запуска системы. Существует пять возможных типов запуска:
Тип запуска | Description |
---|---|
SERVICE_BOOT_START (0x00000000) | Указывает драйвер, запущенный загрузчиком операционной системы (ОС). Драйверы фильтров файловой системы обычно используют этот тип запуска или SERVICE_DEMAND_START. Устаревшие фильтры файловой системы должны использовать этот начальный тип. Дополнительные сведения см. в статьях о группах заказов на загрузку фильтра файловой системы. |
SERVICE_SYSTEM_START (0x00000001) | Указывает драйвер, запущенный во время инициализации ОС. Этот тип запуска используется распознаватель файловой системы. За исключением файловых систем, перечисленных в "SERVICE_DISABLED", файловых системах (включая компоненты сетевой файловой системы) обычно используется этот тип запуска или SERVICE_DEMAND_START. Этот тип запуска также используется драйверами устройств для устройств PnP, которые перечисляются во время инициализации системы, но не требуются для загрузки системы. |
SERVICE_AUTO_START (0x00000002) | Указывает драйвер, запущенный диспетчером управления службами во время запуска системы. Редко используется. |
SERVICE_DEMAND_START (0x00000003) | Указывает драйвер, запущенный по запросу, либо диспетчером PnP (для драйверов устройств), либо диспетчером управления службами (для файловых систем и драйверов фильтров файловой системы). |
SERVICE_DISABLED (0x00000004) | Указывает драйвер, который не запущен загрузчиком ОС, диспетчером управления службами или диспетчером PnP. Используется файловыми системами, загруженными распознавателями файловой системы (за исключением случаев, когда они являются загрузочной файловой системой) или другой файловой системой для EFS. Такие файловые системы включают CDFS, EFS, FastFat, NTFS и UDFS. Также используется для временного отключения драйвера во время отладки. |
Все драйверы, указывающие тип запуска SERVICE_BOOT_START, загружаются перед драйверами с типом запуска SERVICE_SYSTEM_START или SERVICE_AUTO_START. В каждой категории начального типа группа заказов загрузки определяет, когда будут загружены драйверы фильтров файловой системы (и устаревшие драйверы фильтров).
Указание типа запуска
Модуль записи драйверов может указать начальный тип драйвера во время установки в любом из следующих способов:
Указав нужный тип запуска для записи StartType в разделе service-install-section, на который ссылается директива AddService в INF-файле драйвера. Этот метод описан в разделе ServiceInstall создания INF-файла для драйвера фильтра.
Передав нужный тип запуска для параметра dwStartType при вызове CreateService или ChangeServiceConfig из программы установки в пользовательском режиме. Этот метод описан в справочных записях для CreateService и ChangeServiceConfig в документации по пакету SDK для Microsoft Windows.
Группы заказов на загрузку драйвера
В SERVICE_BOOT_START и SERVICE_SYSTEM_START типах запуска каждая группа заказов драйвера указывает относительный порядок, в котором драйверы.
Драйверы, типы запуска которых SERVICE_BOOT_START называются драйверами загрузки (или начальной загрузки). Фильтры, которые являются драйверами загрузки, обычно относятся к одной из групп заказов на загрузку FSFilter. Эти группы заказов загрузки подробно описаны в группах заказов загрузки для драйверов фильтров файловой системы.
Драйвер, тип запуска которого SERVICE_SYSTEM_START также загружается в порядке групп заказов загрузки, к которым они относятся. Однако драйвер system-start не загружается до тех пор, пока все драйверы загрузки не загружаются.
Группы заказов загрузки игнорируются для драйверов, начальный тип которых SERVICE_AUTO_START, SERVICE_DEMAND_START или SERVICE_DISABLED.
Полный, упорядоченный список групп заказов нагрузки можно найти в подразделе ServiceGroupOrder раздела реестра HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control.
Для SERVICE_BOOT_START и SERVICE_SYSTEM_START драйверов используется то же упорядочение групп нагрузки. Однако все драйверы SERVICE_BOOT_START загружаются и запускаются до загрузки всех SERVICE_SYSTEM_START драйверов.
Указание группы заказов на загрузку
Модуль записи драйверов может указать группу заказов нагрузки для драйвера во время установки в любом из следующих способов:
Указав нужную группу заказов загрузки для записи LoadOrderGroup в разделе service-install-section, на который ссылается директива AddService в INF-файле драйвера. Этот метод описан в разделе ServiceInstall о создании INF-файла для драйвера фильтра.
Передав нужный тип запуска для параметра lpLoadOrderGroup при вызове CreateService или ChangeServiceConfig из программы установки в режиме пользователя. Этот метод описан в справочных записях для CreateService и ChangeServiceConfig в документации по пакету SDK для Microsoft Windows.
Дополнительные сведения о заказах на загрузку драйверов и группах заказов загрузки см. в разделе "Указание порядка загрузки драйвера".
Правила загрузки драйвера фильтра
Следующие правила о типах запуска и группах заказов загрузки определяют, когда драйвер фильтра будет загружен:
Драйвер фильтра, указывающий конкретный тип запуска и группу заказов загрузки, загружается одновременно со всеми другими драйверами фильтров в этой группе начального типа и группы заказов загрузки.
В каждой группе заказов загрузки минифильтр и устаревшие драйверы фильтров обычно загружаются в случайном порядке. Этот случай обычно приводит к загрузке драйверов в зависимости от порядка установки драйвера.
Если драйвер минифильтра или устаревшего фильтра не указывает группу заказов нагрузки, она загружается после того, как все остальные драйверы одного и того же типа запуска указывают группу заказов нагрузки.