ExInterlockedCompareExchange64 macro (wdm.h)

The ExInterlockedCompareExchange64 routine compares one integer variable to another and, if they are equal, sets the first variable to a caller-supplied value.

Syntax

void ExInterlockedCompareExchange64(
  [in, out]  Destination,
  [in]       Exchange,
             Comperand,
  [in]       Lock
);

Parameters

[in, out] Destination

A pointer to an integer that will be compared and possibly replaced.

[in] Exchange

A pointer to an integer that will replace the one at Destination if the comparison results in equality.

Comperand

A pointer to an integer with which the value at Destination will be compared.

[in] Lock

A pointer to a caller-allocated spin-lock that is used if the host system does not support an 8-byte atomic compare-and-exchange operation.

Return value

None

Remarks

This macro wraps InterlockedCompareExchange64 or ExfInterlockedCompareExchange64 and assumes the return value of the type LONGLONG.

ExInterlockedCompareExchange64 tests and, possibly, replaces the value of a given variable. For most underlying microprocessors, this routine is implemented inline by the compiler to execute as an atomic operation. If a spin lock is used, this routine can only be safely used on nonpaged parameters.

If the Destination and Comparand are unequal, ExInterlockedCompareExchange64 simply returns the value of Destination.

ExInterlockedCompareExchange64 is atomic only with respect to other (Ex)InterlockedXxx calls.

Callers of ExInterlockedCompareExchange64 can be running at any IRQL. The storage for the Destination, Comparand, and Exchange parameter and the list entries must be resident at all IRQLs.

Requirements

Requirement Value
Minimum supported client Available starting with Windows 2000.
Target Platform Universal
Header wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Any level (see Remarks section)

See also

InterlockedCompareExchange

InterlockedExchange

InterlockedExchangeAdd