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 的当前状态,如下所示: