Condividi tramite


C28113

warning C28113: accesso ad una variabile locale tramite una funzione Interlocked

Il driver utilizza una routine eseguibile collegato di supporto, ad esempio, InterlockedDecrementper accedere a una variabile locale.

Sebbene ai driver sia permesso di passare l'indirizzo di una variabile locale a un'altra funzione e quindi utilizzare una funzione interlocked per operare su tale variabile, è importante verificare che non venga effettuato lo swapping su disco dello stack in modo imprevisto e che la variabile abbia il tempo corretto di vita in tutti i thread che possono utilizzarla.

Esempio

In genere, il valore restituito da una routine esecutiva di supporto interlocked viene utilizzato nei calcoli successivi, piuttosto che negli argomenti di input.Inoltre le routine interlocked proteggono solo il primo argomento (più a sinistra).Utilizzare una routine interlocked nel modo seguente non protegge il valore della variabile globale spesso non ha scopo.

InterlockedExchange(&local, global)

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

local = InterllockedExchange(&global, global)