Проект, над которым я сейчас работаю, требует реализации механизма copy-on-w / m, который будет использоваться для перенаправления дискового ввода-вывода аналогично Deep Freeze или Sandboxie в Windows XP. Если бы я мог, я бы также хотел иметь возможность «монтировать» измененные пользователем файлы, подобно тому, как VirtualCloneDrive имитирует дисковые накопители и прозрачно монтирует на них образы ISO.
Насколько я понимаю, такие программы используют драйверы минифильтра для перенаправления запросов ввода-вывода. Стандартный процесс копирует любые измененные данные во вторичное расположение, а затем читает / изменяет это хранилище для последующего доступа к этим данным; так что я думаю, что понимаю, что мне нужно там делать. Когда дело доходит до моделирования привода CD / DVD и установки на него образа, я совершенно заблудился.
Я искал в Интернете (Google, MSDN, The Code Project и т. Д.) И в таких книгах, как Разработка драйверов с помощью Windows Driver Foundation и Внутреннее устройство файловой системы Windows NT: Руководство разработчика, но найти конкретную информацию и примеры (по мониторингу, перехвату и перенаправлению запросов и созданию устройств обратной связи) оказывается затруднительным. Я все еще новичок в используемых технологиях, так что, возможно, мне трудно разглядеть лес за деревьями.
Мне было интересно, был ли кто-нибудь в подобной ситуации и обнаружил ли какие-либо полезные ресурсы, или мог бы указать мне правильное направление, чтобы я мог реализовать аналогичные функции.
Изменить: я нашел этот вопрос, который кажется полезным ресурсом (хотя и не для моего конкретного вариант использования), поэтому я привел его здесь, чтобы добавить к любым предстоящим ответам.
Некоторые пояснения:
Я пытаюсь создать программу, которая позволит пользователям устанавливать и использовать приложения без прав администратора. Программа будет работать, сохраняя любые изменения файловой системы / реестра в отдельной области хранения (например, файл на флеш-накопителе или в сетевом хранилище), а затем позволяя интегрировать их в любой рабочий стол, на котором запущена хост-программа, на лету. . Переносите свой рабочий стол с помощью USB-ручки, подключите его, и ваши настройки будут применены.
Чтобы перенаправить ввод-вывод, я мог:
- Заплатите процесс 'Импортировать таблицу адресов (IAT), чтобы вставить настраиваемый код на уровне приложения.
- Напишите драйвер фильтра пользовательского режима, чтобы оперативно изменять запросы.
- Для повышения (на самом деле вообще любой) безопасности внедрите драйвер режима ядра для исправления таблиц дескрипторов системных служб (SSDT) аналогично программному обеспечению AV.
У каждого из этих подходов есть свои плюсы и минусы. Например, подход три намного сложнее, чем подход один. Он обеспечивает большую безопасность, но даже в этом случае может быть побежден (теоретические атаки существуют с 96-го, а практические - с 07-го.)
Изначально я рассматривал конкретные функции безопасности (в отличие от простого перенаправления ввода-вывода, аналогичного совместимости с WoW64 настройки); но с тех пор, как я начал смотреть на это, я вспомнил, что вы не можете защитить пользователя от самого себя навсегда, и что независимо от того, сколько работы я должен был вложить в защиту хост-системы от злонамеренного процесса или глупого пользователя, он может быть побежден (или Скорее всего, я совершу ошибку.) Я также решил не изобретать «песочницу» и антивирусные колеса и просто сконцентрировался на создании некоторых полезных функций. Философия «инструмент должен делать одну работу и делать ее хорошо» победила.
В двух словах, все, что я хочу сделать, это реализовать функциональность, аналогичную функции моментальных снимков виртуальных машин, и перенаправить изменения в свою область хранения. Приведенная ниже диаграмма немного устарела, но она могла бы лучше передать мои намерения, чем я сейчас :-)