Информация об изменениях

Сообщение FS Minifilter. Как сделать подсчет хеша файла от 10.01.2018 15:12

Изменено 10.01.2018 15:19 sergey77666

FS Minifilter. Как сделать подсчет хеша файла
А именно не того файла, с которым работают — а того исполняемого, который работает. Его контрольную сумму на данный момент.

Придумал такое решение:
— в каллбеке фильтра информация (включая путь к этому exe) не добавляется сразу в глобальную очередь записи в лог, а создается новый поток и она передается в него
— этот поток пытается открыть файл и посчитать MD5, результат добавляет в глобальную очередь
— поток логирования, как и сейчас, каждые N времени проверяет, не пуста ли очередь, если полна — создает файл лога и пишет ее всю

Но есть вопросы:
— насчет открывания файлов, насколько будет велик шанс, что он сможет открыть EXE-файл, который, скорее всего, сейчас выполняется?
— сможет ли он открывать его так, чтобы гарантированно не повредить ему этим (если тот читает себя самого — SFX, например)?
— нету ли все-таки какого-то более готового способа получить хоть какой-то хеш EXE-файла? Который не только лежит на диске как файл, но и загружается как процесс.
— как лучше упорядочить все это? Сейчас каждая запись лога датирована временем перехвата, имя файла лога датировано временем выгрузки в потоке логирования.
С этим MD5 мы получим нарушенный порядок везде...
Если кратко, то вопрос: драйверу лучше на это забить совсем (пусть утилита для чтения логов упорядочивает) или пытаться все-таки привести в нормальный вид?
FS Minifilter. Как сделать подсчет хеша файла
А именно не того файла, с которым работают — а того исполняемого, который работает. Его контрольную сумму на данный момент.

Придумал такое решение:
— в каллбеке фильтра информация (включая путь к этому exe) не добавляется сразу в глобальную очередь записи в лог, а создается новый поток и она передается в него
— этот поток пытается открыть файл и посчитать MD5, результат добавляет в глобальную очередь
— поток логирования, как и сейчас, каждые N времени проверяет, не пуста ли очередь, если полна — создает файл лога и пишет ее всю

Но есть вопросы:
— насчет открывания файлов, насколько будет велик шанс, что он сможет открыть EXE-файл, который, скорее всего, сейчас выполняется?
— сможет ли он открывать его так, чтобы гарантированно не повредить ему этим (если тот читает себя самого — SFX, например)?
— нету ли все-таки какого-то более готового способа получить хоть какой-то хеш EXE-файла? Который не только лежит на диске как файл, но и загружается как процесс.
— как лучше упорядочить все это? Сейчас каждая запись лога датирована временем перехвата, имя файла лога датировано временем выгрузки в потоке логирования. Смотрим лог "12:00", видим в нем события между предыдущим логом и 12:00.
А с этим MD5 мы получим нарушенный порядок везде...
Если кратко, то вопрос: драйверу лучше на это забить совсем (пусть утилита для чтения логов упорядочивает) или пытаться все-таки привести в нормальный вид?