Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Mnoho problémů se zabezpečením systému je způsobeno špatným zpracováním vyrovnávací paměti a výsledným přetečením vyrovnávací paměti. Špatné zpracování vyrovnávací paměti je často spojeno s operacemi manipulace s řetězci. Standardní funkce pro manipulaci s řetězci, které poskytují knihovny modulu runtime jazyka C/C++ (strcat, strcpy, sprintf atd.), nezabrání zápisu za konec vyrovnávacích pamětí.
Dvě nové sady funkcí pro manipulaci s řetězci, označované jako bezpečné řetězcové funkce, poskytují další zpracování pro správné zpracování vyrovnávací paměti v kódu. Tyto bezpečné řetězcové funkce jsou k dispozici v sadě Windows Driver Kit (WDK) a pro systém Microsoft Windows XP SP1 a novějších verzích sady Driver Development Kit (DDK) a sady Windows SDK. Jejich předdefinované protějšky C/C++ a podobné rutiny poskytované systémem Windows mají nahradit.
Jedna sada bezpečných řetězcových funkcí se používá v kódu v režimu jádra. Tyto funkce jsou prototypovány v souboru hlaviček s názvem Ntstrsafe.h. Tento soubor hlaviček a přidružená knihovna jsou k dispozici v sadě WDK.
Další sada bezpečných řetězcových funkcí se používá v aplikacích v uživatelském režimu. Odpovídající soubor hlavičky Strsafe.h obsahuje prototypy pro tyto funkce. Tento soubor a přidružená knihovna jsou k dispozici v sadě Windows SDK. Další informace o strsafe.h naleznete v tématu Použití funkce Strsafe.h.
Sada bezpečných řetězcových funkcí v režimu jádra se skládá z následujících dvou podmnožiny:
Bezpečné řetězcové funkce pro znaky Unicode a ANSI
Každá z těchto funkcí je k dispozici ve verzi s příponou W, která podporuje dvoubajtové znaky Unicode a verzi s příponou A, která podporuje jednobajtové znaky ANSI. Například RtlStringCbCatN, který zřetězí dva řetězce a omezuje délku připojeného řetězce, je k dispozici jako RtlStringCbCatNW a RtlStringCbCatNA.
Bezpečné řetězcové funkce pro struktury UNICODE_STRING
Každá z těchto funkcí přijímá UNICODE_STRING strukturu jako vstupní nebo výstupní parametr nebo obojí. Například RtlStringCbCopyUnicodeString přijímá strukturu jako vstupní parametr, RtlUnicodeStringCopyString přijímá strukturu jako výstupní parametr a RtlUnicodeStringCopy přijímá strukturu jako vstupní i výstupní parametr.
Funkce bezpečných řetězců v režimu jádra poskytují následující funkce:
Každá bezpečná řetězcová funkce přijímá jako vstup velikost cílové vyrovnávací paměti. Funkce tak může zajistit, aby nezapisovala do vyrovnávací paměti za její konec.
Funkce řetězce Unicode a ANSI ukončují všechny výstupní řetězce znakem NULL, i když operace zkrátí zamýšlený výsledek.
Všechny bezpečné řetězcové funkce vrací hodnotu NTSTATUS s pouze jedním možným kódem úspěchu (STATUS_SUCCESS).
Většina bezpečných řetězcových funkcí je dostupná ve verzi počítající bajty i ve verzi počítající znaky. Například RtlStringCbCata zřetězí dva řetězce počítané bajty a RtlStringCchCata zřetězí dva řetězce počítané znakem.
Většina bezpečných řetězcových funkcí je k dispozici v rozšířené verzi s příponou Ex, která poskytuje další funkce. Například RtlStringCbCatExa rozšiřuje funkce RtlStringCbCata.
Tato část obsahuje následující témata: