ExInterlockedAddLargeInteger 函数 (wdm.h)

ExInterlockedAddLargeInteger 例程将大整数值作为原子操作添加到指定的变量中。

语法

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

参数

[in, out] Addend

指向要由 Increment 值调整的变量的指针。

[in] Increment

指定要添加到 Addend 的值。

[in, out] Lock

指向要用于同步对 Addend 的访问的旋转锁的指针。

返回值

ExInterlockedAddLargeInteger 返回 Addend 参数的初始值。

注解

执行互锁操作的支持例程假定无法导致页面错误。 也就是说,他们的代码和他们接触的任何数据都不会在不关闭系统的情况下导致页面错误。 它们使用旋转锁在对称多处理器计算机上实现原子性。 调用方必须为 Lock 提供驻留存储,该存储必须在对 ExInterlockedXxx 进行初始调用之前使用 KeInitializeSpinLock 进行初始化。

传递给 ExInterlockedAddLargeIntegerLock 用于确保 Addend 上的添加操作对于与同一个旋转锁同步的相同值的任何其他操作都是原子的。

ExInterlockedAddLargeInteger 掩码中断。 因此,它可用于 ISR 和其他设备驱动程序代码之间的同步,前提是在调用以 IRQL = DISPATCH_LEVEL 运行的例程时永远不会重复使用同一个 Lock

请注意,对于没有调用方提供的旋转锁的其他 Interlocked Xxx 调用,保证对 InterlockedXxx 的调用是原子的。

ExInterlockedAddLargeInteger 的调用方在任何 IRQL 上运行。 Addend 参数的存储必须驻留在所有 ICL 中。

要求

要求
最低受支持的客户端 在 Windows 2000 和更高版本的 Windows 中可用。 在 Windows 98 或 Windows Me 中不可用。
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL 任何级别 (请参阅“备注”部分)

另请参阅

ExInterlockedAddUlong

InterlockedDecrement

InterlockedIncrement

KeInitializeSpinLock