Informationen zu „Strsafe.h“

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

Zu den Vorteilen der Strsafe-Funktionen gehören:

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

  • Puffer werden garantiert null-beendet, auch wenn der Vorgang das beabsichtigte Ergebnis abschneidet.

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

  • Jede Funktion ist in einer entsprechenden Zeichenanzahl ("cch") oder byte count ("cb") version verfügbar.

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

Weitere Informationen hierzu finden Sie in den nachfolgenden Abschnitten.

Zeichenanzahlfunktionen

In den folgenden Funktionen wird anstelle einer Byteanzahl eine Zeichenanzahl verwendet.

Funktion Ersetzungen
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
abrufen, _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

 

Byteanzahl-Funktionen

In den folgenden Funktionen wird anstelle einer Zeichenanzahl eine Byteanzahl verwendet.

Funktion Ersetzungen
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
abrufen, _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, fügen Sie die Headerdatei wie hier gezeigt ein, und folgen Sie den #include Anweisungen für alle anderen Headerdateien.

    #include <strsafe.h>

  • Um die Funktionen im Bibliotheksformular zu verwenden, schließen Sie die folgende Anweisung ein, bevor Sie Strsafe.h einschließen. Es wird jedoch empfohlen, die Inlinefunktionen zu verwenden.

    #define STRSAFE_LIB

    Hinweis

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

     

  • Wenn Sie Strsafe.h in Ihre Datei einschließen, 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 angibt, 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 einschließen.

    #define STRSAFE_NO_DEPRECATE

  • Um nur Zeichenanzahlfunktionen zuzulassen, schließen Sie die folgende Anweisung ein, bevor Strsafe.h eingeschlossen wird.

    #define STRSAFE_NO_CB_FUNCTIONS

  • Um nur Byteanzahlfunktionen zuzulassen, schließen Sie die folgende Anweisung ein, bevor Strsafe.h eingeschlossen wird.

    #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 Gebietsschema-fähige Versionen. Standardmäßig deklariert der Header diese Funktionen nicht. Um diese Deklarationen zu aktivieren, schließen Sie die folgende Makroanweisung ein, bevor Sie Strsafe.h einschließen.

    #define STRSAFE_LOCALE_FUNCTIONS

  • Die maximal unterstützte Zeichenfolgenlänge beträgt 2.147.483.647 (STRSAFE_MAX_CCH) Zeichen, entweder ANSI- oder Unicode-Zeichen.

Strsafe-Funktionen