Validation des paramètres
La plupart des fonctions CRT améliorées par la sécurité, et bien d’autres qui ne le sont pas, valident leurs paramètres pour des éléments tels que case activée pointeurs pour NULL
, que les entiers tombent dans une plage valide ou que les valeurs d’énumération sont valides. Si un paramètre non valide est trouvé, le gestionnaire de paramètres non valide est appelé.
Routine de gestionnaire de paramètres non valide
Lorsqu’une fonction de bibliothèque runtime C détecte un paramètre non valide, elle capture des informations sur l’erreur, puis appelle une macro qui encapsule une fonction de répartition de gestionnaire de paramètres non valide. Qui sera l’un des _invalid_parameter
, _invalid_parameter_noinfo
ou _invalid_parameter_noinfo_noreturn
. La fonction de répartition appelée dépend de l’absence de récupération de votre code, respectivement, d’une build de débogage, d’une build de vente au détail ou de l’erreur.
Dans les builds de débogage, la macro de paramètre non valide déclenche généralement une assertion ayant échoué et un point d’arrêt du débogueur avant l’appel de la fonction dispatch. Lorsque le code s’exécute, l’assertion peut être signalée à l’utilisateur dans une boîte de dialogue qui a « Abandonner », « Réessayer » et « Continuer » ou des choix similaires qui dépendent du système d’exploitation et de la version CRT. Ces options permettent à l’utilisateur d’arrêter immédiatement le programme, d’attacher un débogueur ou de laisser le code existant continuer à s’exécuter qui appelle la fonction de distribution.
La fonction de répartition du gestionnaire de paramètres non valide appelle le gestionnaire de paramètres non valide actuellement affecté. Par défaut, le paramètre non valide appelle _invoke_watson
, ce qui entraîne la fermeture de l’application et la génération d’un mini-vidage. Si elle est activée par le système d’exploitation, une boîte de dialogue demande à l’utilisateur s’il souhaite envoyer le vidage sur incident à Microsoft à des fins d’analyse.
Vous pouvez modifier ce comportement à l’aide des fonctions _set_invalid_parameter_handler
ou _set_thread_local_invalid_parameter_handler
définir le gestionnaire de paramètres non valide sur votre propre fonction. Si la fonction que vous spécifiez n’arrête pas l’application, le contrôle est retourné à la fonction qui a reçu les paramètres non valides. Dans le CRT, ces fonctions arrêtent normalement l’exécution de la fonction, définissent errno
sur un code d’erreur et retournent un code d’erreur. Dans de nombreux cas, la errno
valeur et la valeur de retour sont les deux EINVAL
, pour indiquer un paramètre non valide. Dans certains cas, un code d’erreur plus spécifique est retourné, tel que EBADF
pour un pointeur de fichier incorrect passé en tant que paramètre.
Pour plus d’informations sur errno
, voirerrno
, _doserrno
, _sys_errlist
, et _sys_nerr
.
Voir aussi
Fonctionnalités de sécurité dans le CRT
Fichiers C runtime (CRT) et bibliothèque standard C++ (STL) .lib