lstrcpynW 함수(winbase.h)
원본 문자열에서 버퍼로 지정된 수의 문자를 복사합니다.
통사론
LPWSTR lstrcpynW(
[out] LPWSTR lpString1,
[in] LPCWSTR lpString2,
[in] int iMaxLength
);
매개 변수
[out] lpString1
형식: LPTSTR
복사된 문자를 받는 대상 버퍼입니다. 버퍼는 종료 null 문자의 공간을 포함하여 iMaxLength지정된 TCHAR 값의 수를 포함할 만큼 커야 합니다.
[in] lpString2
형식: LPCTSTR
함수가 문자를 복사할 원본 문자열입니다.
[in] iMaxLength
형식: int
종료 null 문자를 포함하여 lpString2lpString1가리키는 버퍼로 가리키는 문자열에서 복사할 TCHAR 값의 수입니다.
반환 값
형식: LPTSTR
함수가 성공하면 반환 값은 버퍼에 대한 포인터입니다. 원본 문자열이 iMaxLength 문자보다 크더라도 함수가 성공할 수 있습니다.
함수가 실패하면 반환 값이 NULL
발언
lpString1 가리키는 버퍼는 종료 null 문자를 포함할 만큼 충분히 커야 하며, iMaxLength 지정된 문자열 길이 값에는 종료 null 문자에 대한 공간이 포함되어야 합니다.
lstrcpyn 함수는 원본 및 대상 버퍼가 겹치는 경우 정의되지 않은 동작을 가합니다.
보안 경고
이 함수를 잘못 사용하면 애플리케이션의 보안이 손상됩니다. 이 함수는 SEH(구조적 예외 처리)를 사용하여 액세스 위반 및 기타 오류를 catch합니다. 이 함수는 SEH 오류를 catch할 때 문자열을 null로 종료하지 않고 호출자에게 오류를 알리지 않고 NULL 반환합니다. 호출자는 공간 부족이 오류 조건이라고 가정해도 안전하지 않습니다.
lpString1 가리키는 버퍼가 복사된 문자열을 포함할 만큼 크지 않으면 버퍼 오버런이 발생할 수 있습니다. 전체 문자열을 복사할 때 sizeof 바이트 수를 반환합니다.
예를 들어 lpString1TCHAR szString[100]
선언된 버퍼 szString1 가리키는 경우 sizeof(szString1)는 WCHAR아닌 바이트 단위의 버퍼 크기를 제공하므로 함수의 유니코드 버전에 대한 버퍼 오버플로가 발생할 수 있습니다.
버퍼 오버플로 상황은 애플리케이션에서 많은 보안 문제의 원인이며 액세스 위반이 발생하는 경우 애플리케이션에 대한 서비스 거부 공격을 일으킬 수 있습니다. 최악의 경우 버퍼 오버런은 특히 lpString1 스택 기반 버퍼인 경우 공격자가 실행 코드를 프로세스에 삽입하도록 허용할 수 있습니다.
sizeof(szString1)/sizeof(szString1[0])
사용하면 버퍼의 적절한 크기가 지정됩니다.
대신 StringCchCopy 사용하는 것이 좋습니다. StringCchCopy(buffer, sizeof(buffer)/sizeof(buffer[0]), src);
사용하여 buffer
포인터가 아니거나 StringCchCopy(buffer, ARRAYSIZE(buffer), src);
사용해서는 안 된다는 점을 인식하고 포인터로 복사할 때 호출자가 뾰족한 메모리의 크기를 문자 단위로 전달해야 한다는 사실을 인식합니다.
계속하기 전에 보안 고려 사항: Windows 사용자 인터페이스 검토합니다.
메모
winbase.h 헤더는 lstrcpyn을 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입대한
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 Professional [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows 2000 Server [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | winbase.h(Windows.h 포함) |
라이브러리 | Kernel32.lib |
DLL | Kernel32.dll |
참고 항목
개념
참조
StringCchCopyN