Я использую Pismo File Mount в течение многих лет, и я всегда задавался вопросом, как это на самом деле работает.
Допустим, в настоящее время я работаю над приложением, которое создает формат пакета, похожий на ZIP формат. Для удобства доступа я хочу создать расширение оболочки это работает подобно тому, как работает Pismo File Mount. Для тех, кто не использовал Pismo File Mount, вот как это работает:
Там есть подвох. я делаю не хочу использовать Pismo File Mount API, возможно по разным причинам, таким как коммерческие или юридические.
Вопрос в том, Как Pismo File Mount интегрируется в Windows Explorer программно, с точки зрения Windows API и C ++?
Существуют два пути:
Расширение пространства имен оболочки. Папка, созданная расширением пространства имен оболочки, не является реальной папкой файловой системы, и доступ к файлам в такой папке обычно ограничен самим проводником и приложениями, осведомленными о расширениях оболочки и способах работы с ними.
Драйвер фильтра файловой системы, который создает виртуальный каталог на существующем диске. Такой каталог рассматривается всеми приложениями как реальный каталог, в котором эти приложения могут читать и записывать файлы и подкаталоги. Все операции с файловой системой проходят через такой драйвер.
Pismo File Mount работает через драйвер фильтра AFAIK.
Наш продукт CallbackFilter позволяет создавать виртуальные каталоги и файлы. Он включает в себя драйвер и вызывает ваш код режима пользователя для реальных операций. Но подход фильтра немного сложен — виртуальный диск, созданный с помощью драйвера файловой системы (например, с помощью нашего продукта Callback File System), проще в реализации и управлении из-за различий в архитектуре стека драйверов фильтра и драйверов файловой системы.
Похоже, довольно обычное расширение оболочки. Explorer имеет мощный механизм расширения, который позволяет ему перечислять нефайловые объекты, такие как принтеры, и содержимое zip-файла. Конкретные детали (столбцы и строки) предоставляются DLL.
Вы можете наблюдать это, архивируя набор изображений; обычный вид миниатюр, вероятно, не будет работать, так как эта часть Explorer обычно не копируется.
Я написал Pismo File Mount и программу для чтения ZIP, включенную в пакет аудита PFM.
На этот вопрос нет однозначного или реалистичного ответа. Чтобы сделать то, что PFM делает в C / C ++ с Windows API (ядром и пользователем), потребуется 10 тысяч строк сложного кода и большие временные затраты.
PFM построен как драйвер файловой системы (модуль ядра) с поддержкой пользовательских режимов DLL и исполняемых файлов. Драйвер использует протокол для связи с кодом форматирования пользовательского режима, который (например) декодирует формат файла ZIP и передает содержимое через драйвер режима ядра клиентским приложениям.