Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

снимки системного реестра


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо