2014-05-19 8 views
2

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

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

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

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

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

+1

Если у вас достаточно большой бюджет, я считаю, что есть хотя бы один сторонний продукт, который реализует программируемый драйвер фильтра файловой системы. –

+0

Этого не может быть и речи. Я посмотрел, и я не мог найти ничего, что бы это сделало. Вы можете рекомендовать какой-либо продукт? –

+1

Не из личного опыта, нет. Но я нашел ссылку на продукт, о котором я думал: см. Http://stackoverflow.com/a/3541555/886887 –

ответ

1

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

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

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

+0

Ну, запись в другое место - всего лишь один сценарий. Я, по сути, нуждаюсь в полном контроле над тем, какой каталог «выглядит» для конечного пользователя. Некоторые виртуальные файлы могут указывать на физический файл на диске, некоторые элементы хранятся в памяти, и в некоторых случаях мне также необходимо манипулировать содержимым файла. благодаря! –

+0

@RobertSeder: Это только усиливает мою веру в то, что вы задаете неправильные вопросы, потому что у вас уже есть решение наполовину. Например, конечный пользовательский вид файловой системы - это Explorer. Что уже может интегрировать такие вещи, как вид мобильного телефона, панель принтеров или панель управления. Я думаю, что есть примерный проект, который также интегрирует реестр. – MSalters

+0

Нет, большинство функций будет выполняться через командную строку - НЕ через оболочку! –

Смежные вопросы