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。
傳回值
沒有
言論
驅動程式必須使用 來初始化 類型為 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) |