Поделиться через


Функция ExInterlockedAddUlong (wdm.h)

Подпрограмма ExInterlockedAddUlong добавляет в заданное целое число без знака как атомарную операцию.

Синтаксис

ULONG ExInterlockedAddUlong(
  [in, out] PULONG      Addend,
  [in]      ULONG       Increment,
  [in, out] PKSPIN_LOCK Lock
);

Параметры

[in, out] Addend

Указатель на целое число без знака, значение которого необходимо изменить добавочным значением.

[in] Increment

Указывает добавляемое целое число без знака.

[in, out] Lock

Указатель на блокировку спина, которая будет использоваться для синхронизации доступа к надстройке.

Возвращаемое значение

ExInterlockedAddUlong возвращает исходное значение надстройки.

Замечания

Рекомендуется использовать InterlockedExchangeAdd вместо этой подпрограммы. InterlockedExchangeAdd может быть более эффективным, так как он не использует спин-блокировку, и он встраиваются компилятором.

Предполагается, что подпрограммы поддержки, выполняющие переблокированные операции, не могут привести к сбою страницы. То есть ни код, ни какие-либо данные, которые они касаются, могут привести к сбою страницы, не приводя к снижению системы. Они используют замки спина для достижения атомарности на симметричные многопроцессорные машины. Вызывающий объект должен предоставить резидентное хранилище для lock, который необходимо инициализировать с помощью KeInitializeSpinLock перед первоначальным вызовом ExInterlockedXxx.

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

exInterlockedAddUlong маскирует прерывания. Следовательно, его можно использовать для синхронизации между ISR и другим кодом драйвера, при условии, что тот же блокировка никогда не повторно используется в вызове подпрограммы, которая выполняется в IRQL = DISPATCH_LEVEL.

Обратите внимание, что вызовы InterlockedXxx гарантированно будут атомарными в отношении других заблокированных вызововXxx без блокировок спина, предоставленных вызывающим.

Вызывающие ExInterlockedAddUlong запускаться в любом IRQL. Хранилище для параметра надстройки должно быть резидентом всех irQLs.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно начиная с Windows 2000.
целевая платформа Всеобщий
заголовка wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Любой уровень (см. раздел "Примечания")

См. также

ExInterlockedAddLargeInteger

InterlockedDecrement

InterlockedIncrement

KeInitializeSpinLock