警告 C28719
禁止 API の使用: 関数名 は安全でなくなり、非推奨とマークされています。
この警告は、禁止されており、より堅牢または安全な置換を持つ関数が使用されていることを示します。
Remarks
このエラーの対象となるすべての禁止関数の一覧、禁止されている理由、および推奨される置換は、次の例の後にあります。
コード分析名: BANNED_API_USAGE
例
次のコードでは、この警告が生成されます。
void example_func(PSTR src)
{
char dst[100];
strcpy(dst, src);
}
この問題は、安全でない関数 strcpy
の使用に起因します。 strcpy
は、コピー先バッファーがソース データに合わせて十分な大きさであるかどうかを確認しません。
この問題を解決するには、strcpy_s C++11 の安全なこの関数の置き換えを使用できます。 strcpy_s
には、3 番目のパラメーター (コピー先バッファーのサイズ) があり、多数のバイトのみがコピーされるようにします。 たとえば、次のコードの方が安全です。
void example_func(PSTR src)
{
char dst[100];
strcpy_s(dst, sizeof(dst), src);
}
禁止関数
注意: この一覧は積極的に更新され、改善されています
禁止された API | 置換 | 根拠/注意事項 |
---|---|---|
_fstrcat |
StringCbCat 、 StringCbCatEx 、 StringCchCat 、 StringCchCatEx |
従来の 16 ビット 遠方ポインターの実装 |
_fstrcpy |
StringCbCopy 、 StringCbCopyEx 、 StringCchCopy 、 StringCchCopyEx |
従来の 16 ビット 遠方ポインターの実装 |
_fstrncat |
StringCbCatN 、 StringCbCatNEx 、 StringCchCatN 、 StringCchCatNEx |
従来の 16 ビット 遠方ポインターの実装 |
_fstrncpy |
strncpy 、wcsncpy |
従来の 16 ビット 遠方ポインターの実装 |
_ftccat |
strcat 、wcscat |
従来の 16 ビット 遠方ポインターの実装 |
_ftccpy |
strcpy 、wcscpy |
従来の 16 ビット 遠方ポインターの実装 |
_ftcscat |
strcat 、wcscat |
従来の 16 ビット 遠方ポインターの実装 |
_ftcscpy |
strcpy 、wcscpy |
従来の 16 ビット 遠方ポインターの実装 |
_getts |
StringCbGets , StringCbGetsEx , StringCchGets , StringCchGetsEx , gets_s |
データのサイズ制限なし |
_gettws |
gets_s |
データのサイズ制限なし |
_getws |
_getws_s |
データのサイズ制限なし |
_mbccat |
strcat_s , StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx , strlcat |
データのサイズ制限なし |
_makepath |
_makepath_s |
データのサイズ制限なし |
_mbscat |
_mbscat_s |
|
_snprintf |
_snprintf_s |
NULL 終了しない |
_sntprintf |
StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , StringCchPrintfEx |
NULL 終了しない |
_sntscanf |
_snscanf_s |
最大長なし |
_snwprintf |
_snwprintf_s , StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , StringCchPrintfEx |
NULL 終了しない |
_splitpath |
_splitpath_s |
境界チェックなし |
_stprintf |
StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , StringCchPrintfEx |
制限付きエラー検出 |
_stscanf |
sscanf_s (書式指定文字列の変更が必要) |
境界チェックなし |
_tccat |
strcat_s , StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx , strlcat |
境界チェックなし |
_tccpy |
strcpy_s , StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx , strlcpy |
境界チェックなし |
_tcscat |
StringCbCat 、 StringCbCatEx 、 StringCchCat 、 StringCchCatEx |
制限付きエラー検出 |
_tcscpy |
StringCbCopy 、 StringCbCopyEx 、 StringCchCopy 、 StringCchCopyEx |
制限付きエラー検出 |
_tcsncat |
StringCbLength 、 StringCchLength 、 UnalignedStringCbLength 、 UnalignedStringCchLength |
最大長なし |
_tcsncpy |
StringCbCopyN 、 StringCbCopyNEx 、 StringCchCopyN 、 StringCchCopyNEx |
制限付きエラー検出 |
_tmakepath |
_makepath_s |
境界チェックなし |
_tscanf |
scanf_s |
出力の境界チェックなし |
_tsplitpath |
splitpath_s 、wsplitpath_s |
境界チェックなし |
_vsnprintf |
_vsnprintf_s , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
制限付きエラー検出 |
_vsntprintf |
StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
制限付きエラー検出 |
_vsnwprintf |
_vsnwprintf_s , StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx |
制限付きエラー検出 |
_vstprintf |
StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrinfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
最大長なし |
_wmakepath |
_wmakepath_s |
境界チェックなし |
_wsplitpath |
_wsplitpath_s |
境界チェックなし |
OemToCharW |
WideCharToMultiByte |
境界チェックなし |
StrCat |
StringCbCat 、 StringCbCatEx 、 StringCchCat 、 StringCchCatEx |
制限付きエラー検出 |
StrCatA |
StringCbCat 、 StringCbCatEx 、 StringCchCat 、 StringCchCatEx |
制限付きエラー検出 |
StrCatBuff |
StringCbCat 、 StringCbCatEx 、 StringCchCat 、 StringCchCatEx |
NULL 終了なし |
StrCatBuffA |
StringCbCat 、 StringCbCatEx 、 StringCchCat 、 StringCchCatEx |
NULL 終了なし |
StrCatBuffW |
StringCbCat 、 StringCbCatEx 、 StringCchCat 、 StringCchCatEx |
NULL 終了なし |
StrCatChainW |
StringCbCatEx 、 StringCbCatNEx 、 StringCchCatEx 、 StringCchCatNEx |
NULL 終了なし |
StrCatN |
StringCbCat , StringCbCatEx , StringCbCatN , StringCbCatNEx , StringCchCat , StringCchCatEx , StringCchCatN , StringCchCatNEx |
境界チェックなし |
StrCatNA |
StringCbCat , StringCbCatEx , StringCbCatN , StringCbCatNEx , StringCchCat , StringCchCatEx , StringCchCatN , StringCchCatNEx |
境界チェックなし |
StrCatNW |
StringCbCat , StringCbCatEx , StringCbCatN , StringCbCatNEx , StringCchCat , StringCchCatEx , StringCchCatN , StringCchCatNEx |
境界チェックなし |
StrCatW |
StringCbCat , StringCbCatEx , StringCbCatN , StringCbCatNEx , StringCchCat , StringCchCatEx , StringCchCatN , StringCchCatNEx |
境界チェックなし |
StrCpy |
StringCbCopy 、 StringCbCopyEx 、 StringCchCopy 、 StringCchCopyEx |
境界チェックなし |
StrCpyA |
StringCbCopy 、 StringCbCopyEx 、 StringCchCopy 、 StringCchCopyEx |
境界チェックなし |
StrCpyN |
StringCbCopy 、 StringCbCopyEx 、 StringCchCopy 、 StringCchCopyEx |
NULL 終了しない |
StrCpyNA |
StringCbCopy 、 StringCbCopyEx 、 StringCchCopy 、 StringCchCopyEx |
NULL 終了しない |
StrCpyNW |
StringCbCopy 、 StringCbCopyEx 、 StringCchCopy 、 StringCchCopyEx |
制限付きエラー チェック |
strcpyW |
StringCbCopy 、 StringCbCopyEx 、 StringCchCopy 、 StringCchCopyEx |
境界チェックなし |
StrCpyW |
StringCbCopy 、 StringCbCopyEx 、 StringCchCopy 、 StringCchCopyEx |
境界チェックなし |
StrNCat |
StringCbCatN 、 StringCbCatNEx 、 StringCchCatN 、 StringCchCatNEx |
制限付きエラー検出 |
StrNCatA |
StringCbCatN 、 StringCbCatNEx 、 StringCchCatN 、 StringCchCatNEx |
制限付きエラー検出 |
StrNCatW |
StringCbCatN 、 StringCbCatNEx 、 StringCchCatN 、 StringCchCatNEx |
制限付きエラー検出 |
StrNCpy |
StringCbCopy 、 StringCbCopyEx 、 StringCchCopy 、 StringCchCopyEx |
NULL 終了しない |
StrNCpyA |
StringCbCopy 、 StringCbCopyEx 、 StringCchCopy 、 StringCchCopyEx |
NULL 終了しない |
StrNCpyW |
StringCbCopy 、 StringCbCopyEx 、 StringCchCopy 、 StringCchCopyEx |
NULLで終わっていない |
gets |
gets_s , fgets , StringCbGets , StringCbGetsEx , StringCchGets , StringCchGetsEx |
制限付きエラー検出。C11 標準で非推奨 |
lstrcat |
StringCbCat 、 StringCbCatEx 、 StringCchCat 、 StringCchCatEx |
制限付きエラー検出 |
lstrcatA |
StringCbCat 、 StringCbCatEx 、 StringCchCat 、 StringCchCatEx |
制限付きエラー検出 |
lstrcatn |
StringCbCat 、 StringCbCatEx 、 StringCchCat 、 StringCchCatEx |
制限付きエラー検出 |
lstrcatnA |
StringCbCat 、 StringCbCatEx 、 StringCchCat 、 StringCchCatEx |
制限付きエラー検出 |
lstrcatnW |
StringCbCat 、 StringCbCatEx 、 StringCchCat 、 StringCchCatEx |
制限付きエラー検出 |
lstrcatW |
StringCbCat 、 StringCbCatEx 、 StringCchCat 、 StringCchCatEx |
制限付きエラー検出 |
lstrcpy |
StringCbCopy 、 StringCbCopyEx 、 StringCchCopy 、 StringCchCopyEx |
境界チェックなし |
lstrcpyA |
StringCbCopy 、 StringCbCopyEx 、 StringCchCopy 、 StringCchCopyEx |
境界チェックなし |
lstrcpyn |
StringCbCopy 、 StringCbCopyEx 、 StringCchCopy 、 StringCchCopyEx |
制限付きエラー検出 |
lstrcpynA |
StringCbCopy 、 StringCbCopyEx 、 StringCchCopy 、 StringCchCopyEx |
制限付きエラー検出 |
lstrcpynW |
StringCbCopy 、 StringCbCopyEx 、 StringCchCopy 、 StringCchCopyEx |
境界チェックなし |
lstrcpyW |
StringCbCopy 、 StringCbCopyEx 、 StringCchCopy 、 StringCchCopyEx |
境界チェックなし |
snscanf |
sscanf_s |
境界チェックなし |
snwscanf |
swscanf_s |
境界チェックなし |
sprintf |
sprintf_s |
制限付きエラー検出 |
sprintfA |
sprintf_s |
境界チェックなし |
sprintfW |
swprintf_s |
境界チェックなし |
lstrncat |
StringCbCat 、 StringCbCatEx 、 StringCchCat 、 StringCchCatEx |
制限付きエラー検出 |
makepath |
||
nsprintf |
sprintf_s |
エラー検出または境界チェックなし |
strcat |
strcat_s , StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx , strlcat |
制限付きエラー検出 |
strcatA |
strcat_s , StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx , strlcat |
制限付きエラー検出 |
strcatW |
strcat_s , StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx , strlcat |
制限付きエラー検出 |
strcpy |
strcpy_s , StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx , strlcpy |
境界チェックなし |
strcpyA |
strcpy_s , StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx , strlcpy |
境界チェックなし |
strncat |
strncat_s , StringCbCatN , StringCbCatNEx , StringCchCatN , StringCchCatNEx , strlcat |
制限付きエラー検出 |
strncpy |
strncpy_s , StringCbCopyN , StringCbCopyNEx , StringCchCopyN , StringCchCopyNEx , strlcpy |
制限付きエラー検出 |
swprintf |
swprintf_s StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintf , StringCbPrintfEx |
制限付きエラー検出 |
ualstrcpyW |
strcpy_s , StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx , strlcpy |
境界チェックなし |
vsnprintf |
vsnprintf_s , StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
制限付きエラー検出 |
vsprintf |
vsprintf_s , StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx , vasprintf |
制限付きエラー検出 |
vswprintf |
vswprintf_s |
|
wcscat |
wcscat_s , StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx , wcslcat |
制限付きエラー検出 |
wcscpy |
wcscpy_s , StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx , wcslcpy |
境界チェックなし |
wcsncat |
wcsncat_s 、wcslcat |
制限付きエラー検出 |
wcsncpy |
wcsncpy_s , StringCbCopyN , StringCbCopyNEx , StringCchCopyN , StringCchCopyNEx , wcslcpy |
制限付きエラー検出 |
wnsprintf |
StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , StringCchPrintfEx |
NULL 終了なし |
wnsprintfA |
StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , StringCchPrintfEx |
NULL 終了なし |
wsprintf |
StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , StringCchPrintfEx |
NULL 終了なし |
wsprintfA |
StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , StringCchPrintfEx |
NULL 終了なし |
wsprintfW |
StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , StringCchPrintfEx |
NULL 終了なし |
wvnsprintf |
StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
NULL 終了なし |
wvnsprintfA |
StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
NULL 終了なし |
wvnsprintfW |
StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
NULL 終了なし |
wvsprintf |
StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
NULL 終了なし |
wvsprintfA |
StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
NULL 終了なし |
wvsprintfW |
StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
NULL 終了なし |