2017-11-07 1 views
1

내 응용 프로그램이 "Windows Vista 호환 모드"(EXE를 마우스 오른쪽 단추로 클릭하고 호환 모드를 활성화하고 Windows Vista를 선택)에서 실행될 때 매우 이상한 문제가 있습니다.RegEnumValue는 Vista 호환 모드에서 다른 버퍼 크기를 반환합니다.

"RegEnumValue"함수의 반환 버퍼 길이 값이 다른 값을 반환합니다. 달 수 호환성 모드로

는, RegEnumValue의 "lpcbData"필드 (후행 널 종료 포함) (16)의 값을 반환 : "줌 플레이어 MAX"의 레지스트리 값 (15 자)를 예를 들어

.

호환 모드를 사용하면 RegEnumValue의 "lpcbData"필드는 값 15 (후행 null 종결을 포함하지 않음)를 반환합니다.

내 문자열 변환 코드를 변경할 필요가없는 해결 방법이나 패치가 있습니까?

답변

7

중요하지 않습니다. 낮은 수준의 고전적인 기능을 사용하여 레지스트리에서 읽을 때, 당신은 함께하고 널 터미네이터없이 문자열을 처리 할 수 ​​있어야합니다

Beware of non-null-terminated registry strings

이 비밀리에 하나 개 추가 문자를 할당하는 것입니다 수있는 쉬운 방법 당신을 API를 읽을 때를 알려주지 말고 리턴하는 많은 문자의 끝에 '\0' 문자를 추가하십시오.

RegGetValue()과 같은 최신 기능은이 문제를 처리합니다.

관련 문제