Condividi tramite


Convalida dei parametri

La maggior parte delle funzioni CRT avanzate per la sicurezza e molti che non lo sono, convalidano i relativi parametri per elementi come il controllo dei puntatori per NULL, che i numeri interi rientrano in un intervallo valido o che i valori di enumerazione sono validi. Se viene trovato un parametro non valido, viene chiamato il gestore di parametri non validi.

Routine del gestore di parametri non valida

Quando una funzione della libreria di runtime C rileva un parametro non valido, acquisisce alcune informazioni sull'errore e quindi chiama una macro che esegue il wrapping di una funzione dispatch del gestore di parametri non valida. Che sarà uno di _invalid_parameter, _invalid_parameter_noinfoo _invalid_parameter_noinfo_noreturn. La funzione dispatch chiamata dipende dal fatto che il codice sia, rispettivamente, una compilazione di debug, una compilazione definitiva o l'errore non sia considerato recuperabile.

Nelle compilazioni di debug, la macro di parametri non validi genera in genere un'asserzione non riuscita e un punto di interruzione del debugger prima che venga chiamata la funzione dispatch. Quando viene eseguito il codice, l'asserzione può essere segnalata all'utente in una finestra di dialogo con "Abort", "Retry" e "Continue" o scelte simili che dipendono dal sistema operativo e dalla versione CRT. Queste opzioni consentono all'utente di terminare immediatamente il programma, di collegare un debugger o di consentire l'esecuzione del codice esistente che chiama la funzione dispatch.

La funzione dispatch del gestore di parametri non valida chiama il gestore di parametri non validi attualmente assegnato. Per impostazione predefinita, il parametro non valido chiama _invoke_watson, che fa sì che l'applicazione chiuda e generi un mini-dump. Se abilitata dal sistema operativo, una finestra di dialogo chiede all'utente se vuole inviare il dump di arresto anomalo a Microsoft per l'analisi.

È possibile modificare questo comportamento usando le funzioni _set_invalid_parameter_handler o _set_thread_local_invalid_parameter_handler per impostare il gestore di parametri non validi sulla propria funzione. Se la funzione specificata non termina l'applicazione, il controllo viene restituito alla funzione che ha ricevuto i parametri non validi. In CRT queste funzioni arresteranno normalmente l'esecuzione della funzione, impostata su errno un codice di errore e restituiranno un codice di errore. In molti casi, il errno valore e il valore restituito sono entrambi EINVAL, per indicare un parametro non valido. In alcuni casi, viene restituito un codice di errore più specifico, ad esempio EBADF per un puntatore di file non valido passato come parametro.

Per altre informazioni su errno, vedere errno, _doserrno, _sys_errliste _sys_nerr.

Vedi anche

Funzionalità di sicurezza in CRT
File C Runtime (CRT) e C++ Standard Library (STL) .lib