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