singlepost

RegSaveKey() << На главную или назад  

Кто нибудь юзал эту функцию? Вроде все правильно делаю, но она создает пустой .reg файл. не знаю как сохранить часть реестра. Использовать можно только WinAPI, без MFC.

53 ответов в теме “RegSaveKey()”

  1. 13
    Артур Терменжи ответил:

    о спс большое, теперь надо будет разобраться с привилегиями)

  2. 12
    Константин Смотритель ответил:

    Вот нашёл доп. инфу – твой же вопрос перевёл на инглишь (хотя его не знаю) и погуглил. там к концу есть пример кода, только проверку на успех AdjustTokenPriveleges добавь и ZeroMemory() для tp сделай: //www.programmersheaven.com/mb/CandCPP/192684/1...

    Там ещё какая-то проблема с RegRestore обсуждается, мож тебе пригодится =)

  3. 11
    Константин Смотритель ответил:

    Ага, понял, кажись. "The calling process must have the SE_BACKUP_NAME privilege enabled.". Ты же наверняка не в 98-й тестишь =) Тебе необходимо заюзать AdjustTokenPrivileges() . Надеюсь, теперь ты понимаешь, почему важно и запрашиваемые права ограничивать – не все пользователи под админами сидят (что правильно =). Заработало?

    Кстати, RegSaveKey сохранит вроде как в бинарном формате. Для охранения в текстовом используй RegSaveKeyEx

  4. 10
    Артур Терменжи ответил:

    собственно так и делаю.. вот код:
    LPCTSTR CFG_PATH = TEXT("SOFTWARE\\Nokia")
    if (RegOpenKeyEx( HKEY_CURRENT_USER, CFG_PATH, 0, KEY_QUERY_VALUE, &hKey )== ERROR_SUCCESS);
    {
    MessageBox( hWnd, "TheKey was opened", "Save",
    MB_OK | MB_ICONINFORMATION );
    }
    if ( RegSaveKey( hKey, "TheKey.reg", NULL ) == ERROR_SUCCESS )
    {
    MessageBox( hWnd, "TheKey was saved", "Save",
    MB_OK | MB_ICONINFORMATION );
    }

    RegCloseKey( hKey );

  5. 9
    Артур Терменжи ответил:

    при отладке в переменно hKey получаю значение 0×000017d4 {unused=??? }HKEY__ *

  6. 8
    Артур Терменжи ответил:

    создает пустой рег файл, хз почему…

  7. 7
    Константин Смотритель ответил:

    А в чём смысл использования RegCreateKey?! В твоём случае правильно использовать RegOpenKeyEx, разве нет?

    Скорее, ты просто создаёшь пустой раздел – тебе по нему пустой файл и создаётся. Или получаешь ошибку – ты проверил результат выполнения функции RegCreate/RegSave? Чему равен hKey посмотрел?

    Пример:
    LPCTSTR CFG_PATH = TEXT("Software\\Pegas\\Stereo 2.0");
    HKEY cfg;
    if(RegOpenKeyEx(HKEY_CURRENT_USER,CFG_PATH,0,KEY_QUERY_VALUE,&cfg)==ERROR_SUCCESS)
    {

    }

    P.S. Кстати, ограничь уровень необходимых привелегий – указывать "ALL_ACCESS" неправильно. Для Open достаточно тока чё-нить типа KEY_QUERY_VALUE

  8. 6
    Константин Смотритель ответил:

    Да, и покажи сам вызов RegSave (а лучше выложи весь кусок кода, ведь несложно же)

  9. 5
    Артур Терменжи ответил:

    извиняюсь

  10. 4
    Артур Терменжи ответил:

    передавал хэндл полученный след образом:
    RegCreateKeyEx( HKEY_LOCAL_MACHINE, "SOFTWARE\\KeyRoot\\Test\\Test1", 0, NULL,
    REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL,
    &hKey, &dwDisp );

  11. 3
    Константин Смотритель ответил:

    "И" – тебе намекнули, чтоб ты написал, что передаёшь в качестве HKEY? А ещё лучше – кусок кода + значения переменных, посмотренные в отладчике. Мы ж не телепаты =) ИМХО я согласен с Леонидом, что ты просто неверный HKEY передал (это и к вопросу о сохранении части реестра =).

  12. 2
    Артур Терменжи ответил:

    и?

  13. 1
    Леонид Максимов ответил:

    hKey [in]

    A handle to an open registry key.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.