ExInterlockedAddUlong 関数 (wdm.h)

ExInterlockedAddUlong ルーチンは、指定された符号なし整数に符号なし long 値をアトミック操作として追加します。

構文

ULONG ExInterlockedAddUlong(
  [in, out] PULONG      Addend,
  [in]      ULONG       Increment,
  [in, out] PKSPIN_LOCK Lock
);

パラメーター

[in, out] Addend

値が Increment 値によって調整される符号なし long 整数へのポインター。

[in] Increment

追加する符号なし長整数を指定します。

[in, out] Lock

Addend へのアクセスを同期するために使用されるスピン ロックへのポインター。

戻り値

ExInterlockedAddUlong は、 Addend の元の (summed) 値を返します。

注釈

このルーチンの代わりに InterlockedExchangeAdd を使用することを検討してください。 InterlockedExchangeAdd はスピン ロックを使用せず、コンパイラによってインライン化されるため、より効率的です。

インターロック操作を実行するサポート ルーチンは、ページ フォールトの原因と見なされます。 つまり、コードも、ユーザーが触れるデータも、システムをダウンさせずにページ フォールトを引き起こす可能性はありません。 スピン ロックを使用して、対称マルチプロセッサ マシンで原子性を実現します。 呼び出し元は、ExInterlockedXxx の最初の呼び出しの前に KeInitializeSpinLock で初期化する必要がある Lock の常駐ストレージを提供する必要があります。

ExInterlockedAddULong に渡されるロックは、同じスピン ロックと同期する同じ値に対する他の操作に対して、Addend の追加操作がアトミックであることを保証するために使用されます。

ExInterlockedAddUlong は割り込みをマスクします。 そのため、同じ Lock が IRQL = DISPATCH_LEVEL で実行されるルーチンの呼び出しで再利用されない場合は、ISR と他のドライバー コード間の同期に使用できます。

InterlockedXxx の呼び出しは、呼び出し元が指定したスピン ロックを使用しない他の InterlockedXxx 呼び出しに対してアトミックであることが保証されることに注意してください。

ExInterlockedAddUlong の呼び出し元は、任意の IRQL で実行されます。 Addend パラメーターのストレージは、すべての IRQL に常駐している必要があります。

要件

要件
サポートされている最小のクライアント Windows 2000 以降で使用できます。
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL 任意のレベル (「解説」セクションを参照)

こちらもご覧ください

ExInterlockedAddLargeInteger

InterlockedDecrement

InterlockedIncrement

KeInitializeSpinLock