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 及更新版本:如果在任何 NDIS 句柄可用之前,在 DriverEntry 中設定讀取/寫入鎖定,則呼叫端可能會傳遞此參數的 NULL 值。

傳回值

NdisAllocateRWLock 會傳回可配置 NDIS_RW_LOCK_EX 結構的指標;否則會傳回 NULL

備註

NDIS 驅動程式會呼叫 NdisAllocateRWLock 函式,以配置 NDIS_RW_LOCK_EX 結構,以控制驅動程式線程之間共用資源的讀取/寫入存取權。 驅動程式會針對經常存取的資源使用讀取/寫入鎖定,而且不常存取以進行寫入。

驅動程式設定的每個鎖定都可以執行下列其中一項:

  • 保護在 IRQL <= DISPATCH_LEVEL上執行的驅動程式線程並行寫入和讀取存取的離散共用資源集。
  • 由在 IRQL <= DISPATCH_LEVEL 執行的驅動程式線程,公開一組離散的共用資源給並行讀取存取。
NdisAllocateRWLock 傳回的NDIS_RW_LOCK_EX指標是所有其他讀取/寫入鎖定函式的必要參數。

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 和更新版本支援。
目標平台 Universal
標頭 ndis.h (包括 Ndis.h)
程式庫 Ndis.lib
IRQL <=DISPATCH_LEVEL

另請參閱

FilterAttach

微調鎖定簡介

MiniportInitializeEx

NDIS 擴充功能 (Ndiskd.dll)

NDIS_RW_LOCK_EX

NdisAcquireRWLockRead

NdisAcquireRWLockWrite

NdisFRegisterFilterDriver

NdisFreeRWLock

NdisMRegisterMiniportDriver

NdisOpenAdapterEx

NdisRegisterProtocolDriver

NdisReleaseRWLock