Partilhar via


Informações sobre Strsafe.h

O manuseio inadequado do buffer está implicado em muitos problemas de segurança que envolvem saturações de buffer. As funções definidas em Strsafe.h fornecem processamento adicional para o tratamento adequado do buffer em seu código. Por esse motivo, eles se destinam a substituir suas contrapartes C/C++ internas, bem como implementações específicas do Windows. Strsafe.h está disponível no SDK do Windows a partir do Windows XP com Service Pack 2 (SP2).

As vantagens das funções do Strsafe incluem:

  • O tamanho do buffer de destino é sempre fornecido à função para garantir que a função não grave além do final do buffer.

  • Os buffers têm a garantia de serem terminados em nulo, mesmo que a operação trunce o resultado pretendido.

  • Todas as funções retornam um valor HRESULT , com apenas um código de êxito possível (S_OK).

  • Cada função está disponível em uma versão correspondente de contagem de caracteres ("cch") ou contagem de bytes ("cb").

  • A maioria das funções tem uma versão estendida ("Ex") disponível para funcionalidade avançada.

Confira as seções a seguir para obter detalhes.

Funções de contagem de caracteres

As funções a seguir usam uma contagem de caracteres em vez de uma contagem de bytes.

Função Substitui
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
fica, _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

 

Funções de contagem de bytes

As funções a seguir usam uma contagem de bytes em vez de uma contagem de caracteres.

Função Substitui
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
fica, _getws, _getts
StringCbPrintf
StringCbPrintfEx
sprintf, swprintf, _stprintf
wsprintf
wnsprintf
_snprintf, _snwprintf, _sntprintf
StringCbVPrintf
StringCbVPrintfEx
vsprintf, vswprintf, _vstprintf
vsnprintf, _vsnwprintf, _vsntprintf
wvsprintf
wvnsprintf
Comprimento da Cadeia de Caracteres
strlen, wcslen, _tcslen

 

Usando Strsafe.h

  • Para usar as funções Strsafe embutidas, inclua o arquivo de cabeçalho conforme mostrado aqui, seguindo as instruções #include para todos os outros arquivos de cabeçalho.

    #include <strsafe.h>

  • Para usar as funções no formato de biblioteca, inclua a seguinte instrução antes de incluir Strsafe.h. No entanto, é recomendável usar as funções embutidas.

    #define STRSAFE_LIB

    Observação

    : As seguintes funções devem ser usadas como funções embutidas: StringCbGets, StringCbGetsEx, StringCchGets e StringCchGetsEx.

     

  • Quando você inclui Strsafe.h em seu arquivo, as funções mais antigas substituídas pelas funções Strsafe.h serão preteridas. As tentativas de usar essas funções mais antigas resultarão em um erro do compilador informando para você usar as funções mais recentes. Se você quiser substituir esse comportamento, inclua a seguinte instrução antes de incluir Strsafe.h.

    #define STRSAFE_NO_DEPRECATE

  • Para permitir apenas funções de contagem de caracteres, inclua a instrução a seguir antes de incluir Strsafe.h.

    #define STRSAFE_NO_CB_FUNCTIONS

  • Para permitir apenas funções de contagem de bytes, inclua a instrução a seguir antes de incluir Strsafe.h.

    #define STRSAFE_NO_CCH_FUNCTIONS

    Observação

    Você pode definir STRSAFE_NO_CB_FUNCTIONS ou STRSAFE_NO_CCH_FUNCTIONS, mas não ambos.

     

  • Algumas funções do Strsafe têm versões com reconhecimento de localidade. Por padrão, o cabeçalho não declara essas funções. Para habilitar essas declarações, inclua a seguinte instrução de macro antes de incluir Strsafe.h.

    #define STRSAFE_LOCALE_FUNCTIONS

  • O comprimento máximo de cadeia de caracteres com suporte é de 2.147.483.647 (STRSAFE_MAX_CCH) caracteres, ANSI ou Unicode.

Funções do Strsafe