NdisAcquireReadWriteLock 函数 (ndis.h)
NdisAcquireReadWriteLock 函数获取调用方用于对驱动程序线程之间共享的资源的写入或读取访问权限的锁。
语法
void NdisAcquireReadWriteLock(
[in, out] PNDIS_RW_LOCK Lock,
[in] BOOLEAN fWrite,
[_out_] PLOCK_STATE LockState
);
参数
[in, out] Lock
指向表示锁的不透明变量的指针。 调用方可以使用此锁访问共享资源。
[in] fWrite
布尔值。 如果值为 TRUE ,则此函数提供对共享资源的写入访问权限;如果值为 false ,则此函数提供读取访问权限。
[_out_] LockState
LockState。 指向跟踪锁状态的不透明变量的指针。 此变量存在于调用方获取和释放锁之间的时间间隔内。 调用方必须对从同一非 ISR 驱动程序线程获取锁的每个尝试使用不同的类型变量 LOCK_STATE。
返回值
没有
言论
驱动程序必须使用
使用 NdisAcquireReadWriteLock获取锁后,调用方必须通过调用该锁释放该锁
NdisReleaseReadWriteLock 函数。 若要递减锁的引用计数,驱动程序必须调用
NdisReleaseReadWriteLock 每次调用 NdisAcquireReadWriteLock。
若要修改在驱动程序线程之间共享的资源,驱动程序线程必须获取写入锁。 若要仅监视这些资源,驱动程序线程必须获取只读锁。 读取访问不需要互锁作或旋转锁争用。 使用只读访问有助于维护良好的作系统和驱动程序性能。
驱动程序线程不应持有超过 25 微秒的写入锁。 长时间保留写入锁会降低作系统和驱动程序性能。
驱动程序不能使用锁来保护资源免受其其他函数与 MiniportInterrupt 和/或共享的读取或写入访问权限
MiniportDisableInterruptEx 函数。 相反,驱动程序必须调用
NdisMSynchronizeWithInterruptEx 使其
MiniportSynchronizeInterrupt 函数访问其所在的同一 DIRQL 上的此类共享资源
MiniportInterrupt 和/或
MiniportDisableInterruptEx 函数执行。
NdisAcquireReadWriteLock 始终引发 IRQL。 对于写入作,NdisAcquireReadWriteLock 通过获取旋转锁来引发 IRQL。 对于读取作,NdisAcquireReadWriteLock 显式将 IRQL 提升到 IRQL = DISPATCH_LEVEL。
有关获取和释放 NDIS 旋转锁的详细信息,请参阅 网络驱动程序中的同步和通知。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 已弃用 NDIS 6.20 及更高版本的驱动程序,后者应改用 NdisAcquireRWLockRead 或 NdisAcquireRWLockWrite。 Windows Vista 中支持 NDIS 6.0 和 NDIS 5.1 驱动程序(请参阅 NdisAcquireReadWriteLock (NDIS 5.1)。 在 Windows XP 中支持 NDIS 5.1 驱动程序(请参阅 NdisAcquireReadWriteLock (NDIS 5.1)。 |
目标平台 | 普遍 |
标头 | ndis.h (包括 Ndis.h) |
库 | Ndis.lib |
DLL | Ndis.sys |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | Irql_Synch_Function(ndis) |