Инициализация драйвера фильтра

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

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

После загрузки драйвера фильтра система вызывает подпрограмму DriverEntry драйвера.

Система передает два аргумента в DriverEntry:

  • Указатель на объект драйвера, созданный системой ввода-вывода.

  • Указатель на путь реестра, указывающий, где хранятся параметры, относящиеся к драйверу.

DriverEntry возвращает STATUS_SUCCESS или его эквивалентную NDIS_STATUS_SUCCESS, если драйвер успешно зарегистрирован в качестве драйвера фильтра NDIS. Если DriverEntry не удается выполнить инициализацию путем распространения состояния ошибки, возвращенного функцией ндискскскс или подпрограммой поддержки режима ядра, драйвер не будет загружен. DriverEntry должен выполняться синхронно; то есть он не может возвращать STATUS_PENDING или его эквивалентную NDIS_STATUS_PENDING.

Драйвер фильтра передает объект Driver в функцию ндисфрегистерфилтердривер при регистрации в NDIS в качестве драйвера фильтра. Драйвер может использовать путь реестра для получения сведений о конфигурации. Дополнительные сведения о том, как получить доступ к сведениям о конфигурации драйвера фильтра, см. в разделе доступ к сведениям о конфигурации для драйвера фильтра.

Драйвер фильтра вызывает ндисфрегистерфилтердривер из своей подпрограммы DriverEntry . Драйверы фильтра экспорт набора функций филтеркскскс путем передачи структуры NDIS_FILTER_DRIVER_CHARACTERISTICS в ндисфрегистерфилтердривер в параметре филтерчарактеристикс .

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

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

Структура NDIS_FILTER_DRIVER_CHARACTERISTICS задает точки входа для этих обязательных функций филтеркскскс :

филтераттач

филтердетач

филтеррестарт

филтерпаусе

Структура NDIS_FILTER_DRIVER_CHARACTERISTICS указывает точки входа для этих необязательных элементов, и их нельзя изменить во время выполнения, филтеркскскс функции:

филтерсетоптионс

филтерсетмодулеоптионс

филтероидрекуест

филтероидрекуесткомплете

филтерстатус

филтернетпнпевент

филтердевицепнпевентнотифи

филтерканцелсенднетбуфферлистс

Структура NDIS_FILTER_DRIVER_CHARACTERISTICS задает точки входа по умолчанию для этих необязательных и изменяемых во время выполнения функций филтеркскскс :

филтерсенднетбуфферлистс

филтерсенднетбуфферлистскомплете

филтерретурннетбуфферлистс

филтеррецеивенетбуфферлистс

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

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

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

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

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