RegEnumValue
От: celtdev Россия  
Дата: 06.10.10 10:40
Оценка:
bool CEnvEditorDlg::readEnvUser()
{
    const int MAX_VALUE_NAME = 256;
    
    HKEY hKey;
    if (::RegOpenKeyEx(HKEY_CURRENT_USER, L"Environment", 0, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS)
    {
        return FALSE;
    }
    
    DWORD dwRetCode;            // возвращаемое значение
    DWORD dwValueCount;         // кол-во значений для ключа
    DWORD dwMaxNameLen;         // самое длинное имя
    DWORD dwMaxValueData;       // самые длинные данные
    TCHAR valueName[MAX_VALUE_NAME];
    
    // Получаем количество значений.
    ::RegQueryInfoKeyW(hKey,NULL, NULL, NULL,NULL,NULL, NULL, 
        &dwValueCount, &dwMaxNameLen, &dwMaxValueData, NULL, NULL);

    for(int i=0; i<dwValueCount;i++)
    {
        TCHAR buf[1024];
        DWORD bufLen = 1024;
        DWORD len = dwMaxNameLen;

        dwRetCode = RegEnumValue(hKey, i, valueName, &len, 0, NULL, (LPBYTE)buf, &bufLen);
        
        if (dwRetCode == ERROR_SUCCESS) 
        { 
            m_listUser.AddString(CString(valueName));
        }        
        else if(dwRetCode == ERROR_MORE_DATA)
        {
            m_listUser.AddString(L" - " + CString(buf));
        }
    }

    ::RegCloseKey(hKey);

    return TRUE;
}


постоянно вылетает ошибка ERROR_MORE_DATA на трех определенных значениях ключа соответственно не могу прочитать их названия... вроде бы слышал что функция RegEnumValue уменьшает размер буфера для данных...
что можете посоветовать что бы решить проблему?


07.10.10 16:18: Перенесено из 'C/C++. Прикладные вопросы'
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.