Udostępnij za pośrednictwem


Informacje o pliku Strsafe.h

Słaba obsługa buforu odpowiada za wiele problemów bezpieczeństwa, które obejmują przekroczenia buforu. Funkcje zdefiniowane w pliku Strsafe.h zapewniają dodatkowe przetwarzanie dla prawidłowej obsługi buforu w kodzie. Z tego powodu mają one zastąpić wbudowane odpowiedniki C/C++, a także określone implementacje systemu Windows. Plik Strsafe.h jest dostępny w zestawie Windows SDK, począwszy od systemu Windows XP z dodatkiem Service Pack 2 (SP2).

Zalety funkcji Strsafe obejmują:

  • Rozmiar buforu docelowego jest zawsze udostępniany funkcji, aby upewnić się, że funkcja nie zapisuje poza końcem buforu.

  • Bufory mają gwarantowane zakończenie zerem, nawet jeśli operacja obcina zamierzony wynik.

  • Wszystkie funkcje zwracają wartość HRESULT z tylko jednym możliwym kodem powodzenia (S_OK).

  • Każda funkcja jest dostępna w odpowiedniej wersji liczby znaków ("cch") lub liczby bajtów ("cb").

  • Większość funkcji ma rozszerzoną wersję ("Ex") dostępną dla zaawansowanych funkcji.

Szczegółowe informacje można znaleźć w poniższych sekcjach.

Funkcje liczenia znaków

Poniższe funkcje używają liczby znaków, a nie liczby bajtów.

Funkcja Zastępuje
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
pobiera, _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

 

Funkcje liczby bajtów

Poniższe funkcje używają liczby bajtów, a nie liczby znaków.

Funkcja Zastępuje
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
pobiera, _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

 

Korzystanie z pliku Strsafe.h

  • Aby użyć wbudowanych funkcji Strsafe, dołącz plik nagłówka, jak pokazano tutaj, postępując zgodnie z instrukcjami #include dla wszystkich innych plików nagłówka.

    #include <strsafe.h>

  • Aby użyć funkcji w kontekście biblioteki, należy dołączyć następującą instrukcję przed dołączeniem pliku Strsafe.h. Zaleca się jednak używanie funkcji wbudowanych.

    #define STRSAFE_LIB

    Notatka

    : Następujące funkcje muszą być używane jako funkcje wbudowane: StringCbGets, StringCbGetsEx, StringCchGetsi StringCchGetsEx.

     

  • Gdy dołączysz Strsafe.h do swojego pliku, starsze funkcje zastąpione przez funkcje Strsafe.h będą uznane za przestarzałe. Próby użycia tych starszych funkcji spowodują błąd kompilatora informujący o użyciu nowszych funkcji. Jeśli chcesz zastąpić to zachowanie, dołącz następującą instrukcję przed dołączeniem pliku Strsafe.h.

    #define STRSAFE_NO_DEPRECATE

  • Aby zezwolić tylko na funkcje liczby znaków, dołącz następującą instrukcję przed dołączeniem pliku Strsafe.h.

    #define STRSAFE_NO_CB_FUNCTIONS

  • Aby zezwolić tylko na funkcje liczby bajtów, przed dołączeniem funkcji Strsafe.h uwzględnij następującą instrukcję.

    #define STRSAFE_NO_CCH_FUNCTIONS

    Notatka

    Można zdefiniować STRSAFE_NO_CB_FUNCTIONS lub STRSAFE_NO_CCH_FUNCTIONS, ale nie obie.

     

  • Niektóre funkcje Strsafe mają wersje obsługujące ustawienia regionalne. Domyślnie nagłówek nie deklaruje tych funkcji. Aby włączyć te deklaracje, przed załączaniem pliku Strsafe.h dołącz następującą instrukcję makra.

    #define STRSAFE_LOCALE_FUNCTIONS

  • Maksymalna obsługiwana długość ciągu to 2 147 483 647 (STRSAFE_MAX_CCH) znaków, ANSI lub Unicode.

Funkcje Strsafe