Поделиться через


Использование безопасных строковых функций

Многие проблемы безопасности системы вызваны плохой обработкой буфера и в результате переполнения буфера. Плохая обработка буфера часто связана с операциями обработки строк. Стандартные функции обработки строк, предоставляемые библиотеками среды выполнения языка C/C++ (strcat, strcpy, sprintf и т. д.), не препятствуют записи за пределами буферов.

Два новых набора функций обработки строк, называемые безопасными строковыми функциями, обеспечивают дополнительную обработку для правильной обработки буфера в коде. Эти безопасные строковые функции доступны в комплекте драйверов Windows (WDK), а также для Microsoft Windows XP с пакетом обновления 1 (SP1) и более поздних версий пакета средств разработки драйверов (DDK) и windows SDK. Они предназначены для замены встроенных аналогов C/C++ и аналогичных процедур, предоставляемых Windows.

Один набор безопасных строковых функций предназначен для использования в коде в режиме ядра. Эти функции создаются в файле заголовка с именем Ntstrsafe.h. Этот файл заголовка и связанная библиотека доступны в WDK.

Другой набор безопасных строковых функций предназначен для использования в приложениях в пользовательском режиме. Соответствующий файл заголовка Strsafe.h содержит прототипы для этих функций. Этот файл и связанная библиотека доступны в windows SDK. Дополнительные сведения о Strsafe.h см. в разделе Использование функций Strsafe.h.

Набор безопасных строковых функций в режиме ядра состоит из следующих двух подмножеств:

Безопасные строковые функции в режиме ядра предоставляют следующие возможности:

  • Каждая безопасная строковая функция получает размер буфера назначения в качестве входных данных. Таким образом, функция может гарантировать, что она не записывает данные за конец буфера.

  • Строковые функции Юникода и ANSI завершают все выходные строки символом NULL, даже если операция усекает ожидаемый результат.

  • Все безопасные строковые функции возвращают значение NTSTATUS с одним возможным кодом успешного выполнения (STATUS_SUCCESS).

  • Большинство безопасных строковых функций доступны как в версии с подсчетом байтов, так и в версии с подсчетом символов. Например, RtlStringCbCata объединяет две строки с подсчетом байтов, а RtlStringCchCata объединяет две строки со счетчиком символов.

  • Большинство безопасных строковых функций доступны в расширенной версии с суффиксами ex-suffix, которая предоставляет дополнительные функциональные возможности. Например, RtlStringCbCatExa расширяет функциональные возможности RtlStringCbCata.

Этот раздел содержит следующие подразделы:

Сводка Kernel-Mode безопасных строковых функций

Импорт Kernel-Mode безопасных строковых функций