Udostępnij przez


Korzystanie z bezpiecznych funkcji ciągów

Wiele problemów z zabezpieczeniami systemu jest powodowanych przez słabą obsługę buforu i wynikowe przepełnienie buforu. Słaba obsługa buforu jest często skojarzona z operacjami manipulowania ciągami. Standardowe funkcje manipulowania ciągami dostarczane przez biblioteki środowiska uruchomieniowego języka C/C++ (strcat, strcpy, sprintf itd.) nie uniemożliwiają zapisywania poza końcem.

Dwa nowe zestawy funkcji manipulowania ciągami, nazywane bezpiecznymi funkcjami ciągów, zapewniają dodatkowe przetwarzanie do prawidłowej obsługi buforu w kodzie. Te bezpieczne funkcje ciągów są dostępne w Windows Driver Kit (WDK) oraz dla Microsoft Windows XP z dodatkiem SP1 i nowszych wersjach Driver Development Kit (DDK) oraz Windows SDK. Mają one zastąpić wbudowane odpowiedniki C/C++ i podobne procedury, które są dostarczane przez system Windows.

Jeden zestaw bezpiecznych funkcji ciągów jest używany w kodzie trybu jądra. Te funkcje są prototypowane w pliku nagłówka o nazwie Ntstrsafe.h. Ten plik nagłówka i powiązana biblioteka są dostępne w Windows Driver Kit (WDK).

Drugi zestaw bezpiecznych funkcji ciągów jest używany w aplikacjach trybu użytkownika. Odpowiedni plik nagłówka Strsafe.h zawiera prototypy dla tych funkcji. Ten plik i skojarzona biblioteka są dostępne w zestawie Windows SDK. Aby uzyskać więcej informacji na temat narzędzia Strsafe.h, zobacz Using the Strsafe.h Functions (Korzystanie z funkcji Strsafe.h).

Zestaw bezpiecznych funkcji ciągów w trybie jądra składa się z następujących dwóch podzestawów:

Funkcje bezpiecznych ciągów dla trybu jądra zapewniają następujące możliwości:

  • Każda funkcja bezpiecznego ciągu odbiera rozmiar buforu docelowego jako dane wejściowe. Funkcja może zatem zapewnić, że nie zapisuje poza końcem buforu.

  • Funkcje ciągów Unicode i ANSI kończą wszystkie ciągi wyjściowe znakiem NULL, nawet jeśli operacja obcina zamierzony wynik.

  • Wszystkie bezpieczne funkcje ciągów zwracają wartość NTSTATUS z tylko jednym możliwym kodem powodzenia (STATUS_SUCCESS).

  • Większość bezpiecznych funkcji ciągów jest dostępna zarówno w wersji zliczanej bajtowo, jak i zliczanej znakami. Na przykład RtlStringCbCata łączy dwa ciągi zliczane bajtami i RtlStringCchCata łączy dwa ciągi zliczane znaki.

  • Większość bezpiecznych funkcji ciągów znaków jest dostępna w rozszerzonej wersji Ex-sufiks, która oferuje dodatkową funkcjonalność. Na przykład RtlStringCbCatExa rozszerza funkcjonalność elementu RtlStringCbCata.

Ta sekcja zawiera następujące tematy:

Podsumowanie bezpiecznych funkcji łańcucha znaków Kernel-Mode

Importowanie funkcji bezpiecznego ciągu Kernel-Mode