Может ли минифильтр заменить часть файловой системы? - PullRequest
0 голосов
/ 07 июня 2018

Я работаю над драйвером минифильтра, который «монтируется» в указанном каталоге в существующем дереве, например, c:\users\user\mymountpoint, и заменяет все, начиная с этой точки, содержимым любого «устройства», смонтированного во многом таким же образомспособ монтирования под Linux работает.Существующие базовые файлы / файловая система по существу заблокированы / недоступны, пока минифильтр активен.

Все это прекрасно работает, пока я не попытаюсь запустить исполняемый файл или открыть, скажем, текстовый файл (используя блокнот).В случае с исполняемым файлом Windows выдает всплывающее окно с сообщением «Это приложение не может работать на вашем компьютере», даже не пытаясь читать из файла (хотя оно пытается прочитать из file.exe:Zone.Identifier, которого нет).Если я пытаюсь выполнить из Git Bash, он читает файл, но говорит, что он не может быть выполнен из-за «ошибки формата Exec».

В случае текстового файла я получаю «%1 не является допустимым приложением Win32 ", также с попыткой открыть метаданные Zone.Identifier.Однако я могу type file.txt в приглашении DOS, и содержимое отображается нормально.

В обоих случаях, используя приглашение Git Bash, я могу md5sum файлы, и содержимое соответствует одному и тому же файлу на дискесам по себе.

Что мне нужно сделать, чтобы уведомить Windows, что эта часть файловой системы не NTFS?Есть ли какой-либо атрибут в каталоге или файле, который я не возвращаю, чтобы указать что-то о файле (ах)?

ETA: Согласно предложению @ MJZ, я использовал Process Monitor для мониторинга активности при запуске notepad.exe c:\path\to\mymountpoint\file.txt.

Блокнот выполняет следующие действия: - открывает каталог, содержащий
- выводит список файлов для рассматриваемого файла
- закрывает каталог
- открывает файл
- запрашиваетинформация о томе
- Запрашивает «AllInformation» из файла
(Блокнот не предоставляет достаточно места для имени файла в этом запросе. Драйвер заполняет доступное пространство и возвращает STATUS_BUFFER_OVERFLOW и требуемый размер
- Закрывает файл

Именно в этот момент я получаю описанную выше ошибку «% 1». Если я изменяю возвращаемое значение запроса AllInformation на STATUS_BUFFER_TOO_SMALL, блокнот возвращает ошибку, что файл не может бытьнайдено.

1 Ответ

0 голосов
/ 20 июня 2018

Следуя советам @ MJZ, я запустил ProcessMonitor против блокнота, открывая файл как внутри моей файловой системы, так и снаружи.Разница была в том, что в рабочем случае выдается IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION.Никакой такой IRP не выдавался моему водителю.Оказывается, я не устанавливал / не инициализировал SectionObjectPointer объекта файла, когда файл был открыт / создан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...