Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
Bezpieczne funkcje ciągów dla znaków Unicode i ANSI
Każda z tych funkcji jest dostępna w wersji sufiksu W, która obsługuje znaki Unicode dwubajtowe i wersję sufiksu A, która obsługuje znaki ANSI jednobajtowe. Na przykład RtlStringCbCatN, który łączy dwa ciągi i ogranicza długość dołączonego ciągu, jest dostępny jako RtlStringCbCatNW i RtlStringCbCatNa.
Bezpieczne funkcje ciągów dla struktur UNICODE_STRING
Każda z tych funkcji akceptuje strukturę UNICODE_STRING jako parametr wejściowy lub wyjściowy albo oba te funkcje. Na przykład RtlStringCbCopyUnicodeString akceptuje strukturę jako parametr wejściowy, RtlUnicodeStringCopyString akceptuje strukturę jako parametr wyjściowy, a RtlUnicodeStringCopy akceptuje strukturę zarówno jako parametr wejściowy, jak i wyjściowy.
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