|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Мониторинг файлов и реестра
Приветствую.
Интересует реализация. Есть вот всякие унинсталлеры и тому подобные программы которые следят за тем, какие файлы и ключи реестра (скажем при инсталяции) куда записываются. Большинство делает типа снимок системы => Установка => второй снимок системы и поиск изменений. Неужели эти программы полностью копируют диск и реестр а потом сравнивают ? Или там создаётся типа драйвера - перехватчика, который отслеживает все вызовы аля CreateFile, ReadFile...инсталятора и просто их логирует? Интересует быстродействие процесса создания снимков и сравнения. Может есть исходники типо таких мониторов? Спасиб. |
#2
|
|||
|
|||
Ну, реестр относительно невелик, так что можно и скопировать.
По поводу диска. Нет необходимости копировать весь диск. Достаточно просто сделать дерево структуры диска (именя файлов и папок и их размер и дату последнего доступа). Тебе зачем это надо? А то для файловой системы по крайней мере есть встроенный в систему мониторинг (NotofyEvent), но для этого монитор должен быть активен. |
#3
|
|||
|
|||
Привет.
Часто программы устанавливаемые мусор после себя всякий в системе оставляют после удаления. Что б начисто удалять всё. Для этого. Ну и второе,это иногда например надо портаблировать программу, и надо знать про неё всё, куда "ходит", что "смотрит"... Что б потом все используемые файлы собрать и носить вместе с программой. Но основное, это конечно "качественная уборка" системы. Есть очень хорошие проги для этого, например Total Uninstall от Гаврилы (кстати тоже на делфях написана прога). Делает всё быстро, качественно... Но программа обрастает лишними функциями, которыми я никогда не пользуюсь. При этом она платная... Вот и хотел бы сделать альтернативный "монитор"+ функции отслеживания использования файлов мне не хватает. Для примера. Есть у меня некая программа. Весит, скажем пол гига. Но я использую только пару функций из неё. При этом в программе работает только 15 мегабайт всех файлов, остальные валяются бесполезным грузом. Вот было б очень здорово, что б монитор вёл как бы статистику. Какие файлы программы- монстра используются постоянно, какие раз в месяц, а какие вообще никогда. Ну думаю мысль понятна Нужен шпион за программой что делает в системе, "куда ходит" с "кем дружит"... ))) Последний раз редактировалось TEKTON, 12.10.2018 в 15:31. |
#4
|
|||
|
|||
Просто запомнить какие файлы и ключи реестра трогались при установке, можно и это достаточно легко. Просто перед установкой запоминаем текущее состояние, потом сравниваем с состоянием после установки.
А вот для отслеживания текущих изменений придется все-таки хакать API, т.к. кто открывал файл на файловой системе (и в реестре) не отражается. Поищи в блоге Rouse, так были хорошие примеры хука API функций. Т.е. хукаем функции открытия файлов, в хуке выясняем каким процессом отркыт файл/ключ и потом передаем управление самой функции. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
TEKTON (12.10.2018)
|
#5
|
|||
|
|||
Цитата:
Цитата:
|
#6
|
|||
|
|||
Ну, для файловой системы строим дерево файловых объектов. Т.е. нам надо просто запомнить что и где хранится на диске. Для этого просто делаем вот такую структурку:
Код:
Type TFileSysItem=record Name : String; IsFolder : Boolean; Size : Int64; AccessDate : TDateTime; Items : TList; end; Зполняем это дерево через рекурсивную функцию с использованием FindFirst/FindNext/FindClose (примеров тьма даже на этом сайте). С реестром ничего подобного не делал, надо копаться что есть... по поводу перехвата функций API - см тут: http://alexander-bagel.blogspot.com/...intercept.html Последний раз редактировалось lmikle, 13.10.2018 в 00:45. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
TEKTON (15.10.2018)
|
#7
|
|||
|
|||
Цитата:
Вот тут, https://regedit.readthedocs.io/reg-cmd.html идёт работа с Cmd, но наверно можно прикрутить эти комманды и к delphi. В частности комманды REG SAVE и REG RESTORE. Вообще есть задумка написать типо скриптового движка. например есть консолька и скрипт: Код:
Копируем файл1 копируем файл2 копируем файл3 копируем файл ... Добавляем ключ1 в реестр Добавляем ключ2 в реестр Добавляем ключ3 в реестр ... Запускаем exe ждём, пока он не закроется, Сохраняем ключ1 из реестра Сохраняем ключ2 из реестра Сохраняем ключ3 из реестра .... Как сделать, что б комманды из скрипта работали последовательно? Ну то есть пока первая не отработает, все остальные "в очереди" стоят. |
#8
|
|||
|
|||
Ну так и делать.
Распарсить скрипт и выполнять по команде за раз по очереди. Там, собственно, единственное место - запуск и ожидание процесса. Если процесс стандартный, то тоже без проблем, просто через CreateProcess надо делать, что бы его хэндл получить, ну и ждать пока этот хэндл существует. |
#9
|
|||
|
|||
А что лучше, использовать команды Cmd или дельфяные ?
Просто Cmd шные мне больше знакомы, да и в определённых моментах они более эффективные и простые |
#10
|
|||
|
|||
KISS.
Если тебя устраивает cmd, то нефиг строить монстра. Это если вокруг этого скрипта надо еще кучу всего наделать, тогда имеет смысл что-то мастерить на Дельфи, а если только то, что ты указал в своем превдо-скрипте, то cmd или bash для этого вполне достаточно. |