RegQueryValueEx
을 사용할 때 이상한 결과가 발생하며 그 이유를 알 수 없습니다. Windows RegQueryValueEx 홀수 반환 결과
이
내가LONG ret = RegQueryValueEx(hKey, dataKey, NULL, NULL, (LPBYTE)data, &dataSize);
ret
234 (ERROR_MORE_DATA
)
동일 호출 RegQueryValueEx
DWORD dataSize;
TCHAR data[256];
처음하기 전에 설정 한 것입니다 그러나 나는 호출 할 때 다음 줄에 똑같은 것
LONG ret2 = RegQueryValueEx(hKey, dataKey, NULL, NULL, (LPBYTE)data, &dataSize);
ret2
왜이 함수의 반환 ERROR_MORE_DATA
내가 전화를 처음으로 후 바로 다음 줄에 같은 통화 ERROR_SUCESS
을 반환 0 (ERROR_SUCCESS
)
같다?
TCHAR data[1024]
을 변경하려고 시도했지만 동일한 결과가 나타납니다. 어떤 아이디어?
전체 코드는 :
for(int i=0; i<NUM_HISTORY; i++){
CString dataKey = getDataKey(i);
DWORD dataSize = 1024;
TCHAR data[1024];
LONG ret = RegQueryValueEx(hKey, dataKey, NULL, NULL, (LPBYTE)data, &dataSize);
LONG ret2 = RegQueryValueEx(hKey, dataKey, NULL, NULL, (LPBYTE)data, &dataSize);
// Breakpoint to see what ret and ret2 are equal to
int j = 0;
}
고맙습니다. 적어도 버퍼 오버플로 문제는 해결했습니다. 지금은'RegQueryValueEx'를 처음 호출하여'dataSize'에 올바른 크기를 얻고, _new_ 연산자를 사용하여'TCHAR' 버퍼에'dataSize' 크기를 할당합니다. 'dataSize'가 바이트 단위이고 버퍼가 바이트가 아니라'TCHAR'라고 명시하고 있기 때문에 이것은 여전히 버그입니까? –
예. malloc()을 사용하여 문제를 해결할 수 있습니다. –