Informações sobre Strsafe.h

A má manipulação de buffer está implicada em muitos problemas de segurança que envolvem estouros de buffer. As funções definidas em Strsafe.h fornecem processamento adicional para tratamento de buffer adequado em seu código. Por esse motivo, eles se destinam a substituir suas contrapartes internas do C/C++, 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 Strsafe incluem:

  • O tamanho do buffer de destino sempre é fornecido à função para garantir que a função não escreva após o final do buffer.

  • É garantido que os buffers sejam encerrados em nulo, mesmo que a operação trunque 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 de contagem de caracteres correspondente ("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, _tcsat
lstrcat
Strcat
StrCatBuff
StringCchCatN
StringCchCatNEx
strncat
Strncat
StringCchCopy
StringCchCopyEx
strcpy, wcscpy, _tcscpy
lstrcpy
Strcpy
StringCchCopyN
StringCchCopyNEx
strncpy, wcsncpy, _tcsncpy
StringCchGets
StringCchGetsEx
obtém, _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, _tcsat
lstrcat
Strcat
StrCatBuff
StringCbCatN
StringCbCatNEx
strncat
Strncat
StringCbCopy
StringCbCopyEx
strcpy, wcscpy, _tcscpy
lstrcpy
Strcpy
StringCbCopyN
StringCbCopyNEx
strncpy, wcsncpy, _tcsncpy
StringCbGets
StringCbGetsEx
obtém, _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

 

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 formulário de biblioteca, inclua a seguinte instrução antes de incluir Strsafe.h. No entanto, é recomendável que você use 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ê incluir 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 instrução a seguir antes de incluir Strsafe.h.

    #define STRSAFE_NO_DEPRECATE

  • Para permitir apenas funções de contagem de caracteres, inclua a seguinte instrução 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 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 macro antes de incluir Strsafe.h.

    #define STRSAFE_LOCALE_FUNCTIONS

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

Funções Strsafe