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.
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) |