NdisAcquireRWLockRead 函数 (ndis.h)
NdisAcquireRWLockRead 函数获取读取锁,调用方使用该锁对驱动程序线程之间共享的资源进行读取访问。
语法
void NdisAcquireRWLockRead(
[in] PNDIS_RW_LOCK_EX Lock,
[out] PLOCK_STATE_EX LockState,
[in] UCHAR Flags
);
参数
[in] Lock
指向表示锁的不透明 NDIS_RW_LOCK_EX 变量的指针。 调用方可以使用此锁来获取对非 ISR 驱动程序线程之间共享的资源的写入或读取访问权限。
[out] LockState
指向跟踪锁状态的不透明 LOCK_STATE_EX 变量的指针。 此变量存在于调用方获取和释放锁之间的时间间隔内。 调用方必须对从同一非 ISR 驱动程序线程获取锁的每次尝试使用 LOCK_STATE_EX 类型的不同变量。
[in] Flags
包含锁标志的 ULONG 值。 如果 调用方DISPATCH_LEVEL 当前 IRQL,请将此参数设置为 NDIS_RWL_AT_DISPATCH_LEVEL。 否则,请将此参数设置为零。 有关调度 IRQL 跟踪的详细信息,请参阅 调度 IRQL 跟踪。
返回值
无
备注
NDIS 驱动程序调用 NdisAcquireRWLockRead 函数,以获取对驱动程序线程之间共享的资源的只读访问权限。
驱动程序必须使用 NdisAllocateRWLock 函数分配类型为 NDIS_RW_LOCK_EX 的变量,然后驱动程序才能调用 NdisAcquireRWLockRead 函数。
驱动程序调用 NdisAllocateRWLock 后,可以调用 NdisAcquireRWLockWrite 或 NdisAcquireRWLockRead 以获取对资源的写入或读取访问权限。 一次只能有一个非 ISR 驱动程序线程获取对资源的写入访问权限。 当一个非 ISR 线程具有写入访问权限时,其他非 ISR 线程的所有读取和写入访问权限都必须等待,直到写入访问持有者释放锁。 但是,如果非 ISR 线程具有读取访问权限,则其他非 ISR 线程可以同时获取读取访问权限。
NDIS_RW_LOCK_EX锁不支持从读取到写入的升级。 处理器通过调用 NdisAcquireRWLockRead) 获取 (读取访问权限NDIS_RW_LOCK_EX后,在释放以前的读取访问权限之前,同一处理器不得尝试通过调用 NdisAcquireRWLockWrite) 来尝试获取写入访问权限 (。
可以在同一处理器上以递归方式获取 NDIS_RW_LOCK_EX 读取锁。 每次调用 NdisAcquireRWLockRead 时,都必须有对 NdisReleaseRWLock 的相应调用。 锁仅在上次调用 NdisReleaseRWLock 后释放。
驱动程序不能使用锁来保护资源免受其其他函数与 MiniportInterrupt 共享的读取或写入访问权限或 MiniportDisableInterruptEx 函数或两者。 相反,驱动程序必须调用 NdisMSynchronizeWithInterruptEx ,使其 MiniportSynchronizeInterrupt 函数在其 MiniportInterrupt 或 相同的 DIRQL 上访问此类共享资源 MiniportDisableInterruptEx 函数,或两者都有。
NdisAcquireRWLockRead 始终将 IRQL 提升到 IRQL = DISPATCH_LEVEL。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 NDIS 6.20 及更高版本中受支持。 |
目标平台 | 通用 |
标头 | ndis.h (包括 Ndis.h) |
Library | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |