-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_noinfooder _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 errnofinden Sie unter errno, _doserrno, , _sys_errlistund _sys_nerr.

Siehe auch

Sicherheitsfunktionen in der CRT
C-Runtimedateien (CRT) und C++ Standard Library (STL) .lib