-Parametervalidierung
Die meisten sicherheitsoptimierten CRT-Funktionen und viele, die dies nicht sind, überprüfen ihre Parameter z. B. zum Ü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 Handler für ungültige Parameter aufgerufen.
Ungültige Parameterhandlerroutine
Wenn eine C Runtime Library-Funktion einen ungültigen Parameter erkennt, erfasst sie einige Informationen zum Fehler und ruft dann ein Makro auf, das eine ungültige Parameterhandler-Dispatchfunktion umschließt. Dabei handelt es sich um eine von _invalid_parameter
, _invalid_parameter_noinfo
oder _invalid_parameter_noinfo_noreturn
. Welche Dispatchfunktion aufgerufen wird, hängt davon ab, ob es sich bei Ihrem Code um einen Debugbuild, einen Einzelhandelsbuild handelt oder ob der Fehler nicht als wiederherstellbar gilt.
In Debugbuilds löst das ungültige Parametermakro in der Regel eine fehlerhafte Assertion und einen Debugger-Breakpoint aus, bevor die Dispatchfunktion aufgerufen wird. Wenn der Code ausgeführt wird, kann die Assertion dem Benutzer in einem Dialogfeld mit "Abbrechen", "Wiederholen" und "Weiter" oder ähnlichen Optionen gemeldet werden, die vom Betriebssystem und der CRT-Version abhängen. Diese Optionen ermöglichen es dem Benutzer, das Programm sofort zu beenden, einen Debugger anzufügen oder den vorhandenen Code weiter ausführen zu lassen, der die Dispatch-Funktion aufruft.
Die Dispatchfunktion für ungültige Parameterhandler ruft den aktuell zugewiesenen Handler für ungültige Parameter auf. Standardmäßig ruft der ungültige Parameter auf _invoke_watson
, wodurch die Anwendung geschlossen und ein Minidump generiert wird. Wenn dies vom Betriebssystem aktiviert ist, fragt ein Dialogfeld den Benutzer, 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 Handler für ungültige Parameter auf Ihre eigene Funktion festlegen. Wenn die von Ihnen angegebene Funktion die Anwendung nicht beendet, wird das Steuerelement an die Funktion zurückgegeben, die die ungültigen Parameter empfangen hat. Im CRT beenden diese Funktionen normalerweise die Funktionsausführung, legen sie auf einen Fehlercode fest errno
und geben einen Fehlercode zurück. 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
finden Sie unter errno
, _doserrno
, , _sys_errlist
und _sys_nerr
.
Siehe auch
Sicherheitsfunktionen in der CRT
C-Runtimedateien (CRT) und C++ Standard Library (STL) .lib