Функция RtlStringCbCopyUnicodeStringEx (ntstrsafe.h)
Функция RtlStringCbCopyUnicodeStringEx копирует содержимое структуры UNICODE_STRING в указанное назначение.
Синтаксис
NTSTRSAFEDDI RtlStringCbCopyUnicodeStringEx(
[out] NTSTRSAFE_PWSTR pszDest,
[in] size_t cbDest,
[in] PCUNICODE_STRING SourceString,
[out] NTSTRSAFE_PWSTR *ppszDestEnd,
[out, optional] size_t *pcbRemaining,
[in] DWORD dwFlags
);
Параметры
[out] pszDest
Необязательный. Указатель на буфер, получающий скопированную строку. Строка , на которую указывает UNICODE_STRINGUNICODE_STRING параметра SourceStr ing, копируется в буфер по адресу pszDest и завершается значением NULL. Этот указатель может быть null, но только если STRSAFE_IGNORE_NULLS заданы в dwFlags.
[in] cbDest
Размер в байтах целевого буфера. Буфер должен быть достаточно большим для строки и конца символа NULL. Максимальное число байтов в буфере равно NTSTRSAFE_MAX_CCH * sizeof(WCHAR)
.
[in] SourceString
Необязательный. Указатель на структуру UNICODE_STRING, содержащую скопированную строку. Максимальное число байтов в строке равно NTSTRSAFE_UNICODE_STRING_MAX_CCH * sizeof(WCHAR)
. Этот указатель может быть null, но только если STRSAFE_IGNORE_NULLS заданы в dwFlags.
[out] ppszDestEnd
Необязательный. Если вызывающий объект предоставляет указатель адреса, отличный отNULL, то после завершения операции копирования функция загружает этот адрес с указателем на результирующий NULL строкового конца буфера назначения.
[out, optional] pcbRemaining
Необязательный. Если вызывающий объект предоставляет указатель адресов, отличный отNULL, функция загружает адрес с числом неиспользуемых байтов, которые находятся в буфере, на который pszDest указывает, включая байты, которые используются для конца null-символа.
[in] dwFlags
Один или несколько флагов и, при необходимости, байт заливки. Флаги определяются следующим образом:
Ценность | Значение |
---|---|
STRSAFE_FILL_BEHIND_NULL | Если этот флаг задан и функция успешно выполнена, то для заполнения части конечного буфера используется низкий байт dwFlags. |
STRSAFE_IGNORE_NULLS | Если этот флаг задан, то исходный или конечный указатель можно null. RtlStringCbCopyUnicodeStringEx обрабатывает null указатели исходного буфера, такие как пустые строки (TEXT("")), которые можно скопировать. указатели буфера назначения null не могут получать строки nonempty. |
STRSAFE_FILL_ON_FAILURE | Если этот флаг задан и функция завершается ошибкой, то для заполнения всего целевого буфера используется низкий байт dwFlags. Эта операция перезаписывает все предварительно существующие содержимое буфера. |
STRSAFE_NULL_ON_FAILURE | Если этот флаг задан и функция завершается ошибкой, буфер назначения имеет пустую строку (TEXT("")). Эта операция перезаписывает все предварительно существующие содержимое буфера. |
STRSAFE_NO_TRUNCATION |
Если этот флаг задан, функция возвращает STATUS_BUFFER_OVERFLOW:
|
Возвращаемое значение
RtlStringCbCopyUnicodeStringEx возвращает одно из следующих значений NTSTATUS.
Возвращаемый код | Описание |
---|---|
STATUS_SUCCESS | Это успешном состоянии означает, что исходные данные были представлены, строка была скопирована без усечения, а результирующий целевой буфер завершается значением NULL. |
STATUS_BUFFER_OVERFLOW | Это предупреждение о состоянии означает, что операция копирования не завершена из-за нехватки места в целевом буфере. Если STRSAFE_NO_TRUNCATION заданы в dwFlags, буфер назначения не изменяется. Если флаг не задан, целевой буфер содержит усеченную версию скопированной строки. |
STATUS_INVALID_PARAMETER | Это состояние означает, что функция получила недопустимый входной параметр. Дополнительные сведения см. в следующем списке. |
RtlStringCbCopyUnicodeStringEx возвращает значение STATUS_INVALID_PARAMETER при возникновении одной из следующих ситуаций:
- Содержимое структуры UNICODE_STRING недопустимо.
- Недопустимый флаг указывается в dwFlags.
- Значение в cbDest больше максимального размера буфера.
- Целевой буфер (который pszDest указывает на) уже заполнен.
- Указатель буфера значение NULL, а флаг STRSAFE_IGNORE_NULLS не указан.
- Указатель буфера назначения null, но размер буфера не равен нулю.
- Указатель целевого буфера равен значение NULL или его длина равна нулю, но строка источника ненулевой длины присутствует.
Сведения об тестировании значений NTSTATUS см. в использование значений NTSTATUS.
Замечания
Функция RtlStringCbCopyUnicodeStringEx использует размер буфера назначения (который указывает параметр cbDest cbDest), чтобы убедиться, что операция копирования не записывает в конец буфера.
RtlStringCbCopyUnicodeStringEx добавляет к функциям функции функции RtlStringCbCopyUnicodeString путем возврата указателя на конец конечной строки и количества байтов, которые остаются неиспользуемыми в этой строке. Вы можете передать флаги функции для дополнительного элемента управления.
Если исходные и конечные строки перекрываются, поведение функции не определено.
Указатели *SourceString *и pszDest нельзя NULL, если флаг STRSAFE_IGNORE_NULLS не задан в dwFlags. Если задан STRSAFE_IGNORE_NULLS, один или оба этих указателя могут быть NULL. Если указатель pszDestNULL, то указатель *SourceString *должен быть null или структура UNICODE_STRING должна описать пустую строку.
Дополнительные сведения о функциях безопасной строки см. в разделе Использование безопасных строковых функций.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Доступно в Windows XP с пакетом обновления 1 (SP1) и более поздними версиями Windows. |
целевая платформа | Настольный |
заголовка | ntstrsafe.h (include Ntstrsafe.h) |
библиотеки | Ntstrsafe.lib |
IRQL | Любой, если управляемые строки всегда находятся в памяти, в противном случае PASSIVE_LEVEL |