Есть такая задача:
Имеется сервер — win2000server, на нем база данных в виде каталога с файлами формата DBF.
Различные пользователи обращаются к базе данных и производят в ней изменения. Дак вот, суть задачи в том, чтобы отследить изменения, производимые пользователями, то есть какой пользователь изменил какой файл и что конкретно он в нем сделал?
Прошу помочь, может быть кто решал такую задачу, или хотя бы советом, с чего начать.
Посоветовали использовать следующие функции:
FindFirstChangeNotification( .....
FindFirstChangeNotification( .....
получу объект, который моЖно использовать дальше в WaitForMultipleObjects —
А КАК ОТСЛЕДИТЬ ИЗМЕНЕНИЯ, ПРОИЗВЕДЕННЫЕ В НЕМ ?
плиз, помогите....
Кстати, тему уже создавал, зашел снова и ее не увидел — в чем проблема, сейчас что, стало возможным удалять тему из форума кому угодно или меня модератор удалил?
Здравствуйте Dushes, Вы писали:
D>Приветствую тебя, уважаемая публика!
D>Есть такая задача: D>Имеется сервер — win2000server, на нем база данных в виде каталога с файлами формата DBF. D>Различные пользователи обращаются к базе данных и производят в ней изменения. Дак вот, суть задачи в том, чтобы отследить изменения, производимые пользователями, то есть какой пользователь изменил какой файл и что конкретно он в нем сделал?
D>Прошу помочь, может быть кто решал такую задачу, или хотя бы советом, с чего начать. D>Посоветовали использовать следующие функции: D>FindFirstChangeNotification( ..... D>FindFirstChangeNotification( ..... D>получу объект, который моЖно использовать дальше в WaitForMultipleObjects — D>А КАК ОТСЛЕДИТЬ ИЗМЕНЕНИЯ, ПРОИЗВЕДЕННЫЕ В НЕМ ? D>плиз, помогите....
D>Кстати, тему уже создавал, зашел снова и ее не увидел — в чем проблема, сейчас что, стало возможным удалять тему из форума кому угодно или меня модератор удалил?
Здравствуйте Dushes, Вы писали:
D>Здравствуйте Алекс, Вы писали:
А>>поставь аудит
D>И что мне это даст, мне нужно отследить, какой пользователь, что изменил, в каком файле, когда и что конкретно он изменил.....
D>С уважением D>Dushes
Аудит — какой пользователь изменил
FindFirstChangeNotification и FindNextChangeNotification — в каком файле изменил
А что он изменил нужно определять так:
1. Открываешь и считываешь содержимое файла
2. В цикле вызываешь FindNextChangeNotification() и WaitForMultipleObjects()
3. Открываешь и считываешь содержимое файла
4. Сравниваешь содержимое с предыдущий копией
5. Фиксируешь изменение
Здравствуйте Алекс, Вы писали:
А>Здравствуйте Dushes, Вы писали:
D>>Здравствуйте Алекс, Вы писали:
А>>>поставь аудит
D>>И что мне это даст, мне нужно отследить, какой пользователь, что изменил, в каком файле, когда и что конкретно он изменил.....
D>>С уважением D>>Dushes
А>Аудит — какой пользователь изменил А>FindFirstChangeNotification и FindNextChangeNotification — в каком файле изменил А>А что он изменил нужно определять так: А>1. Открываешь и считываешь содержимое файла А>2. В цикле вызываешь FindNextChangeNotification() и WaitForMultipleObjects() А>3. Открываешь и считываешь содержимое файла А>4. Сравниваешь содержимое с предыдущий копией А>5. Фиксируешь изменение
А попроще никак нельзя? Наверняка в NTFS или в NetBIOS есть информация о том, какой пользователь что изменил, какуй цепочку байт записал или какую удалил..... Пункт 4 уж больно дорогостоящий, весь сервер будет работать только на сравнение копий текущей и предыдущей, такой вариант никак не пойдет. Мне нужно отследить цепочки байт, пересылаемые в файл от конкретного пользователя, собрав такие цепочки в конце дня и наложив на предыдущую копию базы, я могу получить текущую копию, а затем ее уже сравнивать с предыдущей, таким образом увижу все изменения, которые произвел данный пользователь.
Здравствуйте Алекс, Вы писали:
А>Здравствуйте Dushes, Вы писали:
D>>Здравствуйте Алекс, Вы писали:
А>>>поставь аудит
D>>И что мне это даст, мне нужно отследить, какой пользователь, что изменил, в каком файле, когда и что конкретно он изменил.....
D>>С уважением D>>Dushes
А>Аудит — какой пользователь изменил А>FindFirstChangeNotification и FindNextChangeNotification — в каком файле изменил А>А что он изменил нужно определять так: А>1. Открываешь и считываешь содержимое файла А>2. В цикле вызываешь FindNextChangeNotification() и WaitForMultipleObjects() А>3. Открываешь и считываешь содержимое файла А>4. Сравниваешь содержимое с предыдущий копией А>5. Фиксируешь изменение
Правдо одно но !!!
А если открыла чужая прога, то не факт, что тебе дадут его прочитать.
Здравствуйте OlegO, Вы писали:
OO>Здравствуйте Алекс, Вы писали:
А>>Здравствуйте Dushes, Вы писали:
D>>>Здравствуйте Алекс, Вы писали:
А>>>>поставь аудит
D>>>И что мне это даст, мне нужно отследить, какой пользователь, что изменил, в каком файле, когда и что конкретно он изменил.....
D>>>С уважением D>>>Dushes
А>>Аудит — какой пользователь изменил А>>FindFirstChangeNotification и FindNextChangeNotification — в каком файле изменил А>>А что он изменил нужно определять так: А>>1. Открываешь и считываешь содержимое файла А>>2. В цикле вызываешь FindNextChangeNotification() и WaitForMultipleObjects() А>>3. Открываешь и считываешь содержимое файла А>>4. Сравниваешь содержимое с предыдущий копией А>>5. Фиксируешь изменение
OO>Правдо одно но !!!
OO>А если открыла чужая прога, то не факт, что тебе дадут его прочитать.
Сама прога должна висеть на сервере, ей указывается каталог, за которым она должна присматривать, если происходит операция записи в файл, должны отслеживаться изменения на данном этапе — только как это сделать проще всего? Можно ли повесить хук на файловые операции записи? Ведь наверняка можно найти простое решение, не используя слуюбы виндового аудита, который кстати мало чем поможет в данной ситуации......
Люди, поможите....
Здравствуйте Dushes, Вы писали:
D>Сама прога должна висеть на сервере, ей указывается каталог, за которым она должна присматривать, если происходит операция записи в файл, должны отслеживаться изменения на данном этапе — только как это сделать проще всего? Можно ли повесить хук на файловые операции записи? Ведь наверняка можно найти простое решение, не используя слуюбы виндового аудита, который кстати мало чем поможет в данной ситуации...... D>Люди, поможите....
D>Dushes
Здравствуйте Dushes, Вы писали:
D>Кстати, тему уже создавал, зашел снова и ее не увидел — в чем проблема, сейчас что, стало возможным удалять тему из форума кому угодно или меня модератор удалил?
Да ты видно давно не был на сайте.
Введу тебя в курс дела. Сейчас начала работать система автомодерирования. Твой вопрос перенесли в "Прочее" 3 человека.
Когда было два голоса за перенос я проголосовал чтобы оставить на месте, но видно нашелся кто-то третий. Кстати я не понимаю почему этому вопросу больше место в прочем чем в WinAPI. Когда мы чистили форум C++, то все вопросы касающиеся системного программитрования под Windows и т.п. подобные переносили в WinAPI.
Опять повторю, что надо выработать правила переноса тем, а то начинается хаос. И одно из правил должно быть "презумпция невиновности", т.е. если под сомнением к какому форуму вопрос ближе, то оставлять его на месте.
Здравствуйте OlegO, Вы писали:
OO>Посмотри Src Filemon'а на www.sysinternals.com может подойдет
Скачал данный пакет с исходными текстами, сижу понемногу разбираю, как все это сделано. Делается это через Service Control Manager (SCM). Как с ним работать, представления не имею. Может быть, кто подскажет, где можно найти русскоязычное описание для работы с сервисными службами WinNT.
Здравствуйте Dushes, Вы писали:
D>Здравствуйте OlegO, Вы писали:
OO>>Посмотри Src Filemon'а на www.sysinternals.com может подойдет
D>Скачал данный пакет с исходными текстами, сижу понемногу разбираю, как все это сделано. Делается это через Service Control Manager (SCM). Как с ним работать, представления не имею. Может быть, кто подскажет, где можно найти русскоязычное описание для работы с сервисными службами WinNT.
D>С уважением D> Dushes cool site
Здравствуйте Dushes, Вы писали:
D>Приветствую тебя, уважаемая публика!
D>Есть такая задача: D>Имеется сервер — win2000server, на нем база данных в виде каталога с файлами формата DBF. D>Различные пользователи обращаются к базе данных и производят в ней изменения. Дак вот, суть задачи в том, чтобы отследить изменения, производимые пользователями, то есть какой пользователь изменил какой файл и что конкретно он в нем сделал?
Попробуй сделать ShellExtension, т.е. COM-объект, который имитирует каталог, а на
самом деле DLL-ка. А сам Extension уже будет писать в настоящий файл. Только прокатит
ли такой фокус? Но теоретически вроде можно. Пример — Zip Folders.
Здравствуйте Dushes, Вы писали:
D>Здравствуйте OlegO, Вы писали:
OO>>Посмотри Src Filemon'а на www.sysinternals.com может подойдет
D>Делается это через Service Control Manager (SCM). Как с ним работать, представления не имею. Может быть, кто подскажет, где можно найти русскоязычное описание для работы с сервисными службами WinNT.
Это вообще не при чем.
SCM вызывается программой только для того, чтоб загрузить драйвер.
Советую немного не это, а код RegMon того же Руссиновича.
Там попроще техника.
Фишка в изменении драйвером таблицы системных вызовов.
Так что разбирайся в коде драйвера.
А подменять придется те функции, где есть в имени File, смотри что NTOSKRNL.EXE экспортит, формат функций какие захочешь я кину.
Это самый простой вариант, по крайней мере в ZwReadFile ты получишь именно то, что прога писала в файл. А дальше уж сам решишь, или пропускать вызов, или сразу вернуть STATUS_ACCESS_DENIED.
Здравствуйте, Dushes, Вы писали:
D>Здравствуйте OlegO, Вы писали:
OO>>Посмотри Src Filemon'а на www.sysinternals.com может подойдет
D>Скачал данный пакет с исходными текстами, сижу понемногу разбираю, как все это сделано. Делается это через Service Control Manager (SCM). Как с ним работать, представления не имею. Может быть, кто подскажет, где можно найти русскоязычное описание для работы с сервисными службами WinNT.
D>С уважением D> Dushes
А где там есть исходники filemona? Если есть исходники просьба поделится на kivi_@mail.ru. Заранее спасибо