Поделиться через


Сведения о Strsafe.h

Низкая обработка буфера связана со многими проблемами безопасности, включающими переполнение буфера. Функции, определенные в Strsafe.h, обеспечивают дополнительную обработку буферов в коде. По этой причине они предназначены для замены встроенных аналогов C/C++, а также конкретных реализаций Windows. Strsafe.h доступен в пакете SDK для Windows, начиная с Windows XP с пакетом обновления 2 (SP2).

Преимущества функций Strsafe:

  • Размер целевого буфера всегда предоставляется функции, чтобы убедиться, что функция не записывает в конец буфера.

  • Буферы гарантированно завершаются значением NULL, даже если операция усечет предполагаемый результат.

  • Все функции возвращают значение HRESULT с одним возможным кодом успешного выполнения (S_OK).

  • Каждая функция доступна в соответствующей версии числа символов (cch) или числа байтов (cb).

  • Большинство функций имеют расширенную (ex) версию, доступную для расширенных функций.

Дополнительные сведения см. в следующих разделах.

Функции подсчета символов

В следующих функциях используется число символов, а не число байтов.

Function Заменяет
StringCchCat
StringCchCatEx
strcat, wcscat, _tcscat
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

 

Функции счетчика байтов

В следующих функциях используется число байтов, а не число символов.

Function Заменяет
StringCbCat
StringCbCatEx
strcat, wcscat, _tcscat
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, StringCchGets и StringCchGetsEx.

     

  • При включении 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

  • Максимальная поддерживаемая длина строки составляет 2 147 483 647 символов (STRSAFE_MAX_CCH), ANSI или Юникод.

Функции Strsafe