Форум: "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.04 c