筛选器驱动程序的控制设备对象

注意

为了获得最佳可靠性和性能,请使用支持筛选器管理器的 文件系统微筛选器驱动程序 ,而不是旧的文件系统筛选器驱动程序。 若要将旧驱动程序移植到微筛选器驱动程序,请参阅 移植旧版筛选器驱动程序指南

创建和使用命名控制设备对象需要文件系统, (CDO) 。 与文件系统不同,旧文件系统筛选器驱动程序不需要具有 CDO。 如果存在,则此(可选)命名的 CDO 表示系统的筛选器驱动程序。 其角色是接收来自用户模式应用程序的 I/O 请求, (或不太常见的是另一个内核模式驱动程序) ,并对其进行适当处理。

大多数文件系统筛选器驱动程序创建并使用 CDO。 但是,对 CDO 上的 I/O 请求的支持是可选的。 若要提供此支持,当筛选器驱动程序调用 IoCreateDevice 创建 CDO 时,它必须提供对象的设备名称。 然后,用户模式应用程序可以通过调用 CreateFile 来获取命名 CDO 的句柄,并提供设备名称的用户模式版本。

例如,请考虑假设的“MyLegacyFilter”内核模式驱动程序。 此驱动程序可以使用以下名称创建 CDO:

\Device\MyLegacyFilter

并调用 IoCreateSymbolicLink 将此名称链接到等效的用户模式可见名称。 完成此命名是为了 MyLegacyFilter 的用户模式应用程序可以通过提供名称来打开内核模式驱动程序的 CDO 的句柄:

\\.\MyLegacyFilter

调用 CreateFile 时。

发送到筛选器驱动程序的控制设备对象的 I/O 请求的类型

文件系统筛选器驱动程序无需支持控制设备对象上的任何 I/O 操作 (CDO) 。 但是,大多数筛选器允许将以下类型的 I/O 请求发送到筛选器的 CDO:

与文件系统筛选器驱动程序创建的所有其他设备对象不同,CDO 不会附加到驱动程序堆栈。 筛选器驱动程序的 CDO 上方或下方未附加任何设备对象。 因此,对于它收到的任何 I/O 请求,CDO 可以安全地假定它是唯一的预期接收方。 对于筛选器设备对象或文件系统 CDO,情况并非如此。 因此,CDO 最终必须完成它收到的每个 IRP。 对于快速 I/O 请求,它必须返回 TRUE 或 FALSE。