다음을 통해 공유


Strsafe.h 정보

버퍼 처리 불량은 버퍼 오버런과 관련된 많은 보안 문제에 연루됩니다. Strsafe.h에 정의된 함수는 코드에서 적절한 버퍼 처리를 위한 추가 처리를 제공합니다. 이러한 이유로 기본 제공 C/C++ 대응 항목과 특정 Windows 구현을 대체하기 위한 것입니다. Strsafe.h는 Windows XP SP2(서비스 팩 2)부터 Windows SDK에서 사용할 수 있습니다.

Strsafe 함수의 장점은 다음과 같습니다.

  • 대상 버퍼의 크기는 함수가 버퍼의 끝을 지나서 작성되지 않도록 항상 함수에 제공됩니다.

  • 버퍼는 작업이 의도한 결과를 자르더라도 null로 종료되도록 보장됩니다.

  • 모든 함수는 가능한 성공 코드(S_OK)만 사용하여 HRESULT 값을 반환합니다.

  • 각 함수는 해당 문자 수("cch") 또는 바이트 수("cb") 버전에서 사용할 수 있습니다.

  • 대부분의 함수에는 고급 기능에 사용할 수 있는 확장("Ex") 버전이 있습니다.

자세한 내용은 다음 섹션을 참조하세요.

문자 수 함수

다음 함수는 바이트 개수가 아닌 문자 수를 사용합니다.

함수 대체
StringCchCat
StringCchCatEx
strcat, wcscat, _tcsat
lstrcat
StrCat
StrCatBuff
StringCchCatN
StringCchCatNEx
strncat
StrNCat
StringCchCopy
StringCchCopyEx
strcpy, wcscpy, _tcscpy
lstrcpy
Strcpy
StringCchCopyN
StringCchCopyNEx
strncpy, wcsncpy, _tcsncpy
StringCchGets
StringCchGetsEx
가져오기, _getws, _getts
StringCchPrintf
StringCchPrintfEx
sprintf, swprintf, _stprintf
wsprintf
wnsprintf
_snprintf, _snwprintf, _sntprintf
StringCchVPrintf
StringCchVPrintfEx
vsprintf, vswprintf, _vstprintf
vsnprintf, _vsnwprintf, _vsntprintf
wvsprintf
wvnsprintf
,
StringCchLength
strlen, wcslen, _tcslen

 

바이트 수 함수

다음 함수는 문자 수가 아닌 바이트 수를 사용합니다.

함수 대체
StringCbCat
StringCbCatEx
strcat, wcscat, _tcsat
lstrcat
StrCat
StrCatBuff
StringCbCatN
StringCbCatNEx
strncat
StrNCat
StringCbCopy
StringCbCopyEx
strcpy, wcscpy, _tcscpy
lstrcpy
Strcpy
StringCbCopyN
StringCbCopyNEx
strncpy, wcsncpy, _tcsncpy
StringCbGets
StringCbGetsEx
가져오기, _getws, _getts
StringCbPrintf
StringCbPrintfEx
sprintf, swprintf, _stprintf
wsprintf
wnsprintf
_snprintf, _snwprintf, _sntprintf
StringCbVPrintf
StringCbVPrintfEx
vsprintf, vswprintf, _vstprintf
vsnprintf, _vsnwprintf, _vsntprintf
wvsprintf
wvnsprintf
StringCbLength
strlen, wcslen, _tcslen

 

Strsafe.h 사용

  • Strsafe 함수를 인라인으로 사용하려면 다른 모든 헤더 파일에 대한 #include 문에 따라 여기에 표시된 대로 헤더 파일을 포함합니다.

    #include <strsafe.h>

  • 라이브러리 형식의 함수를 사용하려면 Strsafe.h를 포함하기 전에 다음 문을 포함합니다. 그러나 인라인 함수를 사용하는 것이 좋습니다.

    #define STRSAFE_LIB

    참고

    : StringCbGets, StringCbGetsEx, StringCchGetsStringCchGetsEx 함수를 인라인 함수로 사용해야 합니다.

     

  • 파일에 Strsafe.h를 포함하면 Strsafe.h 함수로 대체된 이전 함수는 더 이상 사용되지 않습니다. 이러한 이전 함수를 사용하려고 하면 컴파일러 오류가 발생하여 최신 함수를 사용하라는 메시지가 표시됩니다. 이 동작을 재정의하려면 Strsafe.h를 포함하기 전에 다음 문을 포함합니다.

    #define STRSAFE_NO_DEPRECATE

  • 문자 개수 함수만 허용하려면 Strsafe.h를 포함하기 전에 다음 문을 포함합니다.

    #define STRSAFE_NO_CB_FUNCTIONS

  • 바이트 개수 함수만 허용하려면 Strsafe.h를 포함하기 전에 다음 문을 포함합니다.

    #define STRSAFE_NO_CCH_FUNCTIONS

    참고

    STRSAFE_NO_CB_FUNCTIONS 또는 STRSAFE_NO_CCH_FUNCTIONS 정의할 수 있지만 둘 다 정의할 수는 없습니다.

     

  • 일부 Strsafe 함수에는 로캘 인식 버전이 있습니다. 기본적으로 헤더는 이러한 함수를 선언하지 않습니다. 이러한 선언을 사용하도록 설정하려면 Strsafe.h를 포함하기 전에 다음 매크로 문을 포함합니다.

    #define STRSAFE_LOCALE_FUNCTIONS

  • 지원되는 최대 문자열 길이는 ANSI 또는 유니코드인 2,147,483,647자(STRSAFE_MAX_CCH) 문자입니다.

Strsafe 함수