Sdílet prostřednictvím


Použití bezpečných řetězcových funkcí

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:

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:

Shrnutí bezpečnostních řetězcových funkcí Kernel-Mode

Importování Kernel-Mode bezpečných řetězcových funkcí