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 SP4 更新汇总;Windows Server 2003 SP1 |
目标平台 | 通用 |
标头 | ntifs.h (包括 Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |