I/O 目标简介

函数驱动程序、筛选器驱动程序或微型端口驱动程序收到 I/O 请求时,驱动程序可能能够自行处理请求,或者可能需要其他驱动程序的帮助。 如果驱动程序需要帮助,它可以将请求转发到另一个驱动程序,也可以创建一个或多个新请求并将其发送到另一个驱动程序。

在 Kernel-Mode驱动程序框架中, I/O 目标表示作为 I/O 请求目标的设备对象。 函数、筛选器或微型端口驱动程序可以使用 I/O 目标将 I/O 请求发送到另一个驱动程序。 这些驱动程序通常会将其 I/O 请求发送到驱动程序堆栈中下一个较低的驱动程序。 因此,每个基于框架的函数、筛选器和微型端口驱动程序都有每个设备的本地 I/O 目标,即设备的下一个较低驱动程序。

有时,驱动程序必须将 I/O 请求发送到其他目标-不同驱动程序堆栈的顶部,或者发送驱动程序堆栈中的某些其他驱动程序(很少)。 因此,框架还提供远程 I/O 目标,其中包括除本地 I/O 目标之外的所有 I/O 目标。

每个 I/O 目标都由 I/O 目标对象表示。 每个 I/O 目标对象主要是一个队列,用于控制何时将请求传递到目标设备对象。 当驱动程序向 I/O 目标发送请求时,框架将请求存储在队列中,直到它可以将请求传送给目标设备对象。

该框架支持常规 I/O 目标和专用 I/O 目标

  • 所有函数、 筛选器和微型端口驱动程序都可以使用常规 I/O 目标,但它们不支持任何特定于设备的特殊数据格式。

  • 专用 I/O 目标使函数、筛选器和微型端口驱动程序可以轻松发送需要特定于目标的特殊数据格式的 I/O 请求。 目前,该框架支持以下专用 I/O 目标:

如果框架提供支持设备数据格式的专用 I/O 目标,则驱动程序应该使用专用 I/O 目标。 否则,驱动程序应使用常规 I/O 目标。