Функция RtlUnicodeStringCchCatNEx (ntstrsafe.h)
Функция RtlUnicodeStringCchCatNEx объединяет две строки, содержащиеся в UNICODE_STRING структурах, при этом ограничивая размер скопированной строки.
Синтаксис
NTSTRSAFEDDI RtlUnicodeStringCchCatNEx(
[in, out] PUNICODE_STRING DestinationString,
[in] PCUNICODE_STRING SourceString,
[in] size_t cchToAppend,
[out, optional] PUNICODE_STRING RemainingString,
[in] DWORD dwFlags
);
Параметры
[in, out] DestinationString
Необязательный параметр. Указатель на структуру UNICODE_STRING . Эта структура включает буфер, который на входных данных содержит строку, с которой будет сцеплена исходная строка. В выходных данных этот буфер является буфером назначения, который содержит всю результирующую строку. Исходная строка добавляется в конец строки назначения. Максимальное количество символов в строковом буфере структуры равно NTSTRSAFE_UNICODE_STRING_MAX_CCH. DestinationString может иметь значение NULL, но только если STRSAFE_IGNORE_NULLS задано в dwFlags.
[in] SourceString
Необязательный элемент. Указатель на структуру UNICODE_STRING . Эта структура включает буфер, содержащий исходную строку. Эта строка будет добавлена в конец строки назначения. Максимальное количество символов в строковом буфере структуры равно NTSTRSAFE_UNICODE_STRING_MAX_CCH. SourceString может иметь значение NULL, но только если STRSAFE_IGNORE_NULLS задано в dwFlags.
[in] cchToAppend
Максимальное число символов, добавляемых к строке, описываемой параметром DestinationString .
[out, optional] RemainingString
Необязательный элемент. Если вызывающий объект предоставляет указатель, отличный от NULL , на структуру UNICODE_STRING , функция присваивает члену buffer этой структуры конец сцепленной строки, элемент Length структуры — нулю, а член MaximumLength структуры — число байтов, оставшихся в целевом буфере. Параметр RemainingString может иметь значение NULL, но только если STRSAFE_IGNORE_NULLS задано в dwFlags.
[in] dwFlags
Один или несколько флагов и, при необходимости, байт заливки. Флаги определяются следующим образом:
Значение | Значение |
---|---|
STRSAFE_FILL_BEHIND | Если этот флаг установлен и функция выполняется успешно, для заполнения части буфера назначения, следующей за последним символом в строке, используется низкий байт dwFlags . |
STRSAFE_IGNORE_NULLS | Если этот флаг установлен, указатель источника или назначения или и то, и другое может иметь значение NULL. RtlUnicodeStringCchCatNEx обрабатывает указатели исходного буфера NULL как пустые строки (TEXT("")), которые можно скопировать. Указатели конечного буфера назначения NULL не могут получать непустые строки. |
STRSAFE_FILL_ON_FAILURE | Если этот флаг установлен и функция завершается сбоем, для заполнения всего целевого буфера используется низкий байт dwFlags . Эта операция перезаписывает все уже существующее содержимое буфера. |
STRSAFE_NULL_ON_FAILURE | Если этот флаг установлен и функция завершается сбоем, для буфера назначения устанавливается пустая строка (TEXT("")). Эта операция перезаписывает все уже существующее содержимое буфера. |
STRSAFE_NO_TRUNCATION |
Если этот флаг установлен и функция возвращает STATUS_BUFFER_OVERFLOW:
|
STRSAFE_ZERO_LENGTH_ON_FAILURE | Если этот флаг установлен и функция возвращает STATUS_BUFFER_OVERFLOW, длина строки назначения будет равна нулю байтов. |
Возвращаемое значение
RtlUnicodeStringCchCatNEx возвращает одно из следующих значений NTSTATUS.
Код возврата | Описание |
---|---|
STATUS_SUCCESS | Это состояние успешного выполнения означает наличие исходных данных, а строки были сцеплены без усечения. |
STATUS_BUFFER_OVERFLOW | Это состояние предупреждения означает, что объединенная операция не завершена из-за нехватки места в буфере назначения. Если STRSAFE_NO_TRUNCATION задано, дополнительные сведения см. в параметре dwFlags . |
STATUS_INVALID_PARAMETER | Это состояние ошибки означает, что функция получила недопустимый входной параметр. Дополнительные сведения см. в следующем списке. |
RtlUnicodeStringCchCatNEx возвращает значение STATUS_INVALID_PARAMETER в следующих случаях:
- Недопустимое содержимое структуры UNICODE_STRING .
- Недопустимый флаг указан в dwFlags.
- Буфер назначения уже заполнен.
- Указатель буфера имеет значение NULL , а флаг STRSAFE_IGNORE_NULLS не указан в dwFlags.
- Указатель целевого буфера имеет значение NULL, но размер буфера не равен нулю.
- Указатель конечного буфера имеет значение NULL или его длина равна нулю, но при этом присутствует строка источника ненулевой длины.
- Значение параметра cchToAppend больше NTSTRSAFE_UNICODE_STRING_MAX_CCH.
Сведения о проверке значений NTSTATUS см. в разделе Использование значений NTSTATUS.
Комментарии
Функция RtlUnicodeStringCchCatNEx использует размер буфера назначения, чтобы гарантировать, что операция объединения не записывает данные за конец буфера. По умолчанию функция не завершает результирующую строку значением NULL (т. е. нулем). В качестве параметра вызывающий объект может использовать флаг STRSAFE_FILL_BEHIND и значение байта заливки, равное нулю, чтобы завершить результирующую строку, которая не занимает весь буфер назначения.
RtlUnicodeStringCchCatNEx добавляет функциональные возможности функции RtlUnicodeStringCchCatN , возвращая структуру UNICODE_STRING , которая определяет конец строки назначения и количество байтов, оставшихся в этой строке. Вы можете передать флаги в RtlUnicodeStringCchCatNEx для дополнительного управления.
Если исходная и целевая строки перекрываются, поведение функции не определено.
Указатели SourceString и DestinationString не могут иметь значение NULL, если флаг STRSAFE_IGNORE_NULLS не установлен в dwFlags. Если задано STRSAFE_IGNORE_NULLS, один или оба значения могут иметь значение NULL. Если указатель DestinationString имеет значение NULL, то указатель SourceString должен иметь значение NULL или в структуре UNICODE_STRING должна быть указана пустая строка.
Дополнительные сведения о безопасных строковых функциях см. в разделе Использование безопасных строковых функций.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно начиная с Windows XP с пакетом обновления 1 (SP1). |
Целевая платформа | Персональный компьютер |
Верхняя часть | ntstrsafe.h (включая Ntstrsafe.h) |
Библиотека | Ntstrsafe.lib |
IRQL | Любое значение, если строки, которыми осуществляется управление, всегда находятся в памяти, в противном случае PASSIVE_LEVEL |