我用RegEnumValue枚举所有键值时发现只能成功获得部分健值(共有8个键值,只能正确取得其中的三个健,另外几个都是返回一个错误码0x000000ea),不知是什么原因,我应该如何才能枚举所有的键值呢?  
 
for  (long  dwIndex  =  0;  dwIndex  <  dwValueCount;  dwIndex++)  
{  
::RegEnumValue(hKey,  dwIndex,  lpValueName,  &ValueNameLen,  0,  NULL,lpValue,  &ValueLen);  
}  

解决方案 »

  1.   

    /*
    函数:列出制定键的值
    */
    CString CRegedit::ListValue(CString strKey)
    {
    CString keyValue; HKEY hkOpen;
    hkOpen=GetRegKey(strKey); int nIndexValue=0;
    for(;;)
    {
    char ValueName[256]; 
    byte DataValue[256]; 
    DWORD cbValueName=256; 
    DWORD cbDataValue=256; 
    DWORD dwType; 

    if(ERROR_NO_MORE_ITEMS==
    RegEnumValue(
    hkOpen,
    nIndexValue,
    ValueName, 
    &cbValueName, 
    NULL, 
    &dwType, 
    DataValue, 
    &cbDataValue)
    )
    {
    RegCloseKey(hkOpen);
    break;
    }

    //keyValue+=AddDataItem(nIndexValue,ValueName,dwType,DataValue);
    //keyValue+="\5";
    nIndexValue++;
    }   RegCloseKey(hkOpen);
       return keyValue;
    }
      

  2.   

    问题出在ValueNameLen和ValueLen,这个API好像会检查ValueName和Value的实际长度,如果实际长度大于给定的长度就会返回错误。