2013-09-06 2 views
0

이 코드를 사용하여 HKCU에서 HKLM으로 레지스트리 데이터를 복사합니다. 1-9 사이의 올바른 번호가 검색되지만 10을 얻으면 11이 나옵니다. 내가 잘못한 것을 모릅니다. 도움이 필요하면 고맙게 생각합니다.RegQueryValueEx 잘못된 데이터 받기

extern "C" UINT __stdcall ReadTempRegKey(MSIHANDLE hInstall) 
{ 
HRESULT hr = S_OK; 
UINT er = ERROR_SUCCESS; 
HKEY hKey; 
char szProductKey[MAX_PATH], lszValue[MAX_PATH]; 
TCHAR achKey[MAX_KEY_LENGTH], achClass[MAX_PATH] = TEXT(""), achValue[MAX_VALUE_NAME]; 
DWORD  cbName, cchClassName = MAX_PATH, cSubKeys=0, cbMaxSubKey, cchMaxClass, cValues, cchMaxValue, cbMaxValueData, cbSecurityDescriptor; 
FILETIME ftLastWriteTime;  
PHKEY phkResult = NULL; 
DWORD i, retCode, cchValue = MAX_VALUE_NAME,dwType=REG_SZ,dwSKeyValueSize,dwSize=255; 

hr = WcaInitialize(hInstall, "ReadTempRegKey"); 
ExitOnFailure(hr, "Failed to initialize"); 

WcaLog(LOGMSG_STANDARD, "Initialized."); 

Orc_Reg_Sub_LM_CU(); 

sprintf_s(szProductKey, "SOFTWARE\\%s",Orc_Get_Product_Name()); 

if(RegOpenKeyEx(HKEY_CURRENT_USER, 
    szProductKey, 
    0, 
    KEY_READ, 
    &hKey) == ERROR_SUCCESS 
    ) 
{ 
    //Get the class name and the value count. 
    retCode = RegQueryInfoKey(
     hKey,     // key handle 
     achClass,    // buffer for class name 
     &cchClassName,   // size of class string 
     NULL,     // reserved 
     &cSubKeys,    // number of subkeys 
     &cbMaxSubKey,   // longest subkey size 
     &cchMaxClass,   // longest class string 
     &cValues,    // number of values for this key 
     &cchMaxValue,   // longest value name 
     &cbMaxValueData,   // longest value data 
     &cbSecurityDescriptor, // security descriptor 
     &ftLastWriteTime);  // last write time 

    // Enumerate the subkeys, until RegEnumKeyEx fails. 

    if (cSubKeys) 
    { 
     for (i=0; i<cSubKeys; i++) 
     { 
      cbName = MAX_KEY_LENGTH; 
      retCode = RegEnumKeyEx(hKey, i, 
       achKey, 
       &cbName, 
       NULL, 
       NULL, 
       NULL, 
       &ftLastWriteTime); 
     } 
    } 

    //Enumerate the key values. 

    if (cValues) 
    { 
     for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++) 
     { 
      cchValue = MAX_VALUE_NAME; 
      achValue[0] = '\0'; 
      retCode = RegEnumValue(hKey, i, 
       achValue, 
       &cchValue, 
       NULL, 
       NULL, 
       NULL, 
       NULL); 

      if (retCode == ERROR_SUCCESS) 
      { 
       DWORD dwSize = sizeof(lszValue); 

       retCode = RegQueryValueEx(hKey, achValue, NULL, &dwType,(LPBYTE)&lszValue, &dwSize); 

lszValue이 수신되는 데이터입니다.

답변

3

나는 내 수정 구슬을 사용하여 이것을 대답하려고합니다.

복사가 제대로 수행되고 있지만 10 진수가 아닌 16 진수로 데이터를보고 있습니다. 십진수 값 10a이고 십진수는 11b입니다.

+0

굉장하고 닫힌 눈동자 :-) –

+0

저는 C++을 처음 접했기 때문에 어리석은 질문에 대해 유감스럽게 생각합니다. 제 코드 내에서 뭔가 잘못하고 있다고 생각했습니다. 고맙습니다. –

+0

이 질문에 대한 답변이 있습니까? –