NdisAllocateRWLock 函式 (ndis.h)
NdisAllocateRWLock 函式會配置類型為 NDIS_RW_LOCK_EX的讀取/寫入鎖定變數。
語法
PNDIS_RW_LOCK_EX NdisAllocateRWLock(
NDIS_HANDLE NdisHandle
);
參數
NdisHandle
從下列其中一個函式傳回的句柄:
NdisMRegisterMiniportDriver
MiniportInitializeEx
NdisRegisterProtocolDriver
NdisOpenAdapterEx
NdisFRegisterFilterDriver
FilterAttach
Windows 8 和 Windows Server 2012 和更新版本:如果在 DriverEntry 中設定讀取/寫入鎖定,則呼叫端可能會傳遞此參數的 NULL 值。
傳回值
NdisAllocateRWLock 如果可以配置,則會傳回 NDIS_RW_LOCK_EX 結構的指標;否則會傳回 NULL 。
言論
NDIS 驅動程式會呼叫 NdisAllocateRWLock 函式,以配置控制驅動程式線程之間共用資源的讀取/寫入存取權 NDIS_RW_LOCK_EX 結構。 驅動程式會針對經常存取的資源使用讀取/寫入鎖定,而且不常存取以進行寫入。
驅動程式設定的每個鎖定都可以執行下列其中一項:
- 保護在 IRQL <= DISPATCH_LEVEL 上執行的驅動程式線程,防止並行寫入和讀取存取的個別共用資源集。
- 藉由在 IRQL <= DISPATCH_LEVEL 執行的驅動程式線程,將一組離散共用資源公開給並行讀取存取。
一個 NDIS_RW_LOCK_EX 是不公平的。 也就是說,等候取得獨佔存取鎖定的處理器可能會受到持有讀取存取鎖定的處理器所耗盡。 因此,在大部分存取權將用於寫入存取的情況下,請勿使用 NDIS_RW_LOCK_EX。 如果大多數存取者都需要寫入存取權,則只要使用核心微調鎖定會更有效率。 如需微調鎖定的詳細資訊,請參閱 微調鎖定簡介。
在多個處理器上有許多讀取存取的下載數的情況下,NDIS_RW_LOCK_EX 通常效能優於核心微調鎖定。 當您預期每秒散發到多個處理器的讀取存取數時,請使用 NDIS_RW_LOCK_EX。
NDIS_RW_LOCK_EX 結構會定義屬性,一次將共用資源的寫入許可權限限為一個非ISR驅動程式線程。 NDIS_RW_LOCK_EX 結構可以允許多個非ISR驅動程式線程同時讀取相關聯資源。 寫入存取期間不允許這類讀取許可權。
若要修改受保護的資源,驅動程式線程必須使用 NdisAcquireRWLockWrite 函式取得寫入鎖定。 若要直接讀取這些資源,驅動程式線程必須取得具有 NdisAcquireRWLockRead 函式的只讀鎖定。 讀取存取不需要同步處理鎖定的作業或爭用。 唯讀存取有助於維護良好的作系統和驅動程式效能。
資源存取完成之後,驅動程式會呼叫 NdisReleaseRWLock 函式。
驅動程式必須呼叫 NdisFreeRWLock 函式,以釋放配置 NdisAllocateRWLock 函式的 NDIS_RW_LOCK_EX 結構。
您可以使用 !ndiskd.ndisrwlock 調試程序擴充功能來檢查 NDIS_RW_LOCK_EX、查看其擁有的讀取器數目,以及查看其目前寫入器是誰。 如需詳細資訊,請參閱 NDIS 延伸模組 (Ndiskd.dll)。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | NDIS 6.20 和更新版本支援。 |
目標平臺 | 普遍 |
標頭 | ndis.h (包括 Ndis.h) |
連結庫 | Ndis.lib |
IRQL | <=DISPATCH_LEVEL |
另請參閱
微調鎖定 簡介