Проблемка. Надо перехватывать сообщение об удалении или изменении файла. И вообще всего что связано файлами (сохранение и т.п.)
Сколько вообще различных сообщений связанных с файлами и директориями (именно все виды чтения создания, редактирования удаления)
И как их перехватывать?
Спасибо!
06.04.07 11:32: Перенесено модератором из 'C/C++. Прикладные вопросы' — Odi$$ey
Здравствуйте, HighVoltage, Вы писали:
HV>Проблемка. Надо перехватывать сообщение об удалении или изменении файла. И вообще всего что связано файлами (сохранение и т.п.)
HV>Сколько вообще различных сообщений связанных с файлами и директориями (именно все виды чтения создания, редактирования удаления) HV>И как их перехватывать?
А какая платформа? Насколько я понимаю, универсального кросплатформенного решения не существует.
"To protect people you must slay people. To let people live you must let people die. This is the true teaching of the sword."
-Seijuro Hiko, "Rurouni Kensin"
Здравствуйте, HighVoltage, Вы писали:
HV>Проблемка. Надо перехватывать сообщение об удалении или изменении файла. И вообще всего что связано файлами (сохранение и т.п.)
Здравствуйте, HighVoltage, Вы писали:
HV>Проблемка. Надо перехватывать сообщение об удалении или изменении файла. И вообще всего что связано файлами (сохранение и т.п.) HV>Сколько вообще различных сообщений связанных с файлами и директориями (именно все виды чтения создания, редактирования удаления) HV>И как их перехватывать?
FindFirstChangeNotification() возвращает хэндл синхрообъекта, который переходит в сигнальное состояние при заявленных изменениях. (Чтение, естественно, не считается изменением).
Ждёшь его с помощью WaitFor...;
Вычитываешь все изменения с FindNextChangeNotification (пока не сделаешь это, он будет пребывать в сигнальном состоянии);
Получаешь подробности об изменениях с ReadDirectoryChange;
и снова ждёшь...
А в конце закрываешь хэндл с помощью FindCloseChangeNotification (а не CloseHandle).
Ну а чтобы мониторить, кто что читает — это уже надо драйвер писать, наверное.
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, HighVoltage, Вы писали:
HV>>Проблемка. Надо перехватывать сообщение об удалении или изменении файла. И вообще всего что связано файлами (сохранение и т.п.) HV>>Сколько вообще различных сообщений связанных с файлами и директориями (именно все виды чтения создания, редактирования удаления) HV>>И как их перехватывать?
К>FindFirstChangeNotification() возвращает хэндл синхрообъекта, который переходит в сигнальное состояние при заявленных изменениях. (Чтение, естественно, не считается изменением). К>Ждёшь его с помощью WaitFor...; К>Вычитываешь все изменения с FindNextChangeNotification (пока не сделаешь это, он будет пребывать в сигнальном состоянии); К>Получаешь подробности об изменениях с ReadDirectoryChange; К>и снова ждёшь... К>А в конце закрываешь хэндл с помощью FindCloseChangeNotification (а не CloseHandle).
К>Ну а чтобы мониторить, кто что читает — это уже надо драйвер писать, наверное.
Спасибо.
А на иполнение? Ведь тот же AVP или NOD32 видят когда я даже хочу открыть файл. или читаю, и проверяют их перед тем как дать мне их запустить (прочитать), если включен режим проверки файлов.
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Здравствуйте, HighVoltage, Вы писали:
HV>>Проблемка. Надо перехватывать сообщение об удалении или изменении файла. И вообще всего что связано файлами (сохранение и т.п.)
SDB>ReadDirectoryChangesW()/FindFirstChangeNotification()/FindNextChangeNotification()/FindCloseChangeNotification()
10х )))
краткость сестра таланта, и мачеха гонорара
Re[3]: Сообщения о работе с файлами. Перехват.
От:
Аноним
Дата:
06.04.07 10:50
Оценка:
HV>А на иполнение? Ведь тот же AVP или NOD32 видят когда я даже хочу открыть файл. или читаю, и проверяют их перед тем как дать мне их запустить (прочитать), если включен режим проверки файлов.
Ты скажи сразу — тебе нужен серьёзный метод получения уведомлений, или так, поиграться просто?
И поддержка каких ОС нужна?
HV>Да, 1-е. Серьозный метод получения уведомлений.
Тогда однозначно — писать драйвер.
Для мониторинга операций с файлами — драйвер-фильтр файловой-системы. Это не сложно.
Для мониторинга созданий процессов (aka запуска исполняемых файлов) — PsSetLoadImageNotifyRoutine() и PsSetCreateProcessNotifyRoutine() Kernel API.
HV>Win XP/2K/2k3.
См. выше. Такое решение как раз будет переносимым.
HV>Я думаю там всё эдентично.
Здравствуйте, Аноним, Вы писали:
HV>>Да, 1-е. Серьозный метод получения уведомлений.
А>Тогда однозначно — писать драйвер.
А>Для мониторинга операций с файлами — драйвер-фильтр файловой-системы. Это не сложно. А>Для мониторинга созданий процессов (aka запуска исполняемых файлов) — PsSetLoadImageNotifyRoutine() и PsSetCreateProcessNotifyRoutine() Kernel API.
HV>>Win XP/2K/2k3.
А>См. выше. Такое решение как раз будет переносимым.
HV>>Я думаю там всё эдентично.
А>Так, как обрисовал тебе я, — да.
Уважаю спасибо. Но возникает следующий вопрос, по драйверу, что где и как? Имею ввиду МАТ Часть и сопутствующие советы если не сложно и можно)
Re[7]: Сообщения о работе с файлами. Перехват.
От:
Аноним
Дата:
06.04.07 11:49
Оценка:
HV>Уважаю спасибо.
Пожалуйста. Kernel-программерофф не так уж много, так что я только рад буду, если кто-то решиться-таки освоить это.
HV>Но возникает следующий вопрос, по драйверу, что где и как?
Спроси в подфоруме "Низкоуровневое программирование" на RSDN. Мне сейчас некогда — скоро проект сдавать
HV>сопутствующие советы если не сложно и можно)
Советы от меня и других участиков форума получишь, когда начнёшь задавать более конкретные вопросы.
Здравствуйте, Аноним, Вы писали:
HV>>Уважаю спасибо.
А>Пожалуйста. Kernel-программерофф не так уж много, так что я только рад буду, если кто-то решиться-таки освоить это.
HV>>Но возникает следующий вопрос, по драйверу, что где и как?
А>Спроси в подфоруме "Низкоуровневое программирование" на RSDN. Мне сейчас некогда — скоро проект сдавать
HV>>сопутствующие советы если не сложно и можно)
А>Советы от меня и других участиков форума получишь, когда начнёшь задавать более конкретные вопросы.
Здравствуйте, HighVoltage, Вы писали: HV>Да, 1-е. Серьозный метод получения уведомлений.
Кстати, стопроцентной гарантии перехвата событий всё равно нет — это в конечном счёте функция файловой системы. Например, если какой-то диск примаутчен через CIFS, то нотификации будет только если сервер поддерживают этот протокол.С помошью драйвера упомянутого в теме, можно точно отследить только изменения на локальной машине, и то я не уверен что всегда.
"To protect people you must slay people. To let people live you must let people die. This is the true teaching of the sword."
-Seijuro Hiko, "Rurouni Kensin"
Здравствуйте, HighVoltage, Вы писали:
HV>Проблемка. Надо перехватывать сообщение об удалении или изменении файла. И вообще всего что связано файлами (сохранение и т.п.)
читаю форум за посл месяц — каждые 30-50 вопросов — Ваш. Re: Отсаживание удаляемых файлов. Что посоветуете?
дальше может быть сами по форуму пройдетесь? или сразу в поиск в профильный форум как правильно аноним уже отправил. file system filter driver — поиск по этим словам
HV>Сколько вообще различных сообщений связанных с файлами и директориями (именно все виды чтения создания, редактирования удаления)
see IRP_MJ_XXX + FastIo ф-ии
при установленном IFS Kit или WDK примеры лежат тут <DDK>\src\filesys\filter
HV>И как их перехватывать?
выше
... << RSDN@Home 1.2.0 alpha rev. 677>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.