Может ли приложение выдавать себя за файл или папку? - PullRequest
1 голос
/ 19 февраля 2012

Я пытался централизовать свои компьютерные игровые сохранения, чтобы упростить резервное копирование и восстановление, а также разместить их в облаке с помощью Dropbox, но есть места, где это может быть довольно сложно. Я заметил, что Windows 7 и Vista теперь поддерживают символические ссылки, поэтому я поиграл с этим, но мне было интересно узнать следующее:

Возможно ли (пример кода или точка в правильном направлении) для приложения (vb.net или C ++) подделать файл или папку?

например. Приложение A (игра, такая как Diablo III или Civilization V) пытается прочитать или прямо из файла A (сохранение игры), приложение B (хранилище сохранения) обнаруживает этот запрос чтения / записи и передает запрос через себя, предварительно выполнив запрос файла. B (фактическое сохранение игры в другом месте). Приложение A никоим образом не изменяется и нормально обрабатывает файл.

Примечание: я понимаю, что есть много простых способов выполнить одну и ту же задачу по существу, например, отслеживать использование приложения A или периодически проверять файл A и копировать его, если он был изменен с момента последней проверки и т. Д., Но все эти методы имеют отступать и меньше заинтересованы в том, чтобы заставить его работать, чем если бы это было возможно.

Ответы [ 3 ]

7 голосов
/ 19 февраля 2012

Это вполне возможно сделать через драйвер фильтра файловой системы. Для получения информации об этом, посмотрите здесь:

http://msdn.microsoft.com/en-us/windows/hardware/gg462968

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

0 голосов
/ 19 февраля 2012

Да или нет в зависимости от (используя ваши термины) уровня абстракции, используемого в Приложении А.

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

С другой стороны, если приложение А должно было использовать HTTP с RESTful URL-адресами, тогда HTTP-сервер мог бы отвечать на все запросы из файлов или динамически создавать содержимое.

Таким образом, на вопрос можно дать конкретный ответ, зная подробности Приложения A.

0 голосов
/ 19 февраля 2012

Вы можете «подделать» специальные папки, как это делает панель управления, но я не думаю, что вы можете создать что-то доступное / доступное для записи (простым способом). Я могу ошибаться, хотя. У меня тоже когда-то была такая же идея (в качестве шага совместимости для некоторых вещей компании), но я не смог найти ничего поддерживающего легкий способ сделать это. Кажется, что это может быть проще сделать в системах Unix (но это, очевидно, здесь не вариант). Кроме того, я не ожидаю каких-либо хороших или простых решений для .net.

Единственный подход, о котором я мог бы подумать прямо сейчас, - это перехватить соответствующие API-вызовы (например, FileOpen) для перенаправления / манипулирования ими (аналогично тому, что делают корневые наборы), но я бы не сказал, что это хорошая идея, учитывая, что он может быть обнаружен как возможное вредоносное ПО или читы с помощью таких вещей, как punkbuster или антивирусные решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...