Condividi tramite


Funzione IsBadWritePtr (winbase.h)

Verifica che il processo chiamante abbia accesso in scrittura all'intervallo di memoria specificato.

Importante Questa funzione è obsoleta e non deve essere usata. Nonostante il nome, non garantisce che il puntatore sia valido o che la memoria a cui punta sia sicura da usare. Per altre informazioni, vedere Osservazioni in questa pagina.
 

Sintassi

BOOL IsBadWritePtr(
  [in] LPVOID   lp,
  [in] UINT_PTR ucb
);

Parametri

[in] lp

Puntatore al primo byte del blocco di memoria.

[in] ucb

Dimensioni del blocco di memoria, in byte. Se questo parametro è zero, il valore restituito è zero.

Valore restituito

Se il processo chiamante ha accesso in scrittura a tutti i byte nell'intervallo di memoria specificato, il valore restituito è zero.

Se il processo chiamante non ha accesso in scrittura a tutti i byte nell'intervallo di memoria specificato, il valore restituito è diverso da zero.

Se l'applicazione viene eseguita in un debugger e il processo non ha accesso in scrittura a tutti i byte nell'intervallo di memoria specificato, la funzione genera una prima probabilità STATUS_ACCESS_VIOLATION eccezione. Il debugger può essere configurato per interrompere questa condizione. Dopo la ripresa dell'esecuzione del processo nel debugger, la funzione continua come di consueto e restituisce un valore diverso da zero Questo comportamento è previsto dalla progettazione e funge da supporto per il debug.

Commenti

Questa funzione viene in genere usata quando si usano puntatori restituiti da librerie di terze parti, in cui non è possibile determinare il comportamento di gestione della memoria nella DLL di terze parti.

I thread in un processo devono cooperare in modo tale che non liberare memoria che l'altro necessita. L'uso di questa funzione non nega la necessità di eseguire questa operazione. In caso contrario, l'applicazione potrebbe non riuscire in modo imprevedibile.

Il dereferenziamento dei puntatori potenzialmente non validi può disabilitare l'espansione dello stack in altri thread. Un thread che esaurisce lo stack, quando l'espansione dello stack è stata disabilitata, comporta la chiusura immediata del processo padre, senza informazioni di diagnostica o finestra di errore popup.

Se il processo chiamante ha accesso in scrittura ad alcuni, ma non a tutti, dei byte nell'intervallo di memoria specificato, il valore restituito è diverso da zero.

In un ambiente multitasking preemptive, è possibile che altri thread modifino l'accesso del processo alla memoria testata. Anche quando la funzione indica che il processo ha accesso in scrittura alla memoria specificata, è consigliabile usare la gestione delle eccezioni strutturata quando si tenta di accedere alla memoria. L'uso della gestione delle eccezioni strutturate consente al sistema di notificare al processo se si verifica un'eccezione di violazione di accesso, consentendo al processo di gestire l'eccezione.

IsBadWritePtr non è multithread safe. Per usarlo correttamente in un puntatore condiviso da più thread, chiamarlo all'interno di un'area critica del codice che consente a un solo thread di accedere alla memoria da controllare. Usare oggetti a livello di sistema operativo, ad esempio sezioni critiche o mutex o funzioni interlocked per creare l'area critica del codice.

Requisiti

   
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione winbase.h (include Windows.h)
Libreria Kernel32.lib
DLL Kernel32.dll

Vedere anche

IsBadCodePtr

IsBadReadPtr

IsBadStringPtr