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 |
|---|---|
| , | |
Byteanzahlfunktionen
Die folgenden Funktionen verwenden eine Byteanzahl anstelle einer Zeichenanzahl.
| Funktion | Ersetzt |
|---|---|
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_LIBHinweis
: 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_DEPRECATEUm nur Zeichenzählungsfunktionen zu ermöglichen, schließen Sie die folgende Anweisung ein, bevor Sie Strsafe.h enthalten.
#define STRSAFE_NO_CB_FUNCTIONSUm nur Byteanzahlfunktionen zu erlauben, schließen Sie die folgende -Anweisung ein, bevor Sie Strsafe.h enthalten.
#define STRSAFE_NO_CCH_FUNCTIONSHinweis
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_FUNCTIONSDie maximal unterstützte Zeichenfolgenlänge beträgt 2.147.483.647 Zeichen (STRSAFE _ MAX _ CCH), entweder ANSI oder Unicode.