![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
снимки системного реестра
Admiral © (2007-04-21 09:49:00)Здравствуйте, товарищи программисты. Подскажите, пожалуйста, как сделать снимок ветви системного реестра Windows, а затем сравнить 2 снимка, чтобы выявить произведенные изменения. Буду рад любым ссылкам по теме, кускам кода, и простым советам. Заранее спасибо.
Admiral (2007-05-05 11:20:00) [1]
> подключив, в uses библиотеку ShelAPI, я получаю инструмент
> экспорта из виндовского RegEdita
...и на сколько я понял, коллега USTAS, предложил нечто похожее:
> procedure SaveRegistry;
> var Buffer: array[0..1023] of Char;
> temp_dir: String;
> begin
> SetString(temp_dir, Buffer, GetTempPath(Sizeof(Buffer)-
> 1,Buffer));
> if Copy(temp_dir,Length(temp_dir)-1,1) <> '\' then temp_dir
> := temp_dir + '\';
> //winexec(PChar('reg export hklm ' + temp_dir + 'hklm_'
> + FormatDateTime('ddmmyy',Date) + '_' + FormatDateTime('hhnn',
> Time) + '.reg'),SW_HIDE);
> //winexec(PChar('reg export hkcu ' + temp_dir + 'hkcu_'
> + FormatDateTime('ddmmyy',Date) + '_' + FormatDateTime('hhnn',
> Time) + '.reg'),SW_HIDE);
> winexec(PChar('regedit.exe -ea "' + temp_dir + 'hklm_'
> + FormatDateTime('ddmmyy',Date) + '_' + FormatDateTime('hhnn',
> Time) + '.reg" "HKEY_CURRENT_USER"'),SW_HIDE);
> winexec(PChar('regedit.exe -ea "' + temp_dir + 'hklm_'
> + FormatDateTime('ddmmyy',Date) + '_' + FormatDateTime('hhnn',
> Time) + '.reg" "HKEY_LOCAL_MACHINE"'),SW_HIDE);
> end;
TStas (2007-05-01 20:30:00) [2]Imho иерархию надо вешать на дерево и смотреть на дерево, хотя оно и очень тормозное.
Admiral (2007-04-29 15:54:00) [3]Многоуважаемые мастера, спасибо за советы. Я тут вот до чего докопался: подключив, в uses библиотеку ShelAPI, я получаю инструмент экспорта из виндовского RegEdita. По этой причине не стану изобретать велосипед и для сохранения ветви реестра буду юзать этот инструмент. Теперь проблема в следующем: чтобы сравнивать 2 снимка, я могу использовать либо полученные *.reg файлы(и сравнивать их), либо мне надо загонять сравниваемую ветвь в структуру типа «дерево» и сравнивать элементы 2х деревьев. Во втором случае нужно искать и вспоминать алгоритмы работы с деревьями. Посоветуйте, как лучше поступить. Сам чувствую, что лучше(но при этом и сложнее) работать с деревьями.
P.S.: обрадуюсь исходникам обоих способов :-)
SLoW.AlfaMoon.Com (2007-04-24 09:36:00) [4]Kedge
Понятно. Все же автору, как я понял, слепок всего реестра не нужен. В таком случае RegSaveKey вполне подходит.
USTAS (2007-04-23 17:54:00) [5]
procedure SaveRegistry;
var Buffer: array[0..1023] of Char;
temp_dir: String;
begin
SetString(temp_dir, Buffer, GetTempPath(Sizeof(Buffer)-1,Buffer));
if Copy(temp_dir,Length(temp_dir)-1,1) <> '\' then temp_dir := temp_dir + '\';
//winexec(PChar('reg export hklm ' + temp_dir + 'hklm_' + FormatDateTime('ddmmyy',Date) + '_' + FormatDateTime('hhnn',Time) + '.reg'),SW_HIDE);
//winexec(PChar('reg export hkcu ' + temp_dir + 'hkcu_' + FormatDateTime('ddmmyy',Date) + '_' + FormatDateTime('hhnn',Time) + '.reg'),SW_HIDE);
winexec(PChar('regedit.exe -ea "' + temp_dir + 'hklm_' + FormatDateTime('ddmmyy',Date) + '_' + FormatDateTime('hhnn',Time) + '.reg" "HKEY_CURRENT_USER"'),SW_HIDE);
winexec(PChar('regedit.exe -ea "' + temp_dir + 'hklm_' + FormatDateTime('ddmmyy',Date) + '_' + FormatDateTime('hhnn',Time) + '.reg" "HKEY_LOCAL_MACHINE"'),SW_HIDE);
end;
procedure RestoreRegistry;
var Buffer: array[0..1023] of Char;
temp_dir: String;
reg_files: TSearchRec;
begin
SetString(temp_dir, Buffer, GetTempPath(Sizeof(Buffer)-1,Buffer));
if Copy(temp_dir,Length(temp_dir)-1,1) <> '\' then temp_dir := temp_dir + '\';
if FindFirst(temp_dir + '*.reg', faAnyFile, reg_files) = 0 then begin
winexec(PChar('regedit /s ' + temp_dir + reg_files.Name + '.reg'),SW_NORMAL);
while FindNext(reg_files) = 0 do begin
winexec(PChar('regedit /s ' + temp_dir + reg_files.Name + '.reg'),SW_NORMAL);
end; //while
end;
FindClose(reg_files);
end;
Kedge (2007-04-23 14:10:00) [6]>[8] GrayFace © (23.04.07 13:57)
"Если интересует, что натворила конкретная прога", то, возможно, RegMon поможет ?
GrayFace (2007-04-23 13:57:00) [7]А какой смысл получать полностью актуальный снимок реестра. Если интересует, что натворила конкретная прога, все что делает система до ее старта и после ее завершения не кажно.
Kedge (2007-04-23 12:58:00) [8]> [6] SLoW.AlfaMoon.Com (23.04.07 11:48)
> Совсем не уверен, что из под Windows это полноценно возможно.
> Чем же тогда объяснить существование и популярность такой программы, как RegSnap?
Во всех своих постах, я делал оговоки: imho и "в общем случае".
Чем "объяснить существование и популярность" - не знаю. :)
Так же, как и принципов ее работы. Но остаюсь при свем imho, а именно: в общем случае,
из под Windows станет возможно корректно "сделать снимок ветви системного реестра Windows, а затем сравнить 2 снимка",
только после реализации временной блокировки записи в реестр. А как это сделать - не представляю :)
SLoW.AlfaMoon.Com (2007-04-23 11:48:00) [9]Kedge © (22.04.07 22:21) [5]
>а затем сравнить 2 снимка, чтобы выявить произведенные изменения
Совсем не уверен, что из под Windows это полноценно возможно.
Чем же тогда объяснить существование и популярность такой программы, как RegSnap?
Kedge (2007-04-22 22:21:00) [10]>а затем сравнить 2 снимка, чтобы выявить произведенные изменения
Совсем не уверен, что из под Windows это полноценно возможно.
Блокировать запись в реестр ,в общем случае, нельзя.
Пока ты бежишь по дереву, оно может меняться. Последствия можно себе представить.
Как минимум, снимок не будет отражать истинное положение вещей.
Admiral (2007-04-22 21:22:00) [11]
> Registry
TRegistry, простите
Admiral (2007-04-22 21:20:00) [12]
> imho, в общем случае, - из под DOS
я считал, что снимки делаются средствами WinAPI(юзаем класс Registry) не пойму при чем здесь DOS
slow.alfamoon.com (2007-04-21 11:26:00) [13]RegSaveKey попробуйте.
Kedge (2007-04-21 10:58:00) [14]imho, в общем случае, - из под DOS