Compartilhar via


Função ExInterlockedAddUlong (wdm.h)

A rotina ExInterlockedAddUlong adiciona um valor longo sem sinal a um determinado inteiro sem sinal como uma operação atômica.

Sintaxe

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

Parâmetros

[in, out] Addend

Um ponteiro para um inteiro longo sem sinal cujo valor deve ser ajustado pelo valor Increment.

[in] Increment

Especifica um inteiro longo sem sinal a ser adicionado.

[in, out] Lock

Um ponteiro para um bloqueio de rotação a ser usado para sincronizar o acesso ao Addend.

Valor de retorno

ExInterlockedAddUlong retorna o valor original (não somado) do deAddend .

Observações

Considere usar InterlockedExchangeAdd em vez dessa rotina. InterlockedExchangeAdd pode ser mais eficiente porque não usa um bloqueio de rotação e é embutido pelo compilador.

As rotinas de suporte que fazem operações interligadas são consideradas incapazes de causar uma falha de página. Ou seja, nem o código nem os dados que eles tocam podem causar uma falha de página sem derrubar o sistema. Eles usam bloqueios de rotação para obter atomicidade em computadores multiprocessadores simétricos. O chamador deve fornecer armazenamento de residente para o de Bloqueio, que deve ser inicializado com KeInitializeSpinLock antes da chamada inicial para um ExInterlockedXxx.

O de Bloqueio passado para ExInterlockedAddULong é usado para garantir que a operação de adição em de Complemento seja atômica em relação a quaisquer outras operações no mesmo valor que sincronizam com esse mesmo bloqueio de rotação.

as interrupções de máscaras de ExInterlockedAddUlong. Consequentemente, ele pode ser usado para sincronização entre um ISR e outro código de driver, desde que o mesmo Lock nunca seja reutilizado em uma chamada para uma rotina executada em IRQL = DISPATCH_LEVEL.

Observe que as chamadas para Xxx intertravadas têm a garantia de serem atômicas em relação a outras chamadas Xxx sem bloqueios de rotação fornecidos pelo chamador.

Os chamadores de ExInterlockedAddUlong executados em qualquer IRQL. O armazenamento do parâmetro Addend deve ser residente em todos os IRQLs.

Requisitos

Requisito Valor
de cliente com suporte mínimo Disponível a partir do Windows 2000.
da Plataforma de Destino Universal
cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL Qualquer nível (consulte a seção Comentários)

Consulte também

ExInterlockedAddLargeInteger

InterlockedDecrement

InterlockedIncrement

KeInitializeSpinLock