NdisDprAcquireSpinLock-Makro (ndis.h)
Die NdisDprAcquireSpinLock-Funktion erhält eine Drehsperre, damit der Aufrufer den Zugriff auf Ressourcen synchronisieren kann, die von Nicht-ISR-Treiberfunktionen gemeinsam genutzt werden, und zwar auf multiprozessorsichere Weise.
Syntax
void NdisDprAcquireSpinLock(
[in] _SpinLock
);
Parameter
[in] _SpinLock
Zeiger auf eine undurchsichtige Spin-Sperre, die bereits vom Aufrufer initialisiert wurde.
Rückgabewert
Keine
Bemerkungen
Der Miniporttreiber muss eine Variable vom Typ NDIS_SPIN_LOCK mit NdisAllocateSpinLock initialisieren, bevor er eine andere Ndis. aufruft. SpinLock-Funktion . Der Treiber muss einen residenten Speicher für die verwendeten Drehsperren bereitstellen.
NdisDprAcquireSpinLock ist eine optimierte Version von NdisAcquireSpinLock , die ein Miniporttreiber nur aufrufen kann, während er unter IRQL = DISPATCH_LEVEL ausgeführt wird.
Nach dem Abrufen einer Drehsperre mit NdisDprAcquireSpinLock muss der Aufrufer diese Sperre mit einem Aufruf von NdisDprReleaseSpinLock freigeben. Ein Miniporttreiber muss nach jedem Aufruf von NdisDprAcquireSpinLock NdisDprReleaseSpinLock aufrufen. Andernfalls tritt ein Deadlock auf, der den Treiber hängt.
Eine mit NdisDprAcquireSpinLock erworbene Spinsperre muss mit NdisDprReleaseSpinLock freigegeben werden. Eine mit NdisAcquireSpinLock erworbene Spinsperre muss mit NdisReleaseSpinLock freigegeben werden.
Ein Treiber sollte niemals eine Drehsperre für einen längeren Zeitraum (mehr als ein paar Anweisungen) halten. Das Halten einer Drehsperre für länger als 25 Mikrosekunden beeinträchtigt sowohl die System- als auch die Treiberleistung.
Ein Miniporttreiber kann keine Drehsperre verwenden, um Ressourcen zu schützen, die seine anderen Funktionen mit dem MiniportInterrupt und/oder teilen. MiniportDisableInterruptEx-Funktionen . Stattdessen muss ein Miniporttreiber aufrufen. NdisMSynchronizeWithInterruptEx , damit Die MiniportSynchronizeInterrupt-Funktion greift auf diese freigegebenen Ressourcen an derselben DIRQL-Instanz zu, unter der die
Die Funktionen MiniportInterrupt und/oder MiniportDisableInterruptEx funktionieren.
Weitere Informationen zum Abrufen und Freigeben von NDIS-Spinsperren finden Sie unter Synchronisierung und Benachrichtigung in Netzwerktreibern.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Unterstützt für NDIS 6.0- und NDIS 5.1-Treiber (siehe NdisDprAcquireSpinLock (NDIS 5.1)) in Windows Vista. Unterstützt für NDIS 5.1-Treiber (siehe NdisDprAcquireSpinLock (NDIS 5.1)) in Windows XP. |
Zielplattform | Universell |
Header | ndis.h (include Ndis.h) |
Bibliothek | Ndis.lib |
IRQL | DISPATCH_LEVEL |
DDI-Complianceregeln | Irql_Synch_Function(ndis), SpinLock(ndis), SpinLockBalanced(ndis), SpinLockDpr(ndis), SpinLockDprRelease(ndis), SpinlockRelease(ndis) |