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


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

Подпрограмма ExInterlockedAddLargeInteger добавляет большое целочисленное значение к указанной переменной в качестве атомарной операции.

Синтаксис

LARGE_INTEGER ExInterlockedAddLargeInteger(
  [in, out] PLARGE_INTEGER Addend,
  [in]      LARGE_INTEGER  Increment,
  [in, out] PKSPIN_LOCK    Lock
);

Параметры

[in, out] Addend

Указатель на переменную для корректировки значением инкремента .

[in] Increment

Указывает значение, добавляемое в надстройку.

[in, out] Lock

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

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

ExInterlockedAddLargeInteger возвращает начальное значение параметра Addend .

Комментарии

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

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

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

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

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

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows 2000 и более поздних версиях Windows. Недоступно в Windows 98 или Windows Me.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Любой уровень (см. раздел "Примечания")

См. также раздел

ExInterlockedAddUlong

InterlockedDecrement

InterlockedIncrement

KeInitializeSpinLock