Funzione IsBadStringPtrA (winbase.h)
Verifica che il processo chiamante abbia accesso in lettura all'intervallo di memoria specificato.
Sintassi
BOOL IsBadStringPtrA(
[in] LPCSTR lpsz,
[in] UINT_PTR ucchMax
);
Parametri
[in] lpsz
Puntatore a una stringa con terminazione Null, Unicode o ASCII.
[in] ucchMax
Dimensione massima della stringa, in TCHAR. La funzione controlla l'accesso in lettura in tutti i caratteri fino al carattere Null di terminazione della stringa o fino al numero di caratteri specificato da questo parametro, a qualsiasi valore minore. Se questo parametro è zero, il valore restituito è zero.
Valore restituito
Se il processo chiamante ha accesso in lettura a tutti i caratteri fino al carattere Null di terminazione della stringa o fino al numero di caratteri specificato da ucchMax, il valore restituito è zero.
Se il processo chiamante non ha accesso in lettura a tutti i caratteri fino al carattere Null di terminazione della stringa o fino al numero di caratteri specificato da ucchMax, il valore restituito è diverso da zero.
Se l'applicazione viene compilata come versione di debug e il processo non ha accesso in lettura all'intero intervallo di memoria specificato, la funzione genera un'asserzione e si interrompe nel debugger. Lasciando il debugger, la funzione continua come di consueto e restituisce un valore diverso da zero Questo comportamento è per impostazione predefinita, come supporto per il debug.
Osservazioni
Questa funzione viene in genere usata quando si usano i 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 dovrebbero cooperare in modo tale che uno non libera memoria che l'altro ha bisogno. 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 alcuna finestra di errore popup o informazioni di diagnostica.
Se il processo chiamante ha accesso in lettura ad alcuni, ma non a tutti, dell'intervallo di memoria specificato, il valore restituito è diverso da zero.
In un ambiente multitasking preemptive, è possibile che altri thread modifichino l'accesso del processo alla memoria sottoposta a test. Anche quando la funzione indica che il processo ha accesso in lettura alla memoria specificata, è consigliabile usare gestione delle eccezioni strutturate quando si tenta di accedere alla memoria. L'uso della gestione strutturata delle eccezioni consente al sistema di notificare al processo se si verifica un'eccezione di violazione di accesso, offrendo al processo l'opportunità di gestire l'eccezione.
Nota
L'intestazione winbase.h definisce IsBadStringPtr come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows XP [solo app desktop] |
server minimo supportato | Windows Server 2003 [solo app desktop] |
piattaforma di destinazione | Finestre |
intestazione |
winbase.h (include Windows.h) |
libreria |
Kernel32.lib |
dll | Kernel32.dll |