Partager via


À propos de Strsafe.h

Une mauvaise gestion des mémoires tampons est impliquée dans de nombreux problèmes de sécurité qui impliquent des dépassements de mémoire tampon. Les fonctions définies dans Strsafe.h fournissent un traitement supplémentaire pour la gestion appropriée des mémoires tampons dans votre code. Pour cette raison, ils sont destinés à remplacer leurs équivalents C/C++ intégrés ainsi que des implémentations Windows spécifiques. Strsafe.h est disponible dans le Kit de développement logiciel (SDK) Windows à partir de Windows XP avec Service Pack 2 (SP2).

Les avantages des fonctions Strsafe sont les suivants :

  • La taille de la mémoire tampon de destination est toujours fournie à la fonction pour s’assurer que la fonction n’écrit pas au-delà de la fin de la mémoire tampon.

  • Les mémoires tampons sont garanties comme étant terminées par null, même si l’opération tronque le résultat prévu.

  • Toutes les fonctions retournent une valeur HRESULT, avec un seul code de réussite possible (S_OK).

  • Chaque fonction est disponible dans une version correspondante du nombre de caractères (« cch ») ou du nombre d’octets (« cb »).

  • La plupart des fonctions ont une version étendue (« Ex ») disponible pour les fonctionnalités avancées.

Pour plus d’informations, consultez les sections suivantes.

Fonctions de nombre de caractères

Les fonctions suivantes utilisent un nombre de caractères plutôt qu’un nombre d’octets.

Fonction Remplace
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
obtient, _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

 

Fonctions de nombre d’octets

Les fonctions suivantes utilisent un nombre d’octets plutôt qu’un nombre de caractères.

Fonction Remplace
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
obtient, _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

 

Utilisation de Strsafe.h

  • Pour utiliser les fonctions Strsafe inline, incluez le fichier d’en-tête comme indiqué ici, en suivant les instructions #include pour tous les autres fichiers d’en-tête.

    #include <strsafe.h>

  • Pour utiliser les fonctions sous forme de bibliothèque, incluez l’instruction suivante avant d’inclure Strsafe.h. Toutefois, il est recommandé d’utiliser les fonctions inline.

    #define STRSAFE_LIB

    Remarque

    : Les fonctions suivantes doivent être utilisées comme fonctions inline : StringCbGets, StringCbGetsEx, StringCchGets et StringCchGetsEx.

     

  • Lorsque vous incluez Strsafe.h dans votre fichier, les anciennes fonctions remplacées par les fonctions Strsafe.h sont déconseillées. Les tentatives d’utilisation de ces fonctions plus anciennes entraînent une erreur du compilateur vous indiquant d’utiliser les fonctions plus récentes. Si vous souhaitez remplacer ce comportement, incluez l’instruction suivante avant d’inclure Strsafe.h.

    #define STRSAFE_NO_DEPRECATE

  • Pour autoriser uniquement les fonctions de nombre de caractères, incluez l’instruction suivante avant d’inclure Strsafe.h.

    #define STRSAFE_NO_CB_FUNCTIONS

  • Pour autoriser uniquement les fonctions de nombre d’octets, incluez l’instruction suivante avant d’inclure Strsafe.h.

    #define STRSAFE_NO_CCH_FUNCTIONS

    Remarque

    Vous pouvez définir STRSAFE_NO_CB_FUNCTIONS ou STRSAFE_NO_CCH_FUNCTIONS, mais pas les deux.

     

  • Certaines fonctions Strsafe ont des versions prenant en charge les paramètres régionaux. Par défaut, l’en-tête ne déclare pas ces fonctions. Pour activer ces déclarations, incluez l’instruction macro suivante avant d’inclure Strsafe.h.

    #define STRSAFE_LOCALE_FUNCTIONS

  • La longueur maximale de chaîne prise en charge est de 2 147 483 647 caractères (STRSAFE_MAX_CCH), ANSI ou Unicode.

Fonctions Strsafe