Функция InterlockedCompareExchangeToUser (usermode_accessors.h)

The InterlockedCompareExchangeToUser function performs an atomic compare-and-exchange operation on a 32-bit value in user-mode memory.

Syntax

LONG InterlockedCompareExchangeToUser(
  LONG volatile *Destination,
  LONG          ExChange,
  LONG          Comperand
);

Parameters

Destination

[in, out] Указатель на расположение памяти в пользовательском режиме, содержащее целевое значение. The pointer must be naturally aligned for the data type; that is, the memory location must be 4-byte aligned since Destination points to a 4-byte type.

ExChange

[in] Значение обмена.

Comperand

[in] The value to compare to Destination.

Return value

The function returns the initial value of the Destination parameter.

Remarks

Межблокированные функции предоставляют простой механизм синхронизации доступа к переменной, к которой используется несколько потоков. Эта функция атомарна относительно вызовов других взаимоблокируемых функций. Он создает полный барьер памяти, чтобы обеспечить выполнение операций памяти в порядке.

Эта функция предоставляет атомарный доступ к 32-разрядному значению в памяти пользовательского режима. The function compares the Destination value with the Comperand value. If the Destination value is equal to the Comperand value, the ExChange value is stored in the address specified by Destination. В противном случае операция не выполняется.

Функция вызывает структурированное исключение, если операция завершается ошибкой, например если целевой адрес не является допустимым адресом пользовательского режима или недоступен.

Эта функция работает во всех версиях Windows, а не только на последних версиях. You need to consume the latest WDK to get the function declaration from the usermode_accessors.h header. You also need the library (umaccess.lib) from the latest WDK. Однако результирующий драйвер будет работать в более ранних версиях Windows.

Requirements

Requirement Value
Минимальный поддерживаемый клиент See Remarks
Header usermode_accessors.h
Library umaccess.lib
IRQL Меньше или равно APC_LEVEL

See also

InterlockedCompareExchangeToMode

InterlockedCompareExchange64ToUser