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 提供驻留存储,该存储必须在对 ExInterlockedXxx 进行初始调用之前使用 KeInitializeSpinLock 进行初始化。

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

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

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

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

要求

要求
最低受支持的客户端 从 Windows 2000 开始可用。
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL 任何级别 (请参阅“备注”部分)

另请参阅

ExInterlockedAddLargeInteger

InterlockedDecrement

InterlockedIncrement

KeInitializeSpinLock