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