共用方式為


NdisAcquireReadWriteLock 函式 (ndis.h)

NdisAcquireReadWriteLock 函式會取得呼叫端用來寫入或讀取驅動程式線程之間共用之資源的鎖定。

附注 NDIS 6.20 和更新版本的驅動程式已淘汰讀寫鎖定介面,其應該使用 NdisAcquireRWLockReadNdisAcquireRWLockWrite,而不是 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

傳回值

沒有

言論

驅動程式必須使用 來初始化 類型為 NDIS_RW_LOCK 的變數在驅動程式呼叫任何其他 NdisXxxReadWriteLock 函式之前, NdisInitializeReadWriteLock 函式。 驅動程式必須提供其所使用鎖定的常駐記憶體。

使用 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)

另請參閱

MiniportDisableInterruptEx

MiniportInterrupt

MiniportSynchronizeInterrupt

NdisAcquireRWLockRead

NdisAcquireRWLockWrite

NdisInitializeReadWriteLock

NdisMSynchronizeWithInterruptEx

NdisReleaseReadWriteLock