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


Функция 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 .

Замечания

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

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

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

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

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

Требования

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

См. также

ExInterlockedAddUlong

InterlockedDecrement

InterlockedIncrement

KeInitializeSpinLock