Freigeben über


NdisAcquireReadWriteLock-Funktion (ndis.h)

Die NdisAcquireReadWriteLock-Funktion erhält eine Sperre, die der Aufrufer zum Schreiben oder Lesen des Zugriffs auf die Ressourcen verwendet, die von Treiberthreads gemeinsam genutzt werden.

Hinweis Die Lese-/Schreibsperre-Schnittstelle ist für NDIS 6.20 und höhere Treiber veraltet, die NdisAcquireRWLockRead oder NdisAcquireRWLockWrite anstelle von NdisAcquireReadWriteLockverwenden sollten.
 

Syntax

void NdisAcquireReadWriteLock(
  [in, out] PNDIS_RW_LOCK Lock,
  [in]      BOOLEAN       fWrite,
  [_out_]   PLOCK_STATE   LockState
);

Parameter

[in, out] Lock

Ein Zeiger auf eine undurchsichtige Variable, die eine Sperre darstellt. Der Aufrufer kann diese Sperre verwenden, um auf freigegebene Ressourcen zuzugreifen.

[in] fWrite

Ein boolescher Wert. Wenn der Wert TRUEist, wird diese Funktion mit Schreibzugriff auf freigegebene Ressourcen bereitgestellt. Wenn der Wert FALSEist, wird diese Funktion mit Lesezugriff bereitgestellt.

[_out_] LockState

LockState-. Ein Zeiger auf eine undurchsichtige Variable, die den Zustand der Sperre nachverfolgt. Diese Variable ist im Intervall zwischen dem Zeitpunkt vorhanden, zu dem der Aufrufer die Sperre abruft und loslässt. Der Aufrufer muss eine andere Variable vom Typ LOCK_STATE für jeden Versuch verwenden, den er zum Abrufen der Sperre aus demselben Nicht-ISR-Treiberthread vorgibt.

Rückgabewert

Nichts

Bemerkungen

Der Treiber muss eine Variable vom Typ initialisieren, NDIS_RW_LOCK unter Verwendung der NdisInitializeReadWriteLock--Funktion, bevor der Treiber andere NdisXxxReadWriteLock-Funktion aufruft. Der Treiber muss einen residenten Speicher für die von ihr verwendeten Sperren bereitstellen.

Nach dem Abrufen einer Sperre mithilfe von NdisAcquireReadWriteLockmuss der Aufrufer diese Sperre durch Aufrufen der NdisReleaseReadWriteLock Funktion. Um die Referenzanzahl der Sperre zu erhöhen, muss ein Treiber anrufen
NdisReleaseReadWriteLock einmal für jeden Aufruf an NdisAcquireReadWriteLock.

Um Ressourcen zu ändern, die für Treiberthreads freigegeben sind, muss ein Treiberthread eine Schreibsperre abrufen. Um diese Ressourcen einfach zu überwachen, muss ein Treiberthread eine schreibgeschützte Sperre abrufen. Lesezugriff erfordert keine verriegelten Vorgänge oder Konflikte für Drehsperren. Die Verwendung des schreibgeschützten Zugriffs trägt dazu bei, eine gute Leistung des Betriebssystems und treibers zu gewährleisten.

Ein Treiberthread sollte niemals eine Schreibsperre für mehr als 25 Mikrosekunden enthalten. Das Halten einer Schreibsperre für einen längeren Zeitraum beeinträchtigt sowohl die Leistung des Betriebssystems als auch des Treibers.

Der Treiber kann keine Sperre verwenden, um Ressourcen vor Lese- oder Schreibzugriff zu schützen, die seine anderen Funktionen mit dem MiniportInterrupt und/oder MiniportDisableInterruptEx Funktionen. Stattdessen muss der Treiber anrufen NdisMSynchronizeWithInterruptEx so, dass sie MiniportSynchronizeInterrupt Funktion greift auf solche gemeinsam genutzten Ressourcen in derselben DIRQL zu, an der sie sich befinden
MiniportInterrupt und/oder MiniportDisableInterruptEx- Funktionen ausführen.

NdisAcquireReadWriteLock löst immer die IRQL aus. Bei einem Schreibvorgang löst NdisAcquireReadWriteLock den IRQL durch Abrufen einer Drehsperre aus. Für einen Lesevorgang löst NdisAcquireReadWriteLock explizit IRQL auf IRQL = DISPATCH_LEVELaus.

Weitere Informationen zum Abrufen und Freigeben von NDIS-Drehsperren finden Sie unter Synchronisierung und Benachrichtigung in Netzwerktreibern.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Veraltet für NDIS 6.20 und höhere Treiber, die stattdessen NdisAcquireRWLockRead oder NdisAcquireRWLockWrite verwenden sollten. Unterstützt für NDIS 6.0- und NDIS 5.1-Treiber (siehe NdisAcquireReadWriteLock (NDIS 5.1)) in Windows Vista. Unterstützt für NDIS 5.1-Treiber (siehe NdisAcquireReadWriteLock (NDIS 5.1)) in Windows XP.
Zielplattform- Universal
Header- ndis.h (include Ndis.h)
Library Ndis.lib
DLL- Ndis.sys
IRQL- <= DISPATCH_LEVEL
DDI-Complianceregeln Irql_Synch_Function(ndis)

Siehe auch

MiniportDisableInterruptEx

MiniportInterrupt-

MiniportSynchronizeInterrupt

NdisAcquireRWLockRead

NdisAcquireRWLockWrite

NdisInitializeReadWriteLock-

NdisMSynchronizeWithInterruptEx

NdisReleaseReadWriteLock