ExInterlockedAddUlong-Funktion (wdm.h)
Die ExInterlockedAddUlong-Routine fügt einer angegebenen ganzzahligen Zahl ohne Vorzeichen einen wert ohne Vorzeichen als atomischen Vorgang hinzu.
Syntax
ULONG ExInterlockedAddUlong(
[in, out] PULONG Addend,
[in] ULONG Increment,
[in, out] PKSPIN_LOCK Lock
);
Parameter
[in, out] Addend
Ein Zeiger auf eine ganze Zahl ohne Vorzeichen, deren Wert durch den Inkrementwert angepasst werden soll.
[in] Increment
Gibt eine ganze Zahl ohne Vorzeichen an, die hinzugefügt werden soll.
[in, out] Lock
Ein Zeiger auf eine Drehsperre, die zum Synchronisieren des Zugriffs auf den Addend verwendet werden soll.
Rückgabewert
ExInterlockedAddUlong gibt den ursprünglichen (unsummenten) Wert des Addend zurück.
Hinweise
Erwägen Sie die Verwendung von InterlockedExchangeAdd anstelle dieser Routine. InterlockedExchangeAdd kann effizienter sein, da keine Drehsperre verwendet wird und vom Compiler inline ausgeführt wird.
Bei Unterstützungsroutinen, die ineinandergreifende Vorgänge ausführen, wird angenommen, dass sie nicht in der Lage sind, einen Seitenfehler zu verursachen. Das heißt, weder ihr Code noch eine der Daten, die sie berühren, können einen Seitenfehler verursachen, ohne das System herunter zu bringen. Sie verwenden Spin-Sperren, um Atomarität auf symmetrischen Multiprozessorcomputern zu erreichen. Der Aufrufer muss residenten Speicher für die Sperre bereitstellen, der vor dem ersten Aufruf eines ExInterlock-Xxx-Elements mit KeInitializeSpinLock initialisiert werden muss.
Die an ExInterlockedAddULong übergebene Sperre wird verwendet, um sicherzustellen, dass der Add-Vorgang für Addend in Bezug auf alle anderen Vorgänge mit demselben Wert, die mit derselben Drehsperre synchronisiert werden, atomar ist.
ExInterlockedAddUlong maskiert Unterbrechungen. Folglich kann es für die Synchronisierung zwischen einer ISR und einem anderen Treibercode verwendet werden, vorausgesetzt, dass dieselbe Sperre nie in einem Aufruf einer Routine wiederverwendet wird, die unter IRQL = DISPATCH_LEVEL ausgeführt wird.
Beachten Sie, dass Aufrufe von InterlockedXxx in Bezug auf andere interlockedXxx-Aufrufe ohne vom Aufrufer bereitgestellte Drehsperren garantiert atomar sind.
Aufrufer von ExInterlockedAddUlong werden in jedem IRQL ausgeführt. Der Speicher für den Addend-Parameter muss bei allen IRQLs vorhanden sein.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Verfügbar ab Windows 2000. |
Zielplattform | Universell |
Header | wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h) |
Bibliothek | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | Beliebige Ebene (siehe Abschnitt "Hinweise") |