ExInterlockedAddUlong 函式 (wdm.h)
ExInterlockedAddUlong 例程會將不帶正負號的 long 值新增至指定的不帶正負號整數做為不可部分完成的作業。
語法
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 的 Lock 是用來確保附加元件上的新增作業在與這個相同微調鎖定同步處理之相同值上的任何其他作業都是不可部分完成的。
ExInterlockedAddUlong 遮罩會中斷。 因此,它可用於ISR和其他驅動程式程式代碼之間的同步處理,前提是相同的 Lock 永遠不會在 IRQL = DISPATCH_LEVEL 執行的例程呼叫中重複使用。
請注意,在未提供呼叫端的微調鎖定的情況下,對 InterlockedXxx 的呼叫保證是不可部分完成的其他 InterlockedXxx 呼叫。
ExInterlockedAddUlong 的呼叫端在任何 IRQL 上執行。 Addend 參數的記憶體必須位於所有 IRCL。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平台 | Universal |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | 任何層級 (請參閱一節) |