Функция 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 | Любой уровень (см. раздел "Примечания") |