NdisInitializeReadWriteLock-Funktion (ndis.h)

Die NdisInitializeReadWriteLock-Funktion initialisiert eine Lese- oder Schreibsperrvariable vom Typ NDIS_RW_LOCK.

Hinweis Die Lese-/Schreibsperrschnittstelle ist für NDIS 6.20- und höher-Treiber veraltet, die anstelle von NdisInitializeReadWriteLockNdisAllocateRWLock verwenden sollten.
 

Syntax

void NdisInitializeReadWriteLock(
  [out] PNDIS_RW_LOCK Lock
);

Parameter

[out] Lock

Ein Zeiger auf eine undurchsichtige NDIS_RW_LOCK Variable, die eine Sperre darstellt. Der Aufrufer kann diese Sperre verwenden, um Schreib- oder Lesezugriff auf Ressourcen zu erhalten, die von Nicht-ISR-Treiberthreads gemeinsam genutzt werden.

Rückgabewert

Keine

Bemerkungen

Eine NDIS_RW_LOCK Variable wird verwendet, um den Schreibzugriff auf freigegebene Ressourcen jeweils auf einen Nicht-ISR-Treiberthread zu beschränken. Dieser NDIS_RW_LOCK kann mehreren Nicht-ISR-Treiberthreads gleichzeitigen Lesezugriff auf diese Ressourcen ermöglichen. Ein solcher Lesezugriff ist während eines Schreibzugriffs nicht zulässig.

Der Lock-Zeiger , der an NdisInitializeReadWriteLock übergeben wird, ist ein erforderlicher Parameter für alle anderen Ndis.. ReadWriteLock-Funktionen .

Bevor ein Treiber die NdisAcquireReadWriteLock-Funktion aufruft, um Schreib- oder Lesezugriff auf eine Ressource zu erhalten, muss der Treiber NdisInitializeReadWriteLock aufrufen, um die dieser Ressource zugeordnete Sperre zu initialisieren. Der Aufrufer muss einen nicht ausgelagerten Speicher für die Variable unter Sperren bereitstellen.

Nach dem Aufruf von NdisInitializeReadWriteLock kann der Treiber NdisAcquireReadWriteLock aufrufen, um Schreib- oder Lesezugriff auf die Ressource zu erhalten. Nur jeweils ein Nicht-ISR-Treiberthread kann Schreibzugriff auf die Ressource erhalten. Wenn ein Nicht-ISR-Thread über Schreibzugriff verfügt, müssen alle Lese- und Schreibzugriffe anderer Nicht-ISR-Threads warten, bis der Schreibzugriffsinhaber die Sperre freigibt. Wenn jedoch ein Nicht-ISR-Thread über Lesezugriff verfügt, können andere Nicht-ISR-Threads gleichzeitig Lesezugriff erhalten.

Initialisieren und verwenden Sie diese Art von Sperre für Ressourcen, auf die häufig zum Lesen und selten zum Schreiben zugegriffen wird.

Sobald der Ressourcenzugriff abgeschlossen ist, ruft der Treiber die NdisReleaseReadWriteLock-Funktion .

Jede Sperre, die ein Treiber initialisiert, führt eine der folgenden Aktionen aus:

  • Schützt einen diskreten Satz freigegebener Ressourcen vor dem gleichzeitigen Schreib- und Lesezugriff durch Treiberthreads, die unter IRQL <= DISPATCH_LEVEL ausgeführt werden.
  • Macht einen diskreten Satz freigegebener Ressourcen für den gleichzeitigen Lesezugriff durch Treiberthreads verfügbar, die unter IRQL <= DISPATCH_LEVEL ausgeführt werden.
Aufrufer von NdisInitializeReadWriteLock können auf jedem IRQL ausgeführt werden. Normalerweise wird ein Aufrufer bei IRQL = PASSIVE_LEVEL während der Initialisierung ausgeführt.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Veraltet für NDIS 6.20- und höhere Treiber, die NdisAllocateRWLock anstelle von NdisInitializeReadWriteLock verwenden sollten. Unterstützt für NDIS 6.0- und NDIS 5.1-Treiber (siehe NdisInitializeReadWriteLock (NDIS 5.1)) in Windows Vista. Unterstützt für NDIS 5.1-Treiber (siehe NdisInitializeReadWriteLock (NDIS 5.1)) in Windows XP.
Zielplattform Universell
Header ndis.h (include Ndis.h)
Bibliothek Ndis.lib
DLL Ndis.sys
IRQL Beliebige Ebene (siehe Abschnitt "Hinweise")

Weitere Informationen

NdisAcquireReadWriteLock

NdisReleaseReadWriteLock