Как перехватить вызовы Win32 API с помощью C #?

Я хотел бы либо разместить виртуальный диск и перехватить ввод-вывод, либо перехватить вызовы ввода-вывода для определенных папок на жестком диске, и выполнить произвольные действия с этим вызовом, например записать файл во второе место. Например, если Notepad.exe записывает файл в C: \ Data \ test.txt — я хотел бы получить доступ к этому имени файла и данным этого файла. Кроме того, я хотел бы запустить произвольный код, когда любой пользователь пытается прочитать C: \ Data \ test.txt или пытается получить список каталогов для C: \ Data.

В идеале я хочу иметь обработчик для случая, когда файл: создан, обновлен, удален или открыт — и когда кто-то делает листинг каталога (из командной строки или из командной консоли).

Я могу выполнить запись с помощью FileSystemWatcher, но не могу перехватить «чтение» диска. Итак, я затем посмотрел на MS Detours и EasyHook. Это не сработает, потому что мне нужно отслеживать каждый процесс на компьютере и подключаться к OpenFile на ВСЕХ из них. Я не хочу использовать Shell Extension, потому что это поведение должно существовать и из командной строки. Таким образом, это оставляет либо написание драйвера File System MiniFilter, либо написание моей собственной устанавливаемой файловой системы на C ++.

У меня может быть какая-то часть этого в C ++ — хотя драйверы у меня немного перегружены, но в конечном итоге большая часть кода должна быть на C #, в идеале.

Есть ли какой-нибудь простой способ перехватить ввод-вывод в определенную папку или виртуальный диск? Если ответ на EasyHook или MiniFilter, есть ли у кого-нибудь образцы? В частности, у EasyHook есть образцы только с конца 2000-х, и с тех пор API изменился. Спасибо!

2

Решение

Похоже, проблема XY. То, что вы хотите, это обработчики точек повторного анализа.

Ваш пример «записи файла в другое место» — это просто ссылка, и они уже существуют. Реализуется стандартным обработчиком точек повторной обработки.

Вы не указываете точно, что еще вы хотите сделать, но подобные вещи могут быть сделаны с помощью пользовательских обработчиков точек повторной обработки. Короче говоря, точка повторной обработки представляет собой небольшой бит данных вместо файла, который (1) указывает, какой обработчик должен быть вызван, и (2) предоставляет пользовательские данные этому обработчику. Например, фактическое местоположение файла. Так как это пользовательские данные, вы можете использовать любой формат, который вам нравится.

1

Другие решения


По вопросам рекламы [email protected]