请求所有权

当 I/O 管理器将 I/O 请求发送到基于框架的驱动程序时,框架会截获该请求并创建框架请求对象。 框架“拥有”请求对象,因为只有框架可以访问请求并对该对象执行操作。

框架创建请求对象后,会将该对象置于驱动程序的 I/O 队列之一中。 框架继续拥有请求对象,直到它从队列中删除请求并将其传递给驱动程序。

驱动程序 收到 请求对象后,它拥有该请求。 驱动程序可以通过句柄访问请求对象,并对该对象执行操作。 虽然驱动程序拥有请求对象,但它可以 重新排队完成取消转发 请求,之后它不再拥有请求对象,并且无法访问它。

当请求对象的所有权在驱动程序和框架之间传递时,对象句柄的值不会更改。 例如,如果驱动程序从 I/O 队列接收请求,将其重新排队到其他队列,然后再次接收请求,则句柄的值不会更改。 同样,如果驱动程序将请求转发到 I/O 目标,然后收到 I/O 目标已完成请求的通知,则驱动程序的通知回调函数将接收驱动程序提供给 I/O 目标的相同句柄值。