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

Функция RtlUnicodeStringCchCopyStringNEx копирует строку в структуру UNICODE_STRING при ограничении размера скопированной строки.

Синтаксис

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

Параметры

[out] DestinationString

Необязательно. Указатель на структуру UNICODE_STRING , которая получает скопированную строку. Строка, на которую указывает параметр pszSrc (за исключением конца null), копируется в буфер, на который указывает UNICODE_STRING структура параметраDestinationString. Максимальное число символов в строке равно NTSTRSAFE_UNICODE_STRING_MAX_CCH. DestinationString может иметь значение NULL, но только если STRSAFE_IGNORE_NULLS заданы в dwFlags.

[in] pszSrc

Необязательно. Указатель на строку для копирования. Этот указатель может иметь значение NULL, но только если STRSAFE_IGNORE_NULLS заданы в dwFlags.

[in] cchToCopy

Количество символов, скопированных из источника в место назначения.

[out, optional] RemainingString

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

[in] dwFlags

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

Ценность Meaning
STRSAFE_FILL_BEHIND Если этот флаг задан и функция успешно выполнена, используется низкий байт dwFlags для заполнения части целевого буфера, следующего за последним символом в строке.
STRSAFE_IGNORE_NULLS Если этот флаг задан, исходный или целевой указатель может иметь значение NULL. RtlUnicodeStringCchCopyStringNEx обрабатывает указатели исходного буфера 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_NULL_ON_FAILURE не задано. STRSAFE_FILL_BEHIND_NULL игнорируется.
STRSAFE_ZERO_LENGTH_ON_FAILURE Если этот флаг задан и функция возвращает STATUS_BUFFER_OVERFLOW, длина строки назначения равна нулю байтам.

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

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

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

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

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

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

Замечания

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

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

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

Указатели 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

См. также