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