Informações sobre Strsafe.h

O mau tratamento de 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 manipulação adequada de buffer em seu código. Por esse motivo, eles se destinam a substituir suas contrapartes internas de 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 do Strsafe incluem:

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

  • É garantido que os buffers sejam 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
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, _tcscat
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 em forma de biblioteca, inclua a instrução a seguir 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ê inclui Strsafe.h em seu arquivo, as funções mais antigas substituídas pelas funções Strsafe.h serão preteridas. Tentativas de usar essas funções mais antigas resultarão em um erro do compilador dizendo 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 da cadeia de caracteres suportada é de 2.147.483.647 (STRSAFE_MAX_CCH) caracteres, ANSI ou Unicode.

Funções Strsafe