| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > проблема с сохранением раздела реестра |
| Автор: amt2001 13.7.2011, 14:35 |
| Использую класс TRegistry для работы с реестром. Сохраняю нужный раздел с помощью savekey, файл экспорта hive создается. Проблема в том, что при сохранении одного и того же раздела реестра файлы отличаются, о чем говорят контрольные суммы и сравнения данных файлов. Разница в принципе не значительная и, подозреваю, для функций класса tregistry импорт данных файлов пройдет без проблем, но для меня это критично. Пробовал работать с regsavekey с различными форматами, результат тот же. Во вложении два файла выгрузки одного и того же реестра где видно (с помощью утилиты comp), что некоторыей байты отличаются. Кто-нибудь сталкивался с таким? |
| Автор: amt2001 13.7.2011, 17:06 | ||||
вроде прикрепил.
Так раздел то не меняется... производится только его чтение. А можно ли не сохранять время? |
| Автор: borisbn 13.7.2011, 17:16 | ||
От тебя это не зависит. Внутрь функций работы с реестром встроено протоколирование всех действий. По-моему в этих функциях нет такого флажка "не протоколировать действия" или что-либо подобное...
|
| Автор: amt2001 13.7.2011, 18:43 |
Вижу две альтернативы: 1. Использовать другие классы или компоненты. Кстати, какие есть? (winapi не предлагать) 2. Самому рекурсивно перебирать ветки на. |
| Автор: borisbn 13.7.2011, 18:52 | ||
никакие не помогут, т.к. протоколирование действий заложено на самом низком уровне, а все компоненты - всего-лишь обёртка над winAPI Понятия не имею, правильный ли это выход, т.к. ты ни слова не сказал о задаче |
| Автор: amt2001 13.7.2011, 20:39 | ||
| задача осуществить контроль целостности веток реестра... для этого выгружаю ветку в файл, считаю контрольную сумму и ожидаю очередной проверки... Есть еще один вариант - вызывать для экспорта regedit, но мне это вариант не нравится.
Почему не помогут? можно выгружать в тектовом виде (reg-файл)... там уж точно никакое время не проставляется... |
| Автор: borisbn 13.7.2011, 22:23 | ||
теперь, когда задача понятна, то ессно, можно и выгружать в текстовом виде и проверять каждый раз всю ветку "вручную", но может стОит посмотреть http://msdn.microsoft.com/en-us/library/ms724892(VS.85).aspx ? |
| Автор: amt2001 13.7.2011, 23:15 |
| Данные функции не подойдут, поскольку имеют смысл только на протяжении времени работы приложения. А я хочу посчитать контрольную сумму с возможностью ее проверки, например, через сутки, неделю и т.д. когда невозможно производить отслеживание событий. Надо посмотреть в сторону hive файла. Может попробовать в нем время менять или еще что-нибудь. |
| Автор: artsb 13.7.2011, 23:27 |
А зачем, вообще, хранить целый файл (hive или reg)? Можно же сохранить reg-файл во временную папку, затем подсчитать MD5 или CRC32 или ещё что, и затем сохранить одну только строку. |
| Автор: borisbn 14.7.2011, 00:28 | ||||||
чем ?
потом сравниваешь файл "эталона" с полученным побайтно... Добавлено через 10 минут и 59 секунд кста, можно вообще обойтись cmd-шником. Нужно только найти команду сравнения двух файлов. Получится как-то так
|
| Автор: amt2001 14.7.2011, 08:12 | ||||||
Именно так я сейчас и пытаюсь сделать, но поскольку при каждом экспорте в файл сохраняется время, то контрольные суммы постоянно разные. Сейчас сравниваю hive, поскольку сохранять в *.reg умеет только regedit, winapi-шные функции и wrapper-ы этого не умеют.
ShellExecute
cmd не подойдет как и внешний вызов regedit - не хочу привязываться к внешним приложениям. |
| Автор: artsb 14.7.2011, 09:33 | ||
Структура файла предельно проста. Можете самостоятельно формировать такой файл. Ну или как советовал borisbn, через командную строку. |
| Автор: amt2001 15.7.2011, 22:27 |
| Решил проблему так - удаляю заголовок hive файла (первые 512 байт), где хранится внутренний hash и прочее барахло, не имеющее отношения к ключам и значениям реестра. Далее рассчитываю hash файла. Пока полет нормальный |