Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Многие проблемы безопасности системы вызваны плохой обработкой буфера и в результате переполнения буфера. Плохая обработка буфера часто связана с операциями обработки строк. Стандартные функции обработки строк, предоставляемые библиотеками среды выполнения языка 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
Каждая из этих функций доступна в версии с суффиксами W, поддерживающей двухбайтовые символы Юникода, и в версии с суффиксами A, поддерживающей однобайтовые символы ANSI. Например, RtlStringCbCatN, который объединяет две строки и ограничивает длину добавленной строки, доступен как RtlStringCbCatNW и RtlStringCbCatNA.
Безопасные строковые функции для структур UNICODE_STRING
Каждая из этих функций принимает UNICODE_STRING структуру в качестве входного или выходного параметра или и того, и другого. Например, RtlStringCbCopyUnicodeString принимает структуру в качестве входного параметра, RtlUnicodeStringCopyString принимает структуру в качестве выходного параметра, а RtlUnicodeStringCopy принимает структуру как входной и выходной параметр.
Безопасные строковые функции в режиме ядра предоставляют следующие возможности:
Каждая безопасная строковая функция получает размер буфера назначения в качестве входных данных. Таким образом, функция может гарантировать, что она не записывает данные за конец буфера.
Строковые функции Юникода и ANSI завершают все выходные строки символом NULL, даже если операция усекает ожидаемый результат.
Все безопасные строковые функции возвращают значение NTSTATUS с одним возможным кодом успешного выполнения (STATUS_SUCCESS).
Большинство безопасных строковых функций доступны как в версии с подсчетом байтов, так и в версии с подсчетом символов. Например, RtlStringCbCata объединяет две строки с подсчетом байтов, а RtlStringCchCata объединяет две строки со счетчиком символов.
Большинство безопасных строковых функций доступны в расширенной версии с суффиксами ex-suffix, которая предоставляет дополнительные функциональные возможности. Например, RtlStringCbCatExa расширяет функциональные возможности RtlStringCbCata.
Этот раздел содержит следующие подразделы: