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
선택적. 복사된 문자열을 받는 버퍼에 대한 포인터입니다. SourceString 매개 변수의 UNICODE_STRING 구조체가 가리키는 문자열은 pszDest 버퍼에 복사되고 null 문자로 종료됩니다. 이 포인터는 NULL 수 있지만 dwFlagsSTRSAFE_IGNORE_NULLS 설정된 경우에만 가능합니다.
[in] cbDest
대상 버퍼의 크기(바이트)입니다. 버퍼는 문자열 및 종료 null 문자에 대해 충분히 커야 합니다. 버퍼의 최대 바이트 수는 NTSTRSAFE_MAX_CCH * sizeof(WCHAR)
.
[in] SourceString
선택적. 복사할 문자열이 포함된 UNICODE_STRING 구조체에 대한 포인터입니다. 문자열의 최대 바이트 수는 NTSTRSAFE_UNICODE_STRING_MAX_CCH * sizeof(WCHAR)
. 이 포인터는 NULL 수 있지만 dwFlagsSTRSAFE_IGNORE_NULLS 설정된 경우에만 가능합니다.
[out] ppszDestEnd
선택적. 호출자가NULL 주소 포인터를 제공하는 경우 복사 작업이 완료된 후 함수는 대상 버퍼의 결과 NULL 문자열 종결자에 대한 포인터를 사용하여 해당 주소를 로드합니다.
[out, optional] pcbRemaining
선택적. 호출자가NULL 주소 포인터를 제공하는 경우 함수는 종료 null 문자에 사용되는 바이트를 포함하여 pszDest 가리키는 버퍼에 있는 사용되지 않는 바이트 수를 사용하여 주소를 로드합니다.
[in] dwFlags
하나 이상의 플래그 및 선택적으로 채우기 바이트입니다. 플래그는 다음과 같이 정의됩니다.
값 | 의미 |
---|---|
STRSAFE_FILL_BEHIND_NULL | 이 플래그가 설정되고 함수가 성공하면 dwFlags 낮은 바이트를 사용하여 종료 null 문자 뒤에 오는 대상 버퍼의 부분을 채웁니다. |
STRSAFE_IGNORE_NULLS | 이 플래그가 설정된 경우 원본 또는 대상 포인터 또는 둘 다 NULL 수 있습니다. RtlStringCbCopyUnicodeStringEx 복사할 수 있는 빈 문자열(TEXT(""))과 같은 NULL 소스 버퍼 포인터를 처리합니다. NULL 대상 버퍼 포인터는 흠 없는 문자열을 받을 수 없습니다. |
STRSAFE_FILL_ON_FAILURE | 이 플래그가 설정되고 함수가 실패하면 dwFlags 낮은 바이트를 사용하여 전체 대상 버퍼를 채우고 버퍼는 null로 종료됩니다. 이 작업은 기존의 버퍼 내용을 덮어씁니다. |
STRSAFE_NULL_ON_FAILURE | 이 플래그가 설정되고 함수가 실패하면 대상 버퍼가 빈 문자열(TEXT("")로 설정됩니다. 이 작업은 기존의 버퍼 내용을 덮어씁니다. |
STRSAFE_NO_TRUNCATION |
이 플래그가 설정되고 함수가 STATUS_BUFFER_OVERFLOW반환하는 경우:
|
반환 값
RtlStringCbCopyUnicodeStringEx 다음 NTSTATUS 값 중 하나를 반환합니다.
반환 코드 | 묘사 |
---|---|
STATUS_SUCCESS | 이 성공 상태는 원본 데이터가 있고 문자열이 잘림 없이 복사되었으며 결과 대상 버퍼가 null로 종료됨을 의미합니다. |
STATUS_BUFFER_OVERFLOW | 이 경고 상태는 대상 버퍼의 공간이 부족하여 복사 작업이 완료되지 않았음을 의미합니다. dwFlagsSTRSAFE_NO_TRUNCATION 설정되면 대상 버퍼가 수정되지 않습니다. 플래그가 설정되지 않은 경우 대상 버퍼에는 잘린 버전의 복사된 문자열이 포함됩니다. |
STATUS_INVALID_PARAMETER | 이 오류 상태는 함수가 잘못된 입력 매개 변수를 수신했음을 의미합니다. 자세한 내용은 다음 목록을 참조하세요. |
RtlStringCbCopyUnicodeStringEx 다음 중 하나가 발생하면 STATUS_INVALID_PARAMETER 값을 반환합니다.
- UNICODE_STRING 구조체의 내용이 잘못되었습니다.
- 잘못된 플래그가 dwFlags에 지정되었습니다.
- cbDest 값이 최대 버퍼 크기보다 큽다.
- 대상 버퍼(pszDest 가리키는)가 이미 가득 찼습니다.
- 버퍼 포인터가 NULL STRSAFE_IGNORE_NULLS 플래그가 지정되지 않았습니다.
- 대상 버퍼 포인터는 NULL 버퍼 크기는 0이 아닙니다.
- 대상 버퍼 포인터는 NULL 길이는 0이지만 길이가 0이 아닌 원본 문자열이 있습니다.
NTSTATUS 값을 테스트하는 방법에 대한 자세한 내용은 NTSTATUS 값 사용참조하세요.
발언
RtlStringCbCopyUnicodeStringEx 함수는 대상 버퍼의 크기(cbDest 매개 변수가 지정)를 사용하여 복사 작업이 버퍼의 끝을 지나서 작성되지 않도록 합니다.
RtlStringCbCopyUnicodeStringEx 대상 문자열의 끝에 대한 포인터와 해당 문자열에서 사용되지 않은 바이트 수를 반환하여 RtlStringCbCopyUnicodeString 함수의 기능에 추가됩니다. 추가 제어를 위해 함수에 플래그를 전달할 수 있습니다.
원본 문자열과 대상 문자열이 겹치면 함수의 동작이 정의되지 않습니다.
STRSAFE_IGNORE_NULLS 플래그가 dwFlags설정되지 않는 한 *SourceString *및 pszDest 포인터는 NULL 수 없습니다. STRSAFE_IGNORE_NULLS 설정되면 이러한 포인터 중 하나 또는 둘 다 NULL 수 있습니다. pszDest 포인터가 NULL 경우 *SourceString *포인터는 NULL 합니다. 그렇지 않으면 UNICODE_STRING 구조체가 빈 문자열을 설명해야 합니다.
안전한 문자열 함수에 대한 자세한 내용은 safe string 함수 사용참조하세요.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP에서 SP1(서비스 팩 1) 이상 버전의 Windows에서 사용할 수 있습니다. |
대상 플랫폼 | 바탕 화면 |
헤더 | ntstrsafe.h(Ntstrsafe.h 포함) |
라이브러리 | Ntstrsafe.lib |
IRQL | 조작되는 문자열이 항상 메모리에 상주하는 경우, 그렇지 않으면 PASSIVE_LEVEL |