![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Строчу потихоньку курсач - антивирус. Вот написал сканирующий блок, пока он только собирает списки папок и файлов. Принцип такой:
Есть некая стартовая точка, от которой будет проводиться сканирорвание, например, диск D: или D:\projects, программа собирает список всех папок от этой точки в массив и затем для каждой из этих папок составляет список файлов и по каждому из файлов проводит сканирование. Но вот в чем проблема, пока идет сканирование, программа как бы подвисает, но не зависает, т.е. весь интерфейс подвисает, а по прогресс-барам понятно, что сканирование идет. Т.е. если мне вдруг нужно будет остановить сканирование, то я не смогу нажать кнопку, пока сканирование полностью не будет окончено, ибо форма в это время ни на что не реагирует. Возможно ли как-то обойти эту проблему? |
#2
|
||||
|
||||
![]() Понять, что хочет заказчик - бесценно, ведь он платит MasterCard ![]() |
#3
|
|||
|
|||
![]() Используйте для сканирования отдельный поток, тогда форма не будет подвисать. Кстати, я бы не стал сначала получать список файлов, а потом еще раз по нему идти - проще по ходу получения файлов их проверять. тогда имена файлов не будут занимать лишней памяти, и вообще, работать будет быстрее. Ежели не секрет - какой алгоритм сканирования используете?
|
#4
|
|||
|
|||
![]() Цитата:
Цитата:
В принципе я так и делаю - я храню в памяти только список файлов одной директории, потом память освобождаю. Потом записывается список для следующей директории и т.д. Алгоритм довольно прост: 1) Берем начальную точку 2) От этой точки берем список всех папок (в т.ч. и вложенных) 3) Далее в цикле прогоняем каждую папку - - Для папки получаем список файлов - - Прогоняем полученные файлы в цикле - - - Берем md5 хеш-сумму файла, ищем ее в базе - - - Если в базе найден такой хеш, файлик есть вирус - - Освобождаем память под файлы Конечно при таком подходе зараженный файлы не отловить, а только "чистые" вирусы. Но мне пока больше и не нужно ![]() Еще планирую по такому же плану сканировать процессы: - Сначала перейти к файлу, запустившего процесс и проверить его - затем получить список всех спроецированных в процесс библиотек и их отсканировать |
#5
|
|||
|
|||
![]() В поток пока засунуть процедуру не получается, вылетает ошибка, хотя если сувать что-то простенькое, вроде ShowMessage, то по большому счету работает.
|
#6
|
||||
|
||||
![]() Если обращаешься в VCL компонентам из потока, надо синхронизировать поток.
Конечно шансы маленькие, но если будет колизии, Ваш "антивирус" будет кричать зря ![]() ЗЫ http://habrahabr.ru/post/145454/ + Просто воспользуйтесь поиском по данному сайту, тут были примеры более "умных" антивирусов. Как минимум: http://www.delphisources.ru/pages/so...antivirus.html http://www.delphisources.ru/pages/so...us_module.html Помогаю за Спасибо ![]() |
#7
|
||||
|
||||
![]() Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |