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 的后续调用相匹配。 否则,由于未完成的引用计数,系统无法释放或删除这些驱动程序对象。

微筛选器应调用 FltEnumerateFilterInformationFltEnumerateFilters ,而不是 IoEnumerateRegisteredFiltersList

要求

要求
最低受支持的客户端 Windows 2000 SP4 更新汇总;Windows Server 2003 SP1
目标平台 通用
标头 ntifs.h (包括 Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另请参阅

FltEnumerateFilterInformation

FltEnumerateFilters

IoRegisterFsRegistrationChange

ObDereferenceObject