Freigeben über


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

Weitere Informationen

ExInterlockedAddLargeInteger

InterlockedDecrement

InterlockedIncrement

KeInitializeSpinLock