Informationen zu Strsafe.h

Eine schlechte Pufferbehandlung ist in vielen Sicherheitsproblemen mit Pufferüberläufen zu sehen. Die in Strsafe.h definierten Funktionen bieten zusätzliche Verarbeitung für die richtige Pufferbehandlung in Ihrem Code. Aus diesem Grund sollen sie ihre integrierten C/C++-Entsprechungen sowie bestimmte Windows ersetzen. Strsafe.h ist im Windows SDK ab Windows XP mit Service Pack 2 (SP2) verfügbar.

Die Strsafe-Funktionen bieten u. a. folgende Vorteile:

  • Die Größe des Zielpuffers wird der Funktion immer bereitgestellt, um sicherzustellen, dass die Funktion nicht über das Ende des Puffers schreibt.

  • Puffer werden garantiert mit NULL beendet, auch wenn der Vorgang das beabsichtigte Ergebnis abschneiden kann.

  • Alle Funktionen geben einen HRESULT-Wert zurück, mit nur einem möglichen Erfolgscode (S _ OK).

  • Jede Funktion ist in einer entsprechenden Zeichenanzahl ("cch") oder Byteanzahl ("cb")-Version verfügbar.

  • Die meisten Funktionen verfügen über eine erweiterte Version ("Ex"), die für erweiterte Funktionen verfügbar ist.

Weitere Informationen hierzu finden Sie in den nachfolgenden Abschnitten.

Funktionen für die Zeichenanzahl

Die folgenden Funktionen verwenden eine Zeichenanzahl anstelle einer Byteanzahl.

Funktion Ersetzt
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
gets, _ 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

Byteanzahlfunktionen

Die folgenden Funktionen verwenden eine Byteanzahl anstelle einer Zeichenanzahl.

Funktion Ersetzt
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
gets, _ 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

Verwenden von Strsafe.h

  • Um die Strsafe-Funktionen inline zu verwenden, schließen Sie die Headerdatei wie hier gezeigt ein, und folgen Sie dabei den # include-Anweisungen für alle anderen Headerdateien.

    #include <strsafe.h>

  • Um die Funktionen in Bibliotheksform zu verwenden, schließen Sie die folgende Anweisung ein, bevor Sie Strsafe.h hinzufügen. Es wird jedoch empfohlen, die Inlinefunktionen zu verwenden.

    #define STRSAFE_LIB

    Hinweis

    : Die folgenden Funktionen müssen als Inlinefunktionen verwendet werden: StringCbGets, StringCbGetsEx, StringCchGetsund StringCchGetsEx.

  • Wenn Sie Strsafe.h in Ihre Datei einreihen, sind die älteren Funktionen, die durch die Strsafe.h-Funktionen ersetzt werden, veraltet. Versuche, diese älteren Funktionen zu verwenden, führen zu einem Compilerfehler, der Sie anfing, die neueren Funktionen zu verwenden. Wenn Sie dieses Verhalten außer Kraft setzen möchten, schließen Sie die folgende Anweisung ein, bevor Sie Strsafe.h enthalten.

    #define STRSAFE_NO_DEPRECATE

  • Um nur Zeichenzählungsfunktionen zu ermöglichen, schließen Sie die folgende Anweisung ein, bevor Sie Strsafe.h enthalten.

    #define STRSAFE_NO_CB_FUNCTIONS

  • Um nur Byteanzahlfunktionen zu erlauben, schließen Sie die folgende -Anweisung ein, bevor Sie Strsafe.h enthalten.

    #define STRSAFE_NO_CCH_FUNCTIONS

    Hinweis

    Sie können STRSAFE _ NO CB _ FUNCTIONS _ oder STRSAFE NO _ _ CCH _ FUNCTIONS definieren, aber nicht beide.

  • Einige Strsafe-Funktionen verfügen über lokal orientierte Versionen. Standardmäßig deklariert der Header diese Funktionen nicht. Um diese Deklarationen zu aktivieren, schließen Sie die folgende Makro-Anweisung ein, bevor Sie Strsafe.h enthalten.

    #define STRSAFE_LOCALE_FUNCTIONS

  • Die maximal unterstützte Zeichenfolgenlänge beträgt 2.147.483.647 Zeichen (STRSAFE _ MAX _ CCH), entweder ANSI oder Unicode.

Strsafe-Funktionen