2014-09-28 5 views
1

То, что я пытаюсь достичь, - запустить программу, которая считает, что папка существует в пределах своей собственной папки, в то время как на самом деле папка находится где-то еще в системе.Выполнение процесса внутри виртуальной файловой системы?

Так что моя программа будет запускать процесс и сказать процессу: Папка А, который находится в C: \ A находится в своем собственном каталоге, в C: \ Program Files (x86) \ SomeProgram \ A

Так «виртуальный» каталог будет доступен только для этого процесса.

Я использую Qt для программирования своей программы, поэтому, если есть какие-либо функции Qt, которые я мог бы использовать, это было бы здорово (относительно переносимости). Тем не менее, план C++ или любые связанные с окнами API API будут в порядке.

Я думал о соединениях NTFS или символических ссылках, но я бы не знал, как создать любой из них на C++, не говоря уже о привязке их к определенному процессу.

Заранее благодарен!

EDIT:

В связи с вышеизложенным, я нашел этот вопрос: https://superuser.com/questions/234422/does-windows7-support-symbolic-links-folder-shortcuts. Тем не менее, он показывает только, как выполнять требуемые действия из командной строки, и это не будет связано с процессом.

EDIT 2:

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

+0

Вы говорите о символических ссылках? –

+0

Я так думаю, однако мне нужно, чтобы ссылки были видимыми только для целевого процесса и создавали их с помощью C++. – Qub1

+1

Один из способов - перехватить базовый API файловой системы (CreateFile, FindFirstFile и т. Д.) И выполнить перенаправление там. Если вы пройдете этот маршрут, я бы рекомендовал проверить библиотеку Microsoft Detours. – MrEricSir

ответ

0

Я думаю, что собираюсь придерживаться команды mklink Window. Кажется, мне лучше всего нужны мои потребности.

Что я буду делать, это использовать QFile :: link() во всех операционных системах, которые не являются Windows, и QProcess с mklink на окнах. Это должно работать на каждой операционной системе.

Для хорошего примера смотрите здесь: https://stackoverflow.com/a/21013935/979732

0

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

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

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