Funzione ExInterlockedAddLargeInteger (wdm.h)
La routine ExInterlockedAddLargeInteger aggiunge un valore intero di grandi dimensioni alla variabile specificata come operazione atomica.
Sintassi
LARGE_INTEGER ExInterlockedAddLargeInteger(
[in, out] PLARGE_INTEGER Addend,
[in] LARGE_INTEGER Increment,
[in, out] PKSPIN_LOCK Lock
);
Parametri
[in, out] Addend
Puntatore alla variabile da regolare in base al valore Increment .
[in] Increment
Specifica un valore da aggiungere a Addend.
[in, out] Lock
Puntatore a un blocco spin da usare per sincronizzare l'accesso a Addend.
Valore restituito
ExInterlockedAddLargeInteger restituisce il valore iniziale del parametro Addend .
Commenti
Si presuppone che le routine di supporto che eseguono operazioni interlock non siano in grado di causare un errore di pagina. Ovvero, né il codice né i dati che toccano possono causare un errore di pagina senza arrestare il sistema. Usano blocchi di rotazione per ottenere l'atomicità nei computer multiprocessore simmetrici. Il chiamante deve fornire l'archiviazione residente per il blocco, che deve essere inizializzato con KeInitializeSpinLock prima della chiamata iniziale a un oggettoExInterlocked Xxx.
Il blocco passato a ExInterlockedAddLargeInteger viene usato per garantire che l'operazione di aggiunta su Addend sia atomica rispetto a tutte le altre operazioni sullo stesso valore che si sincronizzano con lo stesso blocco spin.
Le maschere ExInterlockedAddLargeInteger interrompono. Di conseguenza, può essere usato per la sincronizzazione tra un ISR e un altro codice del driver di dispositivo, purché lo stesso blocco non venga mai riutilizzato in una chiamata a una routine eseguita in IRQL = DISPATCH_LEVEL.
Si noti che le chiamate a Interlocked Xxx sono sicuramente atomiche rispetto ad altre chiamate Xxx interlocked senza blocchi di rotazione forniti dal chiamante.
I chiamanti di ExInterlockedAddLargeInteger vengono eseguiti in qualsiasi IRQL. Lo spazio di archiviazione per il parametro Addend deve essere residente in tutti i valori IRQLs.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Disponibile in Windows 2000 e versioni successive di Windows. Non disponibile in Windows 98 o Windows Me. |
Piattaforma di destinazione | Universale |
Intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Libreria | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | Qualsiasi livello (vedere la sezione Osservazioni) |