Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Кэш для драйвера


Автор: Goganchic 14.10.2008, 17:00
Всем привет!
Сейчас занимаюсь разработкой фильтрующего драйвера, для него необходимо сделать кэш на диске (кэшем будет заниматься не сам драйвер, а программа пользовательского режима). Необходимо сделать так, чтобы этот кэш был недоступен для всех userspace процессов (кроме соответственно части моего проекта, которая работает в userspace), а также невидим для них.
Первую часть реализовать достаточно легко: так как мы перехватываем все IRP запросы на логический диск, то мы можем просто ответить отказом на некоторые из них (которые идут к кэшу), а вот как сделать папку с кэшем невидимой? Как это реализовать через фильтрующий драйвер?
Может быть кто-то сталкивался с подобным?

Заранее спасибо за ответы

Автор: ama_kid 15.10.2008, 22:33
Цитата(Goganchic @  14.10.2008,  18:00 Найти цитируемый пост)
как сделать папку с кэшем невидимой? Как это реализовать через фильтрующий драйвер?
В своей http://forum.vingrad.ru/index.php?show_type=articles&showtopic=225315&st=0&anchor=entry1619141 я показывал пример именно этого (см. п.4.2). Несмотря на то, что примеры там рассматриваются на Delphi - в приаттаченном архиве есть и С++-вариант перехвата ZwQueryDirectoryFile, применяемого для обеспечения невидимости файла\папки... Глянь, может это натолкнет тебя на решение проблемы... 

Автор: Goganchic 17.10.2008, 15:28
Огромное спасибо за статью, но модификация системной таблицы служебных дескрипторов - действительно грязный метод. Я делаю все намного проще: так как у меня драйвер фильтрующий - то я вполне законно вытираю из буффера, который позже передается в функцию ZwQueryDirectoryFile все то, что пользователю не нужно видеть в листинге директорий.
P.s. может даже напишу статью о том как и что я делаю smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)