Warnung C28719
Gesperrte API-Verwendung: Funktionsname ist unsicher und wurde als veraltet gekennzeichnet.
Diese Warnung zeigt an, dass eine Funktion verwendet wird, die verboten wurde und für die es einen robusteren oder sichereren Ersatz gibt.
Hinweise
Eine Liste aller gesperrten Funktionen, die von diesem Fehler abgedeckt werden, warum sie gesperrt sind, und empfohlene Ersetzungen finden Sie nach dem folgenden Beispiel.
Codeanalysename: BANNED_API_USAGE
Beispiel
Der folgende Code generiert diese Warnung:
void example_func(PSTR src)
{
char dst[100];
strcpy(dst, src);
}
Dieses Problem ergibt sich aus der Verwendung der unsicheren Funktion strcpy. strcpy überprüft nicht, ob der Zielpuffer groß genug ist, um die Quelldaten anzupassen. Um dieses Problem zu beheben, können wir strcpy_s, C++11s sichereren Ersatz für diese Funktion verwenden. strcpy_s verfügt über einen dritten Parameter (die Größe des Zielpuffers), um sicherzustellen, dass nur viele Bytes kopiert werden. Beispielsweise ist der folgende Code sicherer:
void example_func(PSTR src)
{
char dst[100];
strcpy_s(dst, sizeof(dst), src);
}
Verbotene Funktionen
HINWEIS: Diese Liste wird aktiv aktualisiert und verbessert.
Verbotene API | Ersetzung(en) | Begründung / Anmerkungen |
---|---|---|
_fstrcat |
StringCbCat , , StringCbCatEx StringCchCat StringCchCatEx |
Ältere 16-Bit-Weitzeigerimplementierung |
_fstrcpy |
StringCbCopy , , StringCbCopyEx StringCchCopy StringCchCopyEx |
Ältere 16-Bit-Weitzeigerimplementierung |
_fstrncat |
StringCbCatN , , StringCbCatNEx StringCchCatN StringCchCatNEx |
Ältere 16-Bit-Weitzeigerimplementierung |
_fstrncpy |
strncpy , wcsncpy |
Ältere 16-Bit-Weitzeigerimplementierung |
_ftccat |
strcat , wcscat |
Ältere 16-Bit-Weitzeigerimplementierung |
_ftccpy |
strcpy , wcscpy |
Ältere 16-Bit-Weitzeigerimplementierung |
_ftcscat |
strcat , wcscat |
Ältere 16-Bit-Weitzeigerimplementierung |
_ftcscpy |
strcpy , wcscpy |
Ältere 16-Bit-Weitzeigerimplementierung |
_getts |
StringCbGets , , StringCbGetsEx StringCchGets , , StringCchGetsEx gets_s |
Keine Größenbeschränkung für Daten |
_gettws |
gets_s |
Keine Größenbeschränkung für Daten |
_getws |
_getws_s |
Keine Größenbeschränkung für Daten |
_mbccat |
strcat_s , , StringCbCat StringCbCatEx , StringCchCat , , StringCchCatEx strlcat |
Keine Größenbeschränkung für Daten |
_makepath |
_makepath_s |
Keine Größenbeschränkung für Daten |
_mbscat |
_mbscat_s |
|
_snprintf |
_snprintf_s |
Wird nicht NULL beendet |
_sntprintf |
StringCbPrintf , , StringCbPrintf_l StringCbPrintf_lEx , StringCbPrintfEx , , StringCchPrintf StringCchPrintfEx |
Wird nicht NULL beendet |
_sntscanf |
_snscanf_s |
Keine maximale Länge |
_snwprintf |
_snwprintf_s , , StringCbPrintf StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , , StringCchPrintf StringCchPrintfEx |
Wird nicht NULL beendet |
_splitpath |
_splitpath_s |
Keine Begrenzungsüberprüfung |
_stprintf |
StringCbPrintf , , StringCbPrintf_l StringCbPrintf_lEx , StringCbPrintfEx , , StringCchPrintf StringCchPrintfEx |
Eingeschränkte Fehlererkennung |
_stscanf |
sscanf_s (erfordert Formatzeichenfolgenänderungen) |
Keine Begrenzungsüberprüfung |
_tccat |
strcat_s , , StringCbCat StringCbCatEx , StringCchCat , , StringCchCatEx strlcat |
Keine Begrenzungsüberprüfung |
_tccpy |
strcpy_s , , StringCbCopy StringCbCopyEx , StringCchCopy , , StringCchCopyEx strlcpy |
Keine Begrenzungsüberprüfung |
_tcscat |
StringCbCat , , StringCbCatEx StringCchCat StringCchCatEx |
Eingeschränkte Fehlererkennung |
_tcscpy |
StringCbCopy , , StringCbCopyEx StringCchCopy StringCchCopyEx |
Eingeschränkte Fehlererkennung |
_tcsncat |
StringCbLength , , StringCchLength UnalignedStringCbLength UnalignedStringCchLength |
Keine maximale Länge |
_tcsncpy |
StringCbCopyN , , StringCbCopyNEx StringCchCopyN StringCchCopyNEx |
Eingeschränkte Fehlererkennung |
_tmakepath |
_makepath_s |
Keine Begrenzungsüberprüfung |
_tscanf |
scanf_s |
Keine Begrenzungsüberprüfung auf Ausgaben |
_tsplitpath |
splitpath_s , wsplitpath_s |
Keine Begrenzungsüberprüfung |
_vsnprintf |
_vsnprintf_s , , StringCchVPrintf StringCchVPrintf_l , , StringCchVPrintf_lEx StringCchVPrintfEx |
Eingeschränkte Fehlererkennung |
_vsntprintf |
StringCbVPrintf , , StringCbVPrintf_l StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx StringCchVPrintfEx |
Eingeschränkte Fehlererkennung |
_vsnwprintf |
_vsnwprintf_s , , StringCbVPrintf StringCbVPrintf_l , , StringCbVPrintf_lEx StringCbVPrintfEx |
Eingeschränkte Fehlererkennung |
_vstprintf |
StringCbVPrintf , , StringCbVPrintf_l StringCbVPrintf_lEx , StringCbVPrinfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx StringCchVPrintfEx |
Keine maximale Länge |
_wmakepath |
_wmakepath_s |
Keine Begrenzungsüberprüfung |
_wsplitpath |
_wsplitpath_s |
Keine Begrenzungsüberprüfung |
OemToCharW |
WideCharToMultiByte |
Keine Begrenzungsüberprüfung |
StrCat |
StringCbCat , , StringCbCatEx StringCchCat StringCchCatEx |
Eingeschränkte Fehlererkennung |
StrCatA |
StringCbCat , , StringCbCatEx StringCchCat StringCchCatEx |
Eingeschränkte Fehlererkennung |
StrCatBuff |
StringCbCat , , StringCbCatEx StringCchCat StringCchCatEx |
Keine NULL-Beendigung |
StrCatBuffA |
StringCbCat , , StringCbCatEx StringCchCat StringCchCatEx |
Keine NULL-Beendigung |
StrCatBuffW |
StringCbCat , , StringCbCatEx StringCchCat StringCchCatEx |
Keine NULL-Beendigung |
StrCatChainW |
StringCbCatEx , , StringCbCatNEx StringCchCatEx StringCchCatNEx |
Keine NULL-Beendigung |
StrCatN |
StringCbCat , , StringCbCatEx StringCbCatN , StringCbCatNEx , StringCchCat , StringCchCatEx , , StringCchCatN StringCchCatNEx |
Keine Begrenzungsüberprüfung |
StrCatNA |
StringCbCat , , StringCbCatEx StringCbCatN , StringCbCatNEx , StringCchCat , StringCchCatEx , , StringCchCatN StringCchCatNEx |
Keine Begrenzungsüberprüfung |
StrCatNW |
StringCbCat , , StringCbCatEx StringCbCatN , StringCbCatNEx , StringCchCat , StringCchCatEx , , StringCchCatN StringCchCatNEx |
Keine Begrenzungsüberprüfung |
StrCatW |
StringCbCat , , StringCbCatEx StringCbCatN , StringCbCatNEx , StringCchCat , StringCchCatEx , , StringCchCatN StringCchCatNEx |
Keine Begrenzungsüberprüfung |
StrCpy |
StringCbCopy , , StringCbCopyEx StringCchCopy StringCchCopyEx |
Keine Begrenzungsüberprüfung |
StrCpyA |
StringCbCopy , , StringCbCopyEx StringCchCopy StringCchCopyEx |
Keine Begrenzungsüberprüfung |
StrCpyN |
StringCbCopy , , StringCbCopyEx StringCchCopy StringCchCopyEx |
Wird nicht NULL beendet |
StrCpyNA |
StringCbCopy , , StringCbCopyEx StringCchCopy StringCchCopyEx |
Wird nicht NULL beendet |
StrCpyNW |
StringCbCopy , , StringCbCopyEx StringCchCopy StringCchCopyEx |
Eingeschränkte Fehlerüberprüfung |
strcpyW |
StringCbCopy , , StringCbCopyEx StringCchCopy StringCchCopyEx |
Keine Begrenzungsüberprüfung |
StrCpyW |
StringCbCopy , , StringCbCopyEx StringCchCopy StringCchCopyEx |
Keine Begrenzungsüberprüfung |
StrNCat |
StringCbCatN , , StringCbCatNEx StringCchCatN StringCchCatNEx |
Eingeschränkte Fehlererkennung |
StrNCatA |
StringCbCatN , , StringCbCatNEx StringCchCatN StringCchCatNEx |
Eingeschränkte Fehlererkennung |
StrNCatW |
StringCbCatN , , StringCbCatNEx StringCchCatN StringCchCatNEx |
Eingeschränkte Fehlererkennung |
StrNCpy |
StringCbCopy , , StringCbCopyEx StringCchCopy StringCchCopyEx |
Wird nicht NULL beendet |
StrNCpyA |
StringCbCopy , , StringCbCopyEx StringCchCopy StringCchCopyEx |
Wird nicht NULL beendet |
StrNCpyW |
StringCbCopy , , StringCbCopyEx StringCchCopy StringCchCopyEx |
Wird nicht NULL beendet |
gets |
gets_s , , fgets StringCbGets , StringCbGetsEx , , StringCchGets StringCchGetsEx |
Begrenzte Fehlererkennung; veraltet durch den C11-Standard |
lstrcat |
StringCbCat , , StringCbCatEx StringCchCat StringCchCatEx |
Eingeschränkte Fehlererkennung |
lstrcatA |
StringCbCat , , StringCbCatEx StringCchCat StringCchCatEx |
Eingeschränkte Fehlererkennung |
lstrcatn |
StringCbCat , , StringCbCatEx StringCchCat StringCchCatEx |
Eingeschränkte Fehlererkennung |
lstrcatnA |
StringCbCat , , StringCbCatEx StringCchCat StringCchCatEx |
Eingeschränkte Fehlererkennung |
lstrcatnW |
StringCbCat , , StringCbCatEx StringCchCat StringCchCatEx |
Eingeschränkte Fehlererkennung |
lstrcatW |
StringCbCat , , StringCbCatEx StringCchCat StringCchCatEx |
Eingeschränkte Fehlererkennung |
lstrcpy |
StringCbCopy , , StringCbCopyEx StringCchCopy StringCchCopyEx |
Keine Begrenzungsüberprüfung |
lstrcpyA |
StringCbCopy , , StringCbCopyEx StringCchCopy StringCchCopyEx |
Keine Begrenzungsüberprüfung |
lstrcpyn |
StringCbCopy , , StringCbCopyEx StringCchCopy StringCchCopyEx |
Eingeschränkte Fehlererkennung |
lstrcpynA |
StringCbCopy , , StringCbCopyEx StringCchCopy StringCchCopyEx |
Eingeschränkte Fehlererkennung |
lstrcpynW |
StringCbCopy , , StringCbCopyEx StringCchCopy StringCchCopyEx |
Keine Begrenzungsüberprüfung |
lstrcpyW |
StringCbCopy , , StringCbCopyEx StringCchCopy StringCchCopyEx |
Keine Begrenzungsüberprüfung |
snscanf |
sscanf_s |
Keine Begrenzungsüberprüfung |
snwscanf |
swscanf_s |
Keine Begrenzungsüberprüfung |
sprintf |
sprintf_s |
Eingeschränkte Fehlererkennung |
sprintfA |
sprintf_s |
Keine Begrenzungsüberprüfung |
sprintfW |
swprintf_s |
Keine Begrenzungsüberprüfung |
lstrncat |
StringCbCat , , StringCbCatEx StringCchCat StringCchCatEx |
Eingeschränkte Fehlererkennung |
makepath |
||
nsprintf |
sprintf_s |
Keine Fehlererkennung oder Begrenzungsprüfung |
strcat |
strcat_s , , StringCbCat StringCbCatEx , StringCchCat , , StringCchCatEx strlcat |
Eingeschränkte Fehlererkennung |
strcatA |
strcat_s , , StringCbCat StringCbCatEx , StringCchCat , , StringCchCatEx strlcat |
Eingeschränkte Fehlererkennung |
strcatW |
strcat_s , , StringCbCat StringCbCatEx , StringCchCat , , StringCchCatEx strlcat |
Eingeschränkte Fehlererkennung |
strcpy |
strcpy_s , , StringCbCopy StringCbCopyEx , StringCchCopy , , StringCchCopyEx strlcpy |
Keine Begrenzungsüberprüfung |
strcpyA |
strcpy_s , , StringCbCopy StringCbCopyEx , StringCchCopy , , StringCchCopyEx strlcpy |
Keine Begrenzungsüberprüfung |
strncat |
strncat_s , , StringCbCatN StringCbCatNEx , StringCchCatN , , StringCchCatNEx strlcat |
Eingeschränkte Fehlererkennung |
strncpy |
strncpy_s , , StringCbCopyN StringCbCopyNEx , StringCchCopyN , , StringCchCopyNEx strlcpy |
Eingeschränkte Fehlererkennung |
swprintf |
swprintf_s StringCbPrintf , , StringCbPrintf_lEx StringCbPrintf_l , , StringCbPrintf StringCbPrintfEx |
Eingeschränkte Fehlererkennung |
ualstrcpyW |
strcpy_s , , StringCbCopy StringCbCopyEx , StringCchCopy , , StringCchCopyEx strlcpy |
Keine Begrenzungsüberprüfung |
vsnprintf |
vsnprintf_s , StringCbVPrintf , , StringCbVPrintf_lEx StringCbVPrintf_l , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx StringCchVPrintfEx |
Eingeschränkte Fehlererkennung |
vsprintf |
vsprintf_s , StringCbVPrintf , , StringCbVPrintf_lEx StringCbVPrintf_l , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , , , StringCchVPrintf_lEx , , StringCchVPrintfEx vasprintf |
Eingeschränkte Fehlererkennung |
vswprintf |
vswprintf_s |
|
wcscat |
wcscat_s , , StringCbCat StringCbCatEx , StringCchCat , , StringCchCatEx wcslcat |
Eingeschränkte Fehlererkennung |
wcscpy |
wcscpy_s , , StringCbCopy StringCbCopyEx , StringCchCopy , , StringCchCopyEx wcslcpy |
Keine Begrenzungsüberprüfung |
wcsncat |
wcsncat_s , wcslcat |
Eingeschränkte Fehlererkennung |
wcsncpy |
wcsncpy_s , , StringCbCopyN StringCbCopyNEx , StringCchCopyN , , StringCchCopyNEx wcslcpy |
Eingeschränkte Fehlererkennung |
wnsprintf |
StringCbPrintf , , StringCbPrintf_l StringCbPrintf_lEx , StringCbPrintfEx , , StringCchPrintf StringCchPrintfEx |
Keine NULL-Beendigung |
wnsprintfA |
StringCbPrintf , , StringCbPrintf_l StringCbPrintf_lEx , StringCbPrintfEx , , StringCchPrintf StringCchPrintfEx |
Keine NULL-Beendigung |
wsprintf |
StringCbPrintf , , StringCbPrintf_l StringCbPrintf_lEx , StringCbPrintfEx , , StringCchPrintf StringCchPrintfEx |
Keine NULL-Beendigung |
wsprintfA |
StringCbPrintf , , StringCbPrintf_l StringCbPrintf_lEx , StringCbPrintfEx , , StringCchPrintf StringCchPrintfEx |
Keine NULL-Beendigung |
wsprintfW |
StringCbPrintf , , StringCbPrintf_l StringCbPrintf_lEx , StringCbPrintfEx , , StringCchPrintf StringCchPrintfEx |
Keine NULL-Beendigung |
wvnsprintf |
StringCbVPrintf , , StringCbVPrintf_l StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx StringCchVPrintfEx |
Keine NULL-Beendigung |
wvnsprintfA |
StringCbVPrintf , , StringCbVPrintf_l StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx StringCchVPrintfEx |
Keine NULL-Beendigung |
wvnsprintfW |
StringCbVPrintf , , StringCbVPrintf_l StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx StringCchVPrintfEx |
Keine NULL-Beendigung |
wvsprintf |
StringCbVPrintf , , StringCbVPrintf_l StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx StringCchVPrintfEx |
Keine NULL-Beendigung |
wvsprintfA |
StringCbVPrintf , , StringCbVPrintf_l StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx StringCchVPrintfEx |
Keine NULL-Beendigung |
wvsprintfW |
StringCbVPrintf , , StringCbVPrintf_l StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx StringCchVPrintfEx |
Keine NULL-Beendigung |