Проблема с использованием RegQueryValueEx
От: PabloHuares  
Дата: 27.05.05 05:07
Оценка:
Добрый день всем. Подскажите пожалуйста, как можно обойти следующую проблему:
С помощью API-функции для получения значений ключей реестра RegQueryValueEx
пытаюсь взять значение из переменной Path, но столкнулся с тем, что если значение
ключа >24 символов, то функция не отрабатывает:
HKEY hNewKey;
DWORD dwType;
DWORD dwBytes=1024;;
char path[1024];

if(RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment",0, KEY_ALL_ACCESS, &hNewKey)==ERROR_SUCCESS)
{
if(RegQueryValueEx( hNewKey, "Path", NULL, &dwType, (LPBYTE)path, &dwBytes )!=ERROR_SUCCESS)
{
AfxMessageBox("Не удалось считать данные ключа Path реестра");
};
RegCloseKey( hNewKey );
}
else
{
AfxMessageBox("Не удалось открыть ключ Path реестра");
};

Я думаю, что что-то не так с типами переменных path, dwType или dwBytes, но как решить вопрос — не пойму никак!

Спасибо!
Re: Проблема с использованием RegQueryValueEx
От: Кирпа В.А. Украина  
Дата: 27.05.05 06:27
Оценка:
Здравствуйте, PabloHuares, Вы писали:

PH>Добрый день всем. Подскажите пожалуйста, как можно обойти следующую проблему:

PH>С помощью API-функции для получения значений ключей реестра RegQueryValueEx
PH>пытаюсь взять значение из переменной Path, но столкнулся с тем, что если значение
PH>ключа >24 символов, то функция не отрабатывает:
PH> HKEY hNewKey;
PH> DWORD dwType;
PH> DWORD dwBytes=1024;;
PH> char path[1024];

PH>if(RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment",0, KEY_ALL_ACCESS, &hNewKey)==ERROR_SUCCESS)

PH> {
PH> if(RegQueryValueEx( hNewKey, "Path", NULL, &dwType, (LPBYTE)path, &dwBytes )!=ERROR_SUCCESS)
PH> {
PH> AfxMessageBox("Не удалось считать данные ключа Path реестра");
PH> };
PH> RegCloseKey( hNewKey );
PH> }
PH> else
PH> {
PH> AfxMessageBox("Не удалось открыть ключ Path реестра");
PH> };

PH>Я думаю, что что-то не так с типами переменных path, dwType или dwBytes, но как решить вопрос — не пойму никак!


PH>Спасибо!


Хотелось бы узнать чему же равен результат возвращаемый RegQueryValueEx (то что он не равен ERROR_SUCCESS и так понятно)
!0xDEAD
Re: Проблема с использованием RegQueryValueEx
От: PabloHuares  
Дата: 27.05.05 07:34
Оценка:
PH>if(RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment",0, KEY_ALL_ACCESS, &hNewKey)==ERROR_SUCCESS)
{
if(RegQueryValueEx( hNewKey, "Path", NULL, &dwType, (LPBYTE)path, &dwBytes )!=ERROR_SUCCESS)
{
AfxMessageBox("Не удалось считать данные ключа Path реестра");
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(RegQueryValueEx( hNewKey, "Path", NULL, &dwType, (LPBYTE)path, &dwBytes )!=ERROR_SUCCESS)
{
AfxMessageBox("Не удалось считать данные ключа Path реестра");
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
RegCloseKey( hNewKey );
}
else
{
AfxMessageBox("Не удалось открыть ключ Path реестра");
};
Первый вызов RegQueryValueEx возвращает "Операция проведена успешно", но path — пустой!!!
А если добавить повторный вызов RegQueryValueEx — то со 2 раза он отрабатывает правильно!
Чего за бред? Не понимаю!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.