Добрый день всем. Подскажите пожалуйста, как можно обойти следующую проблему:
С помощью 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, но как решить вопрос — не пойму никак!
Здравствуйте, 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 и так понятно)
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 раза он отрабатывает правильно!
Чего за бред? Не понимаю!