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