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 incremento .
[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.
Retornar valor
ExInterlockedAddUlong retorna o valor original (não consumido) do Addend.
Comentários
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 residente para o Lock, que deve ser inicializado com KeInitializeSpinLock antes da chamada inicial para um Xxx ExInterlocked.
O Bloqueio passado para ExInterlockedAddULong é usado para garantir que a operação de adição em Addend seja atômica em relação a quaisquer outras operações com o mesmo valor que sincronizam com esse mesmo bloqueio de rotação.
ExInterlockedAddUlong mascara interrupções. Consequentemente, ele pode ser usado para sincronização entre um ISR e outro código de driver, desde que o mesmo Bloqueio nunca seja reutilizado em uma chamada para uma rotina executada em IRQL = DISPATCH_LEVEL.
Observe que as chamadas para o Xxx Interlocked têm a garantia de serem atômicas em relação a outras chamadas Xxx interlocked sem bloqueios de rotação fornecidos pelo chamador.
Os chamadores de ExInterlockedAddUlong são executados em qualquer IRQL. O armazenamento para o parâmetro Addend deve ser residente em todas as IRQLs.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Disponível a partir do Windows 2000. |
Plataforma de Destino | Universal |
Cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Biblioteca | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | Qualquer nível (consulte a seção Comentários) |