Aracılığıyla paylaş


Uyarı C28719

Yasaklanmış API Kullanımı: işlev adı güvenli değildir ve kullanım dışı olarak işaretlenmiştir.

Bu uyarı, yasaklanmış ve daha sağlam veya güvenli bir değiştirmesi olan bir işlevin kullanıldığını gösterir.

Açıklamalar

Bu hatanın kapsamına alınan tüm yasaklanmış işlevlerin listesi, bunların neden yasaklandığı ve önerilen değiştirmeler aşağıdaki örnekten sonra bulunabilir.

Kod analizi adı: BANNED_API_USAGE

Örnek

Aşağıdaki kod bu uyarıyı oluşturur:

void example_func(PSTR src) 
{ 
    char dst[100]; 
    strcpy(dst, src);
} 

Bu sorun, strcpygüvenli olmayan işlevinin kullanımından kaynaklandığını gösterir. strcpy hedef arabelleğin kaynak verilere sığacak kadar büyük olup olmadığını denetlemez.

Bu sorunu çözmek için, C++11'in bu işlev için sunduğu daha güvenli bir alternatif olan strcpy_s'i kullanabiliriz. strcpy_s, yalnızca çok sayıda bayt kopyalandığından emin olmak için üçüncü bir parametreye (hedef arabelleğin boyutu) sahiptir. Örneğin, aşağıdaki kod daha güvenlidir:

void example_func(PSTR src) 
{ 
    char dst[100]; 
    strcpy_s(dst, sizeof(dst), src); 
}

Yasaklanmış İşlevler

NOT: Bu liste etkin bir şekilde güncelleniyor ve geliştiriliyor

Yasaklanmış API Değiştirmeler Gerekçe / Notlar
_fstrcat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Eski 16 bit uzak işaretçi uygulaması
_fstrcpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Eski 16 bit uzak işaretçi uygulaması
_fstrncat StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Eski 16 bit uzak işaretçi uygulaması
_fstrncpy strncpy, wcsncpy Eski 16 bit uzak işaretçi uygulaması
_ftccat strcat, wcscat Eski 16 bit uzak işaretçi uygulaması
_ftccpy strcpy, wcscpy Eski 16 bit uzak işaretçi uygulaması
_ftcscat strcat, wcscat Eski 16 bit uzak işaretçi uygulaması
_ftcscpy strcpy, wcscpy Eski 16 bit uzak işaretçi uygulaması
_getts StringCbGets, StringCbGetsEx, StringCchGets, StringCchGetsEx, gets_s Verilerde boyut sınırı yok
_gettws gets_s Verilerde boyut sınırı yok
_getws _getws_s Verilerde boyut sınırı yok
_mbccat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Verilerde boyut sınırı yok
_makepath _makepath_s Verilerde boyut sınırı yok
_mbscat _mbscat_s
_snprintf _snprintf_s NULL ile sonlandırılmaz
_sntprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx NULL ile sonlandırılmaz
_sntscanf _snscanf_s Uzunluk üst sınırı yok
_snwprintf _snwprintf_s, StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx NULL ile sonlandırılmaz
_splitpath _splitpath_s Sınır denetimi yok
_stprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Sınırlı hata algılama
_stscanf sscanf_s (biçim dizesi değişiklikleri gerektirir) Sınır denetimi yok
_tccat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Sınır denetimi yok
_tccpy strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy Sınır denetimi yok
_tcscat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Sınırlı hata algılama
_tcscpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sınırlı hata algılama
_tcsncat StringCbLength, StringCchLength, UnalignedStringCbLength, UnalignedStringCchLength Uzunluk üst sınırı yok
_tcsncpy StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx Sınırlı hata algılama
_tmakepath _makepath_s Sınır denetimi yok
_tscanf scanf_s Çıkışlar için sınır denetimi yok
_tsplitpath splitpath_s, wsplitpath_s Sınır denetimi yok
_vsnprintf _vsnprintf_s, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Sınırlı hata algılama
_vsntprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Sınırlı hata algılama
_vsnwprintf _vsnwprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx Sınırlı hata algılama
_vstprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrinfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Uzunluk üst sınırı yok
_wmakepath _wmakepath_s Sınır denetimi yok
_wsplitpath _wsplitpath_s Sınır denetimi yok
OemToCharW WideCharToMultiByte Sınır denetimi yok
StrCat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Sınırlı hata algılama
StrCatA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Sınırlı hata algılama
StrCatBuff StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx NULL sonlandırma yok
StrCatBuffA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx NULL sonlandırma yok
StrCatBuffW StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx NULL sonlandırma yok
StrCatChainW StringCbCatEx, StringCbCatNEx, StringCchCatEx, StringCchCatNEx NULL ile sonlandırma yok
StrCatN StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx Sınır denetimi yok
StrCatNA StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx Sınır denetimi yok
StrCatNW StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx Sınır denetimi yok
StrCatW StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx Sınır denetimi yok
StrCpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sınır denetimi yok
StrCpyA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sınır denetimi yok
StrCpyN StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx NULL ile sonlandırılmaz
StrCpyNA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx NULL ile sonlandırılmaz
StrCpyNW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sınırlı hata denetimi
strcpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sınır denetimi yok
StrCpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sınır denetimi yok
StrNCat StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Sınırlı hata algılama
StrNCatA StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Sınırlı hata algılama
StrNCatW StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Sınırlı hata algılama
StrNCpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx NULL ile sonlandırılmaz
StrNCpyA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx NULL ile sonlandırılmaz
StrNCpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx NULL ile sonlandırılmaz
gets gets_s, fgets, StringCbGets, StringCbGetsEx, StringCchGets, StringCchGetsEx Sınırlı hata algılama; C11 standardı tarafından kullanım dışı bırakıldı
lstrcat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Sınırlı hata algılama
lstrcatA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Sınırlı hata algılama
lstrcatn StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Sınırlı hata algılama
lstrcatnA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Sınırlı hata algılama
lstrcatnW StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Sınırlı hata algılama
lstrcatW StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Sınırlı hata algılama
lstrcpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sınır denetimi yok
lstrcpyA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sınır denetimi yok
lstrcpyn StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sınırlı hata algılama
lstrcpynA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sınırlı hata algılama
lstrcpynW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sınır denetimi yok
lstrcpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sınır denetimi yok
snscanf sscanf_s Sınır denetimi yok
snwscanf swscanf_s Sınır denetimi yok
sprintf sprintf_s Sınırlı hata algılama
sprintfA sprintf_s Sınır denetimi yok
sprintfW swprintf_s Sınır denetimi yok
lstrncat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Sınırlı hata algılama
makepath
nsprintf sprintf_s Hata algılama veya sınır denetimi yok
strcat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Sınırlı hata algılama
strcatA strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Sınırlı hata algılama
strcatW strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Sınırlı hata algılama
strcpy strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy Sınır denetimi yok
strcpyA strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy Sınır denetimi yok
strncat strncat_s, StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx, strlcat Sınırlı hata algılama
strncpy strncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx, strlcpy Sınırlı hata algılama
swprintf swprintf_s StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintf, StringCbPrintfEx Sınırlı hata algılama
ualstrcpyW strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy Sınır denetimi yok
vsnprintf vsnprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Sınırlı hata algılama
vsprintf vsprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx, vasprintf Sınırlı hata algılama
vswprintf vswprintf_s
wcscat wcscat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, wcslcat Sınırlı hata algılama
wcscpy wcscpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, wcslcpy Sınır denetimi yok
wcsncat wcsncat_s, wcslcat Sınırlı hata algılama
wcsncpy wcsncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx, wcslcpy Sınırlı hata algılama
wnsprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx NULL sonlandırma yok
wnsprintfA StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx NULL sonlandırma yok
wsprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx NULL ile bitirme yok
wsprintfA StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx NULL ile sonlandırma yapılmıyor
wsprintfW StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx NULL ile sonlandırma yok
wvnsprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx NULL ile sonlandırma yok
wvnsprintfA StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx NULL sonlandırma yok
wvnsprintfW StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx "NULL" ile termine edilmedi
wvsprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx NULL sonlandırması yapılmamış
wvsprintfA StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx NULL ile sonlandırma yapılmamış
wvsprintfW StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx NULL sonlandırma yok