Convalida dei parametriParameter Validation

La maggior parte delle funzioni CRT con sicurezza avanzata e molte delle funzioni preesistenti convalidano i propri parametri.Most of the security-enhanced CRT functions and many of the preexisting functions validate their parameters. La convalida può includere il controllo della presenza di puntatori NULL, la verifica che i numeri interi rientrino in un intervallo valido o il controllo della validità dei valori di enumerazione.This could include checking pointers for NULL, checking that integers fall into a valid range, or checking that enumeration values are valid. Quando viene rilevato un parametro non valido, viene eseguito il gestore di parametri non validi.When an invalid parameter is found, the invalid parameter handler is executed.

Routine del gestore di parametri non validiInvalid Parameter Handler Routine

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 di invio del gestore di parametri non validi, ovvero _invalid_parameter, _invalid_parameter_noinfo o _invalid_parameter_noinfo_noreturn.When a C Runtime Library function detects an invalid parameter, it captures some information about the error, and then calls a macro that wraps an invalid parameter handler dispatch function, one of _invalid_parameter, _invalid_parameter_noinfo, or _invalid_parameter_noinfo_noreturn. La funzione di invio chiamata varia a seconda che il codice sia, rispettivamente, una compilazione di debug, una compilazione della versione finale o che l'errore sia considerato irreversibile.The dispatch function called depends on whether your code is, respectively, a debug build, a retail build, or the error is not considered recoverable.

Nelle compilazioni di debug, la macro per i parametri non validi genera di solito un'asserzione non riuscita e un punto di interruzione del debugger prima della chiamata della funzione di invio.In Debug builds, the invalid parameter macro usually raises a failed assertion and a debugger breakpoint before the dispatch function is called. Quando viene eseguito il codice, l'asserzione può essere segnalata all'utente in una finestra di dialogo con scelte di tipo "Interrompi", "Riprova" e "Continua" o simili, a seconda della versione del sistema operativo e della libreria di runtime.When the code is executed, the assertion may be reported to the user in a dialog box that has "Abort", "Retry", and "Continue" or similar choices, depending on the operating system and runtime library version. Queste opzioni consentono all'utente di terminare immediatamente il programma, di collegare un debugger o di consentire la continuazione dell'esecuzione del codice esistente, che chiama la funzione di invio.These options allow the user to immediately terminate the program, to attach a debugger, or to let the existing code continue to run, which calls the dispatch function.

La funzione di invio del gestore di parametri non validi chiama a sua volta il gestore di parametri non validi attualmente assegnato.The invalid parameter handler dispatch function in turn calls the currently assigned invalid parameter handler. Per impostazione predefinita, il parametro non valido chiama _invoke_watson in modo che si verifichi un arresto anomalo dell'applicazione, ovvero che l'applicazione termini e generi un minidump.By default, the invalid parameter calls _invoke_watson which causes the application to "crash," that is, terminate and generate a mini-dump. Se abilitata dal sistema operativo, una finestra di dialogo chiede all'utente se vuole inviare il dump di arresto anomalo del sistema a Microsoft per l'analisi.If enabled by the operating system, a dialog box asks the user if they want to load the crash dump to Microsoft for analysis.

Questo comportamento può essere modificato usando le funzioni set_invalid_parameter_handler o _set_thread_local_invalid_parameter_handler per impostare il gestore di parametri non validi su una funzione personalizzata.This behavior can be changed by using the functions _set_invalid_parameter_handler or _set_thread_local_invalid_parameter_handler to set the invalid parameter handler to your own function. Se la funzione specificata non termina l'applicazione, il controllo viene restituito alla funzione che ha ricevuto i parametri non validi.If the function you specify does not terminate the application, control is returned to the function that received the invalid parameters. In CRT, queste funzioni in genere cessano l'esecuzione della funzione, impostano errno su un codice di errore e restituiscono un codice di errore.In the CRT, these functions will normally cease function execution, set errno to an error code, and return an error code. In molti casi, il valore di errno e il valore restituito sono entrambi EINVAL, a indicare un parametro non valido.In many cases, the errno value and the return value are both EINVAL, indicating an invalid parameter. In alcuni casi, viene restituito un codice di errore più specifico, ad esempio EBADF per un puntatore di file non valido passato come parametro.In some cases, a more specific error code is returned, such as EBADF for a bad file pointer passed in as a parameter. Per altre informazioni su errno, vedere errno, _doserrno, _sys_errlist e _sys_nerr.For more information on errno, see errno, _doserrno, _sys_errlist, and _sys_nerr.

Vedere ancheSee Also

Funzionalità di sicurezza in CRT Security Features in the CRT
CRT Library Features (Funzionalità della libreria CRT)CRT Library Features