ERESOURCE 结构和例程

本文介绍 ERESOURCE 结构和针对它的系统提供的例程。 可以使用 ERESOURCE 结构在驱动程序中实现读/写锁定。

ERESOURCE 结构

ERESOURCE 结构用于管理对共享资源的访问。 它提供了一种机制,用于同步对可在多个线程之间共享的资源的访问。

ERESOURCE 结构本质上是不透明的,也就是说,它的成员是供系统使用而保留的。

ERESOURCE 的存储必须从非分页池中分配。

ERESOURCE 例程

系统提供用于获取和释放 ERESOURCE 结构的例程,并检查其当前状态。

获取和释放 ERESOURCE 数据结构

驱动程序可以使用 ERESOURCE 结构来实现 独占/共享同步。 独占/共享同步的工作原理如下:

  • 任意数量的线程都可以以共享形式获取 ERESOURCE。

  • 只有一个线程可以独占获取 ERESOURCE。 仅当没有线程已经以共享方式获取时,才能独占获取 ERESOURCE。

当前无法获取 ERESOURCE 的线程可以选择处于等待状态,直到可以获取 ERESOURCE。 系统维护两个正在等待 ERESOURCE 的线程列表: 独占服务员 列表和 共享服务员列表。

专用/共享同步的典型用途是实现读/写锁。 读/写锁允许多个线程执行读取操作,但一次只能有一个线程进行写入。 可以直接通过获取 ERESOURCE 来实施此方案。

驱动程序为 ERESOURCE 分配存储,并使用 ExInitializeResourceLite 初始化存储。 系统维护正在使用的所有 ERESOURCE 结构的列表。 当驱动程序不再需要特定的 ERESOURCE 时,它必须调用 ExDeleteResourceLite 以将其从系统列表中删除。 驱动程序还可以通过调用 ExReinitializeResourceLite 来重用 ERESOURCE。

驱动程序可以对 ERESOURCE 执行以下基本操作:

ExAcquireResourceSharedLiteExAcquireResourceExclusiveLiteWait 参数确定当前线程是否等待获取 ERESOURCE。 如果指定了 FALSE 值,并且无法获取 ERESOURCE,则例程返回 FALSE。 如果指定值为 TRUE,则当前线程将放在 ERESOURCE 的相应等待列表中。

检查 ERESOURCE 结构的状态

驱动程序还可以确定 ERESOURCE 的当前状态,如下所示: