共用方式為


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

Boolean 值。 如果值為 TRUE,則此函式會提供共用資源的寫入許可權;如果值為 FALSE,則此函式會提供讀取許可權。

[_out_] LockState

LockState。 追蹤鎖定狀態之不透明變數的指標。 此變數存在於呼叫端取得和釋放鎖定之間的間隔內。 呼叫端必須針對每次嘗試從相同的非ISR驅動程式線程取得鎖定時,使用不同的類型變數 LOCK_STATE

傳回值

備註

驅動程式必須使用 NDIS_RW_LOCK 來初始化 型別的變數驅動程式呼叫任何其他 Ndis Xxx ReadWriteLock 函式之前,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。 支援 NDIS 6.0 和 NDIS 5.1 驅動程式, (請參閱 Windows Vista 中的 NdisAcquireReadWriteLock (NDIS 5.1) ) 。 (支援 NDIS 5.1 驅動程式,請參閱 Windows XP 中的 NdisAcquireReadWriteLock (NDIS 5.1) ) 。
目標平台 Universal
標頭 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