Condividi tramite


Avviso C28113

Accesso a una variabile locale tramite una funzione interlocked

Il driver usa una routine di supporto esecutivo interlocked, ad esempio InterlockedDecrement, per accedere a una variabile locale.

Anche se i driver sono autorizzati a passare l'indirizzo di una variabile locale a un'altra funzione e quindi usare una funzione interlocked per operare su tale variabile, è importante verificare che lo stack non venga scambiato su disco in modo imprevisto e che la variabile abbia il tempo di vita corretto in tutti i thread che potrebbero usarlo.

Esempio

In genere, il valore restituito di una routine di supporto esecutivo Interlocked viene usato nei calcoli successivi, anziché gli argomenti di input. Inoltre, le routine Interlocked proteggono solo il primo argomento (a sinistra). L'uso di una routine interlocked nel modo seguente non protegge il valore globale e spesso non serve alcun scopo.

InterlockedExchange(&local, global)

Il formato seguente ha lo stesso effetto sui dati e accede in modo sicuro alla variabile globale.

local = InterllockedExchange(&global, global)