2017-02-11 10 views
-2

REG_SZ 유형의 레지스트리 값을 추출하여 문자 배열로 사용하고 있습니다. 바이트로 입력을 시도했지만 더 이상 얻을 수 없었습니다. 문자 배열 내가 원하는RegQueryValueEx를 ​​사용하여 reg_sz를 입력으로 사용하고 문자 배열로 사용

BYTE* buffer = new BYTE[cbMaxValueData]; 
ZeroMemory(buffer, cbMaxValueData); 
buffer[0] = '\0'; 

LONG dwRes = RegQueryValueEx(hKey, oem_name, 0, NULL, buffer, &lpData); 

_tprintf(TEXT("(%d) %s: %s\n"), i+1, oem_name, buffer); 

버퍼의 각 문자를 추출하는 것입니다하지만 난 어떤 방법을 찾을 해달라고 : PS : 누군가가 BYTE 변환에 나를 도울 수 있다면 내 레지스트리 키 값은 *

기본적으로 REG_SZ 형이다 char * var 또는 string str 버퍼 너무 내 문제를 해결할 것입니다

+1

스택 오버플로에 오신 것을 환영합니다. [The Tour] (http://stackoverflow.com/tour)를 읽으신 후 [Help Center] (http://stackoverflow.com/help/asking)의 자료를 참조하십시오. 여기에 물어보십시오. –

+0

작업하려는 특정 레지스트리 값과 지금까지 시도한 코드에 대한 세부 정보를 모두 표시하십시오. 그러면 누군가가 당신이해야 할 일에 대해 더 나은 도움을 줄 수 있습니다. – TheUndeadFish

답변

0

게시 한 코드가 불완전하며 컴파일하지 않고 RegQueryValueEx에서 반환 값을 확인하지 않습니다!

BYTE*char*의 차이점은 문제가 아니며 단지 바이트 크기의 배열이기 때문에 char *로 캐스팅 할 수 있습니다. 따라서 기호는 신경 쓰지 않아도됩니다. 고정 된 크기의 버퍼와 같은

TCHAR buffer[100]; 
DWORD size = sizeof(buffer); 
LONG result = RegQueryValueEx(hKey, oem_name, 0, NULL, (BYTE*) buffer, &size); 
if (ERROR_SUCCESS == result) _tprintf(....); else printf("Error %u\n", result); 

하지만 코드 : 레지스트리에서 읽을 때

당신은 일반적으로 바이트 배열을 할당하지 않습니다, 당신은 당신이 읽고 함수를 호출 할 때 단지 주조되는 유형을 할당 종종 충분하지 않습니다. 알 수없는 데이터를 읽는 경우 루프에서 RegQueryValueEx를 ​​호출해야합니다. 먼저 NULL 버퍼를 사용하여 크기를 얻은 다음 할당하고 다시 호출하십시오. 다른 누군가가 RegQueryValueEx에 대한 두 호출 사이의 데이터 크기를 늘릴 수 있기 때문에 루프가 필요합니다!

읽은 문자열이 \ 0 종료되지 않았기 때문에 처리해야 할 문제가있는 경우에도 계속 처리합니다. 대신 수동으로 종료하거나 RegGetValue을 사용해야합니다.