Comments 21
Кстати, теги сейчас более читабельными стали ;)
Спасибо! Было интересно почитать.
Есть программное обеспечение, которое перехватывает вызовы работы с файлами и подменяет файл на указанный.
Например: требуется открыть c:\mypath\settings\bla.cfg, вместо него открывается z:\portable\mypath\setting\bla.cfg
аналогичный алгоритм для путей т.е. подменяем c:\mypath\* на z:\portable\mypath\*
И ещё одна возможность: перехват обращений к реестру и записи их в файл.
Может подскажите что то, куда копать?
Для реестра — смотря что имеется в виду. Если просто мониторинг, то есть Process Explorer, который это умеет. Если надо, чтобы вместо реестра всё записывалось в файл (и потом читалось из этого же файла), то даже не знаю. Если верить MSDN, реестр тоже поддерживает символические ссылки, с предупреждением «использовать, только если вопрос жизни и смерти». Если найти инструмент, умеющий их создавать (regedit не умеет), в HKEY_USERS загрузить внешний файл-куст, а вместо нужного ключа создать символическую ссылку на этот загруженный куст, может быть, это и сработает, но файл будет в специальном бинарном реестровом формате. Подменить реестр, скажем, на INI-файлы так не получится.
Есть ещё возможность глобальных хуков, перехватывающих обращения к WinAPI-функциям, но это надо программировать. Не знаю, существуют ли готовые программы, реализующие такую подмену.
• Поправочка, не Process Explorer, а Process Monitor. Я и сам их долго путал.
• regedit.exe вообще мало что умеет, на подобные случаи есть консольная утилита reg.exe
Интересный вопрос. Здесь я вижу несколько возможностей, по мере увеличения сложности:
1) Вам однозначно стоит посмотреть Sandboxie. Он выполняет полноценную виртуализацию файловой системы и реестра для приложений, запущенных внутри песочницы. При некоторой изобретательности можно подменить что угодно чем угодно. Все отличия реального реестра от виртуального он хранит в стандартном HIVE файле, экспортировать их в .reg — не проблема. Если возникнут какие-то конкретные сложности — пишите в личку, я с радостью отвечу, это моя любимая тема.
2) Можно создать виртуальный диск используя Dokan. Все обращения к нему можно будет легко самостоятельно обрабатывать из пользовательского режима как вздумается (например, перенаправляя на другие диски). Но только к нему, а не к системным дискам. И придётся кодить.
3) Если внедрить свою dll в чужой процесс, то можно подменить нужные системные вызовы для работы с файловой системой и реестром, и на ходу менять пути, к которым обращается программа. Здесь тоже придётся кодить, и больше. Для реализации на Delphi есть advApiHook.pas.
4) Написать свой минифильтр файловой системы. см. Как написать свою «песочницу». Это уже довольно жестоко.
Мои пути скорее всего 3 и 4, люблю велосипеды.
Сандбоксие взял в копилку к тспвиев, филемон и регмону.
Благодарствую.

Кстати, проводник Windows тоже знает об этой проблемеЭто какая версия Windows настолько умная? Окошко точно родное проводниковое?
В 8.1 файл program.exe создаётся/переименовывается без предупреждений
Перехватываем запуск любого приложения в Windows и пытаемся ничего не сломать