Я работаю над драйвером минифильтра, который «монтируется» в указанном каталоге в существующем дереве, например, 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
, блокнот возвращает ошибку, что файл не может бытьнайдено.