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


Функция RtlUnicodeStringCbCatStringNEx (ntstrsafe.h)

Функция RtlUnicodeStringCbCatStringNEx объединяет две строки, если целевая строка содержится в структуре UNICODE_STRING , ограничивая размер добавленной строки.

Синтаксис

NTSTRSAFEDDI RtlUnicodeStringCbCatStringNEx(
  [in, out]       PUNICODE_STRING  DestinationString,
  [in]            NTSTRSAFE_PCWSTR pszSrc,
  [in]            size_t           cbToAppend,
  [out, optional] PUNICODE_STRING  RemainingString,
  [in]            DWORD            dwFlags
);

Параметры

[in, out] DestinationString

Необязательно. Указатель на структуру UNICODE_STRING . Эта структура включает в себя буфер, содержащий целевую строку, к которой будет объединена исходная строка. В выходных данных этот буфер является целевым буфером, который содержит всю результирующую строку. Исходная строка (за исключением конца null) добавляется в конец конечной строки. Максимальное число байтов в строковом буфере структуры — NTSTRSAFE_UNICODE_STRING_MAX_CCH * sizeof(WCHAR)это . DestinationString может иметь значение NULL, но только если STRSAFE_IGNORE_NULLS заданы в dwFlags.

[in] pszSrc

Указатель, предоставленный вызывающим, на строку, завершаемую значением NULL. Эта строка будет объединена в конец строки, содержащейся в структуре UNICODE_STRING , на которую указывает DestinationString . pszSrc может иметь значение NULL, но только если STRSAFE_IGNORE_NULLS заданы в dwFlags.

[in] cbToAppend

Максимальное количество байтов для добавления к строке, описываемой параметром DestinationString .

[out, optional] RemainingString

Необязательно. Если вызывающий объект предоставляет указатель, отличный от NULL, к структуре UNICODE_STRING, функция задает элемент буфера этой структуры в конце сцепленной строки, задает член длины структуры равным нулю, и задает элемент MaximumLength структуры в число байтов, оставшихся в целевом буфере. Оставшаясяstring может иметь значение NULL, но только если STRSAFE_IGNORE_NULLS заданы в dwFlags.

[in] dwFlags

Один или несколько флагов и, при необходимости, байт заливки. Флаги определяются следующим образом:

Ценность Meaning
STRSAFE_FILL_BEHIND Если этот флаг задан и функция успешно выполнена, используется низкий байт dwFlags для заполнения части целевого буфера, следующего за последним символом в строке.
STRSAFE_IGNORE_NULLS Если этот флаг задан, исходный или целевой указатель может иметь значение NULL. RtlUnicodeStringCbCatStringNEx обрабатывает указатели исходного буфера NULL , такие как пустые строки (TEXT("")), которые можно скопировать. Указатели конечного буфера NULL не могут получать строки nonempty.
STRSAFE_FILL_ON_FAILURE Если этот флаг задан и функция завершается ошибкой, для заполнения всего целевого буфера используется низкий байт dwFlags . Эта операция перезаписывает все предварительно существующие содержимое буфера.
STRSAFE_NULL_ON_FAILURE Если этот флаг задан и функция завершается ошибкой, буфер назначения имеет пустую строку (TEXT("")). Эта операция перезаписывает все предварительно существующие содержимое буфера.
STRSAFE_NO_TRUNCATION

Если этот флаг задан, функция возвращает STATUS_BUFFER_OVERFLOW:

  • Если STRSAFE_FILL_ON_FAILURE также указан, STRSAFE_NO_TRUNCATION заполняет буфер назначения соответствующим образом.
  • В противном случае буфер назначения будет не изменен.
STRSAFE_ZERO_LENGTH_ON_FAILURE Если этот флаг задан и функция возвращает STATUS_BUFFER_OVERFLOW, длина строки назначения равна нулю байтам.

Возвращаемое значение

RtlUnicodeStringCbCatStringNEx возвращает одно из следующих значений NTSTATUS.

Код возврата Description
STATUS_SUCCESS Это состояние успешного выполнения означает, что исходные данные присутствуют, и строки были объединяются без усечения.
STATUS_BUFFER_OVERFLOW Это предупреждение означает, что операция объединения не завершена из-за нехватки места в целевом буфере. Если задано STRSAFE_NO_TRUNCATION , дополнительные сведения см. в параметре dwFlags .
СТАТУС_НЕДЕЙСТВИТЕЛЬНЫЙ_ПАРАМЕТР Это состояние ошибки означает, что функция получила недопустимый входной параметр. Дополнительные сведения см. в следующем списке.

RtlUnicodeStringCbCatStringNEx возвращает значение STATUS_INVALID_PARAMETER при возникновении одной из следующих ситуаций:

  • Содержимое структуры UNICODE_STRING недопустимо.
  • Недопустимый флаг указывается в dwFlags.
  • Буфер назначения уже заполнен.
  • Указатель буфера имеет значение NULL , а флаг STRSAFE_IGNORE_NULLS не указан.
  • Указатель на целевой буфер имеет значение NULL, но размер буфера не равен нулю.
  • Указатель целевого буфера имеет значение NULL или его длина равна нулю, но присутствует строка источника ненулевой длины.
  • Значение параметра cbToAppend больше NTSTRSAFE_UNICODE_STRING_MAX_CCH * sizeof(WCHAR).

Сведения о тестировании значений NTSTATUS см. в разделе "Использование значений NTSTATUS".

Замечания

Функция RtlUnicodeStringCbCatStringNEx использует размер буфера назначения, чтобы убедиться, что операция объединения не записывается в конец буфера. По умолчанию функция не завершает результирующую строку со значением null (то есть с нулем). В качестве параметра вызывающий объект может использовать флаг STRSAFE_FILL_BEHIND и значение байта байта нуля до null-завершения результирующей строки, которая не занимает весь целевой буфер.

RtlUnicodeStringCbCatStringNEx добавляет к функциям функции функции RtlUnicodeStringCbCatStringN , возвращая UNICODE_STRING структуру , которая определяет конец конечной строки и количество байтов, которые остаются неиспользуемыми в этой строке. Вы можете передать флаги в RtlUnicodeStringCbCatStringNEx для дополнительного элемента управления.

Если исходные и конечные строки перекрываются, поведение функции не определено.

Указатели pszSrc и DestinationString не могут иметь значение NULL , если флаг STRSAFE_IGNORE_NULLS не задан в dwFlags. Если STRSAFE_IGNORE_NULLS задано, один или оба этих указателя могут иметь значение NULL. Если указатель DestinationString имеет значение NULL, указатель pszSrc должен иметь значение NULL или указывать на пустую строку.

Дополнительные сведения о функциях безопасной строки см. в разделе "Использование безопасных строковых функций".

Требования

Требование Ценность
Минимальный поддерживаемый клиент Доступно начиная с Windows XP с пакетом обновления 1 (SP1).
целевая платформа Рабочий стол
Header ntstrsafe.h (include Ntstrsafe.h)
Library Ntstrsafe.lib
IRQL Любой, если управляемые строки всегда находятся в памяти, в противном случае PASSIVE_LEVEL

См. также