Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];

Вниз

снимки системного реестра   Найти похожие ветки 

 
Admiral   (2007-04-21 09:49) [0]

Здравствуйте, товарищи программисты. Подскажите, пожалуйста, как сделать снимок ветви системного реестра Windows, а затем сравнить 2 снимка, чтобы выявить произведенные изменения. Буду рад любым ссылкам по теме, кускам кода, и простым советам. Заранее спасибо.


 
Kedge ©   (2007-04-21 10:58) [1]

imho, в общем случае, - из под DOS


 
slow.alfamoon.com   (2007-04-21 11:26) [2]

RegSaveKey попробуйте.


 
Admiral   (2007-04-22 21:20) [3]


> imho, в общем случае, - из под DOS

я считал, что снимки делаются средствами WinAPI(юзаем класс Registry) не пойму при чем здесь DOS


 
Admiral   (2007-04-22 21:22) [4]


> Registry

TRegistry, простите


 
Kedge ©   (2007-04-22 22:21) [5]

>а затем сравнить 2 снимка, чтобы выявить произведенные изменения
Совсем не уверен, что из под Windows это полноценно возможно.
Блокировать запись в реестр ,в общем случае, нельзя.
Пока ты бежишь по дереву, оно может меняться. Последствия можно себе представить.
Как минимум, снимок не будет отражать истинное положение вещей.


 
SLoW.AlfaMoon.Com   (2007-04-23 11:48) [6]

Kedge ©   (22.04.07 22:21) [5]

>а затем сравнить 2 снимка, чтобы выявить произведенные изменения
Совсем не уверен, что из под Windows это полноценно возможно.

Чем же тогда объяснить существование и популярность такой программы, как RegSnap?


 
Kedge ©   (2007-04-23 12:58) [7]

> [6] SLoW.AlfaMoon.Com   (23.04.07 11:48)
> Совсем не уверен, что из под Windows это полноценно возможно.
> Чем же тогда объяснить существование и популярность такой программы, как RegSnap?
Во всех своих постах, я делал оговоки: imho и "в общем случае".
Чем "объяснить существование и популярность" - не знаю. :)
Так же, как и принципов ее работы. Но остаюсь при свем imho, а именно: в общем случае,
из под Windows станет возможно корректно "сделать снимок ветви системного реестра Windows, а затем сравнить 2 снимка",
только после реализации временной блокировки записи в реестр. А как это сделать - не представляю :)


 
GrayFace ©   (2007-04-23 13:57) [8]

А какой смысл получать полностью актуальный снимок реестра. Если интересует, что натворила конкретная прога, все что делает система до ее старта и после ее завершения не кажно.


 
Kedge ©   (2007-04-23 14:10) [9]

>[8] GrayFace ©   (23.04.07 13:57)
"Если интересует, что натворила конкретная прога", то, возможно, RegMon поможет ?


 
USTAS   (2007-04-23 17:54) [10]


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;


 
SLoW.AlfaMoon.Com   (2007-04-24 09:36) [11]

Kedge
Понятно. Все же автору, как я понял, слепок всего реестра не нужен. В таком случае RegSaveKey вполне подходит.


 
Admiral   (2007-04-29 15:54) [12]

Многоуважаемые мастера, спасибо за советы. Я тут вот до чего докопался:  подключив, в uses библиотеку ShelAPI, я получаю инструмент экспорта из виндовского RegEdita. По этой причине не стану изобретать велосипед и для сохранения ветви реестра буду юзать этот инструмент. Теперь проблема в следующем: чтобы сравнивать 2 снимка, я могу использовать либо полученные *.reg файлы(и сравнивать их), либо мне надо загонять сравниваемую ветвь в структуру типа «дерево» и сравнивать элементы 2х деревьев. Во втором случае нужно искать и вспоминать алгоритмы работы с деревьями. Посоветуйте, как лучше поступить. Сам чувствую, что лучше(но при этом и сложнее) работать с деревьями.
P.S.: обрадуюсь исходникам обоих способов :-)


 
TStas ©   (2007-05-01 20:30) [13]

Imho иерархию надо вешать на дерево и смотреть на дерево, хотя оно и очень тормозное.


 
Admiral   (2007-05-05 11:20) [14]


> подключив, в 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;



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.043 c
15-1191943278
$Pl@Sh
2007-10-09 19:21
2007.11.11
как устроить инет?


2-1192969619
Lebedev
2007-10-21 16:26
2007.11.11
Caption RadioGroup должен переходить на новую строку.


2-1192472919
Elec3C
2007-10-15 22:28
2007.11.11
Проблемка с динамическим массивом


2-1192803968
greengeneral
2007-10-19 18:26
2007.11.11
генерация


2-1192606931
ari_9
2007-10-17 11:42
2007.11.11
в run-time расположить отн. друг друга комп. с одинаковым align





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский