Реализация виртуального файла путем переопределения Win32 File API
Есть ли способ переопределить Win32 File API, такой как CreateFile()? Я хочу, чтобы мое приложение видело виртуальный файл исключительно для моего приложения, однако на самом деле виртуальный файл не существует.
2 ответа
Существует два подхода - с драйвером режима ядра (задокументированный) и без такого драйвера (хакерский способ).
С драйвером режима ядра у вас есть два пути - (1) создать драйвер виртуальной файловой системы (или взять существующий) и (2) создать драйвер фильтра файловой системы (или взять существующий). Разработка драйвера = год или около того работы, чтобы сделать правильно и полностью. Разработка драйверов полностью документирована в MSDN.
Без драйвера режима ядра вам нужно использовать перехват API. Такие библиотеки, как Detours, MadCodeHook и Boxedapp SDK, делают это (и позволяют вам делать это также).
Перехват темы API довольно велик, чтобы полностью описать ее здесь, но есть хорошая статья CodeProject на эту тему.
Общесистемный? Плохая идея. Если это просто ваше приложение, не используйте стандартные API и реализуйте его самостоятельно. Но если данные должны сохраняться между сеансами, вам придется где-то хранить данные (файл, реестр и т. Д.).