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