Функция IoEnumerateRegisteredFiltersList (ntifs.h)

Подпрограмма IoEnumerateRegisteredFiltersList перечисляет драйверы фильтров файловой системы, зарегистрированные в системе.

Синтаксис

NTSTATUS IoEnumerateRegisteredFiltersList(
  [out] PDRIVER_OBJECT *DriverObjectList,
  [in]  ULONG          DriverObjectListSize,
  [out] PULONG         ActualNumberDriverObjects
);

Параметры

[out] DriverObjectList

Указатель на массив, выделенный вызывающим объектом, который получает указатели на объект драйвера. Этот параметр является необязательным и может иметь значение NULL. (См. следующий раздел примечаний.)

[in] DriverObjectListSize

Размер массива DriverObjectList в байтах. Может равняться нулю. (См. следующий раздел примечаний.)

[out] ActualNumberDriverObjects

Фактическое количество найденных объектов драйвера. Обратите внимание, что если массив в Файле DriverObjectList слишком мал, количество указателей на объекты драйвера, которые копируются в массив, будет меньше , чем ActualNumberDriverObjects.

Возвращаемое значение

IoEnumerateRegisteredFiltersList может возвращать одно из следующих элементов:

Код возврата Описание
STATUS_SUCCESS Вызов IoEnumerateRegisteredFiltersList выполнен успешно.
STATUS_BUFFER_TOO_SMALL Массив в DriverObjectList слишком мал для хранения всего списка объектов драйвера. В этом случае IoEnumerateRegisteredFiltersList копирует в массив как можно больше указателей на объекты драйвера.

Комментарии

Драйвер фильтра файловой системы вызывает IoEnumerateRegisteredFiltersList , чтобы получить массив указателей на объекты драйвера для всех драйверов фильтров файловой системы, которые вызвали IoRegisterFsRegistrationChange.

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

IoEnumerateRegisteredFiltersList перечисляет только устаревшие драйверы фильтров; он не перечисляет минифильтры. Чтобы перечислить как минифильтры, так и устаревшие фильтры или только минифильтры, вызовите FltEnumerateFilterInformation.

Драйвер фильтра обычно вызывает IoEnumerateRegisteredFiltersList дважды: один раз, чтобы получить количество объектов драйвера в списке, и один раз, чтобы получить сам список объектов драйвера. В первом вызове вызывающий объект должен задать для параметра DriverObjectListзначение NULL , а для параметра DriverObjectListSize — нулевое значение. Во втором вызове DriverObjectList должен содержать указатель на массив указателей соответствующего размера, а DriverObjectListSize — размер этого массива в байтах.

IoEnumerateRegisteredFiltersList увеличивает количество ссылок на каждый объект драйвера в списке, на который указывает DriverObjectList. Таким образом, каждый успешный вызов IoEnumerateRegisteredFiltersList должен соответствовать последующему вызову ObDereferenceObject для каждого объекта драйвера в списке. В этом случае система не может освободить или удалить эти объекты драйвера из-за неоплаченного количества ссылок.

Минифильтры должны вызывать FltEnumerateFilterInformation или FltEnumerateFilters вместо IoEnumerateRegisteredFiltersList.

Требования

Требование Значение
Минимальная версия клиента Накопительный пакет обновления для Windows 2000 с пакетом обновления 4 (SP4); Windows Server 2003 с пакетом обновления 1 (SP1)
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

См. также раздел

FltEnumerateFilterInformation

FltEnumerateFilters

IoRegisterFsRegistrationChange

ObDereferenceObject