NdisAcquireReadWriteLock-Funktion (ndis.h)

Die NdisAcquireReadWriteLock-Funktion ruft eine Sperre ab, die der Aufrufer entweder für Schreib- oder Lesezugriff auf die Ressourcen verwendet, die von Treiberthreads gemeinsam genutzt werden.

Hinweis Die Lese-/Schreibsperre-Schnittstelle ist für Treiber von NDIS 6.20 und höher veraltet, die NdisAcquireRWLockRead oder NdisAcquireRWLockWrite anstelle von NdisAcquireReadWriteLock verwenden 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 TRUE ist, erhält diese Funktion Schreibzugriff auf freigegebene Ressourcen. wenn der Wert FALSE ist, 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 freigibt. 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 vornimmt.

Rückgabewert

Keine

Bemerkungen

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

Nach dem Abrufen einer Sperre mithilfe von NdisAcquireReadWriteLock muss der Aufrufer diese Sperre durch Aufrufen der NdisReleaseReadWriteLock-Funktion . Um die Verweisanzahl der Sperre zu verringern, muss ein Treiber aufrufen.
NdisReleaseReadWriteLock einmal für jeden Aufruf von NdisAcquireReadWriteLock.

Um Ressourcen zu ändern, die von Treiberthreads gemeinsam genutzt werden, muss ein Treiberthread eine Schreibsperre erhalten. Um diese Ressourcen einfach zu überwachen, muss ein Treiberthread eine schreibgeschützte Sperre erhalten. Der Lesezugriff erfordert keine verschachtelten Vorgänge oder Konflikte für Drehsperren. Die Verwendung des schreibgeschützten Zugriffs trägt dazu bei, eine gute Betriebssystem- und Treiberleistung aufrechtzuerhalten.

Ein Treiberthread sollte niemals länger als 25 Mikrosekunden eine Schreibsperre enthalten. Wenn Sie eine Schreibsperre für einen längeren Zeitraum halten, wird die Leistung des Betriebssystems und des Treibers beeinträchtigt.

Der Treiber kann keine Sperre verwenden, um Ressourcen vor Lese- oder Schreibzugriff zu schützen, die seine anderen Funktionen mit dem MiniportInterrupt und/oder teilen. MiniportDisableInterruptEx-Funktionen . Stattdessen muss der Treiber aufrufen. NdisMSynchronizeWithInterruptEx , damit Die MiniportSynchronizeInterrupt-Funktion greift auf diese freigegebenen Ressourcen an derselben DIRQL-Instanz zu, unter der die
MiniportInterrupt und/oder MiniportDisableInterruptEx-Funktionen funktionieren.

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

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Veraltet für NDIS 6.20- und höher-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 Universell
Header ndis.h (include Ndis.h)
Bibliothek Ndis.lib
DLL Ndis.sys
IRQL <= DISPATCH_LEVEL
DDI-Complianceregeln Irql_Synch_Function(ndis)

Weitere Informationen

MiniportDisableInterruptEx

MiniportInterrupt

MiniportSynchronizeInterrupt

NdisAcquireRWLockRead

NdisAcquireRWLockWrite

NdisInitializeReadWriteLock

NdisMSynchronizeWithInterruptEx

NdisReleaseReadWriteLock