使用安全字符串函数

许多系统安全问题是由缓冲区处理不善和生成的缓冲区溢出引起的。 糟糕的缓冲区处理通常与字符串操作相关联。 C/C++ 语言运行时库 (strcatstrcpysprintf 等) 提供的标准字符串操作函数不会阻止写入缓冲区末尾。

两组新的字符串操作函数(称为 安全字符串函数)提供额外的处理,以便在代码中正确处理缓冲区。 这些安全字符串函数在 Windows 驱动程序工具包 (WDK) 以及 Microsoft Windows XP SP1 及更高版本的驱动程序开发工具包 (DDK) 和 Windows SDK 中可用。 它们旨在替换其内置的 C/C++ 对应项和 Windows 提供的类似例程。

一组安全字符串函数用于内核模式代码。 这些函数在名为 Ntstrsafe.h 的头文件中原型。 WDK 中提供了此头文件和关联的库。

另一组安全字符串函数用于用户模式应用程序。 相应的头文件 Strsafe.h 包含这些函数的原型。 该文件和关联的库在 Windows SDK 中可用。 有关 Strsafe.h 的详细信息,请参阅 使用 Strsafe.h 函数

内核模式安全字符串函数集由以下两个子集组成:

内核模式安全字符串函数提供以下功能:

  • 每个安全字符串函数接收目标缓冲区的大小作为输入。 因此,函数可以确保它不会写入缓冲区的末尾。

  • Unicode 和 ANSI 字符串函数使用 NULL 字符终止所有输出字符串,即使操作截断了预期结果。

  • 所有安全字符串函数都返回 NTSTATUS 值, (STATUS_SUCCESS) 只有一个可能的成功代码。

  • 大多数安全字符串函数在字节计数和字符计数版本中都可用。 例如, RtlStringCbCata 连接两个字节计数字符串, RtlStringCchCata 连接两个字符计数字符串。

  • 大多数安全字符串函数在扩展的 Ex-suffixed 版本中提供,可提供其他功能。 例如, RtlStringCbCatExa 扩展 了 RtlStringCbCata 的功能。

本节包括下列主题:

内核模式安全字符串函数摘要

导入内核模式安全字符串函数