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 (include Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另请参阅

FltEnumerateFilterInformation

FltEnumerateFilters

IoRegisterFsRegistrationChange

ObDereferenceObject