Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: CL | DM;

Вниз

Перехват чтения и записи фалов   Найти похожие ветки 

 
Андрей2   (2004-05-27 18:59) [0]

Как перехватить чтение и запись файлов (перед данной операцией) и получить имя модуля, пытавшегося прочитать или записать изменения в файл. Слышал, что необходимо использовать драйвер, причём для ОС Windows 9x и NT разный (для 9x - vxd, а для NT - sys), в котором при инициализации нужно вызвать IFSMGR_InstallFileSystemApiHook, но как её вызывать и читать данные - понять не могу. Также хотелось бы в некоторых случаях отклонить доступ к файлу (получится что-то типа программы Folder Guard). Но задача - не из лёгких. Я также пробовал исследовать исходник FileMon-а, но, к сожалению, он на C++, а я его, к сожалению, очень плохо понимаю. Если надо - могу дать ссылку на этот исходник. Только помогите пожалуйста.


 
SammIk ©   (2004-05-27 20:04) [1]

А не рановатоли тебе об этом думать?
Проще сделать перехватом вызовов open(create)file;
Забудь про это на полгода, в течении которых исчи и читаи нужную
литературу, и поищи DDK


 
jimmy   (2004-05-27 21:49) [2]

Удалено модератором


 
Ihor Osov'yak ©   (2004-05-28 02:07) [3]

скажем так, проблемы с си там не самая главная проблема..

.. если не волнует лицензионная чистота решения - можно попользовать и драйвера от сисинтерналс - интерфейс там простенький. Но эти драйвера делают только мониторинг - запрета на операцию там нет...

.. Задача довольно трудоемкая.. Если опыт в этом деле нулевой - уйдет только на чтение книжек не один месяц. А книжки в основном буржуйские, с русскоязычных - ищите по фамилии Солдатов (названия точно не помню - но слова "разработка" и "драйверов" там присутствуют,   вышла недавно мелким тиражом) - как толковый ввод в предметную область  очень удачно написано.  Но снова - только NT (sys).  После чтения - имея в руках исходники сисинтерналс - можно их немного адаптировать - но снова вопрос лицензионной чистота. Если же делать оригинальную реализацию - имхо, тоже не один месяц..

Да, если не ошибаюсь, в инете бегают исхождники древних версий, которые имели обычай иногда работать нестабильно. Исходники новых версий сисинтерналс, кажется, не обнародуют..


 
Known Unknown   (2004-05-28 13:46) [4]

Удалено модератором


 
Андрей2   (2004-05-28 14:58) [5]

А ты, Known Unknown, поможешь с решением моей задачи?


 
Андрей2   (2004-05-28 21:31) [6]

А теперь обращусь к SammIk. Слушайте, мы здесь собрались не для того, чтобы выяснять возраст или знания, а для того, чтобы помочь друг другу в решении возникающих проблем. Вы бы ещё посоветовали выпить кружку пива... Не можете помочь конкретным советом по теме - лучше вообще ничего не пишите.


 
Андрей2   (2004-05-28 21:33) [7]

Теперь настало время обратиться к Ihor Osov"yak. Да, Вы угадали - версия исходников, бродящая по Интернету и имеющаяся у меня, старая - 4.34.0.0, однако рабочая и меня это удовлетворяет.
Как в файле Readme.txt указано - sys-файл создан при помощи Windows NT DDK Build, но в отдельной папке с этим sys-файлом какие-то исходники на Си (я в недоразумении). По поводу vxd указывается, что он был построен при помощи Numega VtoolsD 2.0. Но с vxd мне кажется проблем меньше - и в каких-то советах по Delphi слышал, что можно в Delphi писать vxd-драйверы (хотя это и не выгодно), также нашёл в Интернете примерчик Spy_file_io (тоже с исходником на Си), в котором, как-то странно, но вроде-бы, если разобраться, то можно построить vxd (и без всякого Numega VtoolsD). А вот с sys-файлом - проблемы.
Также для себя я сделал некоторый вывод - язык C++ - это действительно штука, причём неизмеримая с Delphi, поэтому, как говорится, лопату в зубы - буду пытаться изучать C++, ведь большинство продвинутых программных продуктов пишется именно на Си а не на Delphi. И этот вопросик тогда уж, немного погодя, задам в форуме по C++, а этот форум, если ни у кого нет пожеланий и решений этой задачи средствами Delphi, наверное, можно будет закрыть. Большое всем участвующим в решении этой задачи спасибо.


 
Ihor Osov'yak ©   (2004-05-29 01:25) [8]

> Да, Вы угадали

Я не угадал. Я знал.

> создан при помощи Windows NT DDK Build .... какие-то исходники на Си

DDK - инструментарий, документация, библиотеки
Си  - язык программирования

> По поводу vxd .. Numega VtoolsD 2.0.

Не знаю, комментрировать не буду. Меня интересовал релиз для NT ряда, то бишь sys aka WDM. vxd - для 95. 98 допускает vxd или wdm (sys) - но для случая драйвера-фильтра придется подстраиваться под соотв. функциональный драйвер, то есть в даном случае наверное vxd. "Наверное" потому, что меня не интересовал релиз для ряда w9x, я этот вопрос не прорабатывал ..

.. Numega VtoolsD - всего лишь надстройка над тем же ддк (некоторые дополнительные библиотеки, инструментарий), не имея базовых знаний - браться за нее бессмыслено - но это уже не на собственом опыте (у меня руки к этому продукту так и не дошли), а на анализе доступных источников информации.

> и в каких-то советах по Delphi слышал, что можно в Delphi писать vxd

это еще похлеще, чем гланды рвать через одно известное место.
Нет библиотек, линковщик не умеет собирать соотв. формат бинарного модуля.
В конце статьи соответсвеной рекомендации о том, что в бинарных модулях ручками править (или что-то в этом духе - точно не помню, так как  статью я давно читал и выбросил из-за практической непригодности и идеологической вредности). Ручками править, чтобы в конечном итоге можно было сборку сделать тем же линковщиком от masm. Да и драйвер уровня "hello, world". И это пожалуй максимальный уровень, что можно сделать по соотв. "технологии".  

> язык C++ - это действительно штука

таки да

> причём неизмеримая с Delphi,

таки да. Круг решаемых задач примерно одинаков (для win32), но производительность работы делфийца для случая одинаковой квалификации, как минимум, раза в два выше. Если не больше. Поэтому я всегда отдаю предпочтение D. Если заказчик настаивает на С - называю в три раза более высокую цену. Это позволяет либо достичь консенсуса в плане D, либо компенсирует моральные издержки из-за работы на си

Еще. В DDK фактически не используются обьектные навороты плюсов, работа идет в стиле старого доброго си.

Еще2. Для vxd все же более удобен asm, чем си.. Во всяком случае - большинство деклараций - ассемблерные, а не сишные :-).. Да, в составе Numega VtoolsD еще есть перевод части ассемблерных деклараций на с-шные.. Так как все же писать на ассемблере - это не для слабонервных.

Eще3. То, что при разработке драйверов используется си и asm, а не тот же паскаль - это не свидетельство "ущербности" паскаля. Это говорит лишь о том, что конкретные реализации компиляторов/линковщиков поддерживают/не поддерживают соотв. формат исполнительных файлов..

> буду пытаться изучать C++,

Это во вред не пойдет, очень вероятно - что на пользу..

> задам в форуме по C++,

Флаг в руки..

>  можно будет закрыть

Еще один в руки. Может даже барабан в придачу.


 
Ihor Osov'yak ©   (2004-05-29 01:41) [9]

немного напряг память - "sys aka WDM" - в конкретном случае я ошибся. Релиз сисинтерналс для ряда NT все же сделан не в стиле WDM, а в стиле "legacy driver", то есть в стиле драйвера NT4.



Страницы: 1 вся ветка

Текущий архив: 2004.07.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.036 c
6-1084715048
lightix
2004-05-16 17:44
2004.07.11
Список сетевых компьютеров в C++ Builder


1-1087928731
georg
2004-06-22 22:25
2004.07.11
StringGrid Фиксирование ячеек


1-1088524227
hgd
2004-06-29 19:50
2004.07.11
Как подсоединить Excel к Delphi


1-1088174609
Максим
2004-06-25 18:43
2004.07.11
Есть ли ещё способы создания текстового файла, кроме AssignFile?


14-1087779761
Vasya.ru
2004-06-21 05:02
2004.07.11
RTF - чем хуже DOC а?