-Parametervalidierung
Die meisten der sicherheitsgestützten CRT-Funktionen und viele, die nicht, überprüfen ihre Parameter für Dinge wie das Überprüfen von Zeigern auf NULL
, dass ganze Zahlen in einen gültigen Bereich fallen oder dass Enumerationswerte gültig sind. Wenn ein ungültiger Parameter gefunden wird, wird der ungültige Parameterhandler aufgerufen.
Ungültige Parameterhandlerroutine
Wenn eine C-Runtime-Bibliothek einen ungültigen Parameter erkennt, erfasst sie einige Informationen zum Fehler und ruft dann ein Makro auf, das eine ungültige Parameterhandlerverteilungsfunktion umschließt. Dies ist eine von _invalid_parameter
, , _invalid_parameter_noinfo
oder _invalid_parameter_noinfo_noreturn
. Welche Verteilerfunktion aufgerufen wird, hängt davon ab, ob ihr Code ein Debugbuild, ein Verkaufsbuild oder der Fehler nicht als wiederherstellbar betrachtet wird.
In Debugbuilds löst das ungültige Parametermakro in der Regel eine fehlgeschlagene Assertion und einen Debugger-Haltepunkt aus, bevor die Dispatch-Funktion aufgerufen wird. Wenn der Code ausgeführt wird, kann die Assertion dem Benutzer in einem Dialogfeld mit "Abbrechen", "Wiederholen" und "Weiter" oder ähnlichen Auswahlmöglichkeiten gemeldet werden, die vom Betriebssystem und der CRT-Version abhängen. Mit diesen Optionen kann der Benutzer das Programm sofort beenden, einen Debugger anfügen oder den vorhandenen Code weiterhin ausführen lassen, der die Dispatch-Funktion aufruft.
Die Dispatch-Funktion des ungültigen Parameterhandlers ruft den aktuell zugewiesenen ungültigen Parameterhandler auf. Standardmäßig ruft der ungültige Parameter auf _invoke_watson
, wodurch die Anwendung geschlossen und ein Miniabbild generiert. Wenn das Betriebssystem aktiviert ist, wird der Benutzer in einem Dialogfeld gefragt, ob er das Absturzabbild zur Analyse an Microsoft senden möchte.
Sie können dieses Verhalten ändern, indem Sie die Funktionen _set_invalid_parameter_handler
verwenden oder _set_thread_local_invalid_parameter_handler
den ungültigen Parameterhandler auf Ihre eigene Funktion festlegen. Wenn die angegebene Funktion die Anwendung nicht beendet, wird das Steuerelement an die Funktion zurückgegeben, die die ungültigen Parameter empfangen hat. In der CRT werden diese Funktionen normalerweise die Funktionsausführung beenden, auf einen Fehlercode festgelegt errno
und einen Fehlercode zurückgegeben. In vielen Fällen sind der errno
Wert und der Rückgabewert beide EINVAL
, um einen ungültigen Parameter anzugeben. In einigen Fällen wird ein spezifischerer Fehlercode zurückgegeben, wie z.B. EBADF
für einen ungültigen Dateizeiger, der als Parameter übergeben wird.
Weitere Informationen zu errno
, sieheerrno
, , _doserrno
, _sys_errlist
und _sys_nerr
.
Siehe auch
Sicherheitsfeatures im CRT
C-Runtime-Dateien (CRT) und C++ Standard Library (STL) .lib