Фильтры файловой системы windows
Заранее прошу сильно не пинать за ламерские вопросы, в поиске был, пока тема для меня новая, потому уповаю на ваши пинки.
Задача стоит простая: ознакомиться на личном примере с написанием простейшего фильтра файловой системы. Фильтр, собственно, должен делать только одно: если запрошенный объект файловой системы (файл, папка) удовлетворяет каким-то критериям, то запретить к нему доступ. Вопросы буквально следующие:
1. Я правильно понимаю, что надо ставить обработчик на IRP_MJ_CREATE, и возвращать
если мы хотим запретить доступ к объекту?
2. Посмотрел исходник sfilter из IFS SDK — там черт ногу сломит. Сильно подозреваю, что существует некая базовая совсем минимальная функциональность, которую мне надо реализовать. Пните в нужном направлении, плз.
3. Как правильно осуществлять обмен данными между фильтром и программой user-mode? Задача в общем-то типовая: программа хранит список правил фильтрации и при добавлении/удалении/изменении правила должна как-то сообщить об этом драйверу. Сильно подозреваю, что дергать прогу из драйвера на каждый IRP_MJ_CREATE — это ну совсем атас.
4. Я правильно понимаю, что функциональность minifilter поддерживается начиная с WinXP SP2? И если да, то стало быть единственный путь, позволяющий фильтровать файловую систему на WinXP ниже SP2 — это полноценный file system filter driver?
5. И последний: подозреваю, что времени на грамотное вхождение в тему уйдет просто масса, потому как бы два подвопроса: а) что посоветуете почитать _онлайн_ и, б) сколько будет стоить разработка драйвер-фильтра с подобной функциональностью (надо лишь запрещать достп к объектам файловой системы, если матчится правило, например, запретить доступ к «C:\Windows», и чтобы этой папки вообще не было видно в файловой системе, как если бы ее не было)?
Извиняюсь за обилие вопросов, но плодить кучу маленьких ламерских топиков имхо еще хуже Буду благодарен за ваши ответы.
| От: | Unmanaged | ICQ 476611995 |
Дата: | 13.12.07 20:56 | ||
Оценка: | 27 (1) |
F>Задача стоит простая: ознакомиться на личном примере с написанием простейшего фильтра файловой системы. Фильтр, собственно, должен делать только одно: если запрошенный объект файловой системы (файл, папка) удовлетворяет каким-то критериям, то запретить к нему доступ.
Начни с sfilter из WDK.
F>1. Я правильно понимаю, что надо ставить обработчик на IRP_MJ_CREATE, и возвращать STATUS_INVALID_DEVICE_REQUEST если мы хотим запретить доступ к объекту?
STATUS_ACCESS_DENIED
F>2. Посмотрел исходник sfilter из IFS SDK — там черт ногу сломит. Сильно подозреваю, что существует некая базовая совсем минимальная функциональность, которую мне надо реализовать. Пните в нужном направлении, плз.
sfilter уже очень сильно урезан, очень сильно.
Хочешь испугаться, посмотри исходник фильтра filespy.
Хочешь инфаркт, посмотри исходник ntfs — он там рядом лежит.
F>3. Как правильно осуществлять обмен данными между фильтром и программой user-mode? Задача в общем-то типовая: программа хранит список правил фильтрации и при добавлении/удалении/изменении правила должна как-то сообщить об этом драйверу. Сильно подозреваю, что дергать прогу из драйвера на каждый IRP_MJ_CREATE — это ну совсем атас.
Если надо быстро и просто, тогда как-то так:
1. Делаешь некую базу данных конфигурации, например, тупо какой-нибудь файло — C:\fsconfig.dat.
2. Далее реализуешь как минимум два IOCTL-запроса:
2.1. Запрос для уведомления драйвера о том, что конфигурация изменилась. В ответ на этот запрос драйвер уничтожает текущую конфигурацию в памяти, и перечитывает конфиг из БД (в нашем случае — файло), создавая при этом конфиг в памяти.
2.2. Запрос для вкл/выкл фильтрации. По получении данного запроса, драйвер тупо устанавливает глобальный флажок, что-то типа:
Это если быстро и просто.
Если долго и сложно — ну сам понимаешь, это долго и сложно .
F>4. Я правильно понимаю, что функциональность minifilter поддерживается начиная с WinXP SP2?
Да.
F>И если да, то стало быть единственный путь, позволяющий фильтровать файловую систему на WinXP ниже SP2 — это полноценный file system filter driver?
Да.
Такие фильтры ещё называются legacy.
F>5. И последний: подозреваю, что времени на грамотное вхождение в тему уйдет просто масса
Это да.
Вот помню я начинал. эх, одна мысль только в голове:
жопа полная!
какая же это жопа, господи.
F>что посоветуете почитать _онлайн_
Список ресурсов, которые помогли мне в своё время:
Больше ничего не нужно, правда.
F>сколько будет стоить разработка драйвер-фильтра с подобной функциональностью (надо лишь запрещать достп к объектам файловой системы, если матчится правило, например, запретить доступ к «C:\Windows», и чтобы этой папки вообще не было видно в файловой системе, как если бы ее не было)?
Стукни в асько, пообщаемся.
F>Буду благодарен за ваши ответы.
$100 баксов за консультацию .
| От: | Ivan | www.rsdn.ru |
Дата: | 13.12.07 21:09 | ||
Оценка: | 27 (1) |
Здравствуйте, Flamer, Вы писали:
F>1. Я правильно понимаю, что надо ставить обработчик на IRP_MJ_CREATE, и возвращать
F>
лучше STATUS_ACCESS_DENIED
F>2. Посмотрел исходник sfilter из IFS SDK — там черт ногу сломит. Сильно подозреваю, что существует некая базовая совсем минимальная функциональность, которую мне надо реализовать. Пните в нужном направлении, плз.
к сожалению, для обычного (legacy) фильтра файловой системы большая часть этого кода необходима
F>3. Как правильно осуществлять обмен данными между фильтром и программой user-mode? Задача в общем-то типовая: программа хранит список правил фильтрации и при добавлении/удалении/изменении правила должна как-то сообщить об этом драйверу. Сильно подозреваю, что дергать прогу из драйвера на каждый IRP_MJ_CREATE — это ну совсем атас.
для минифильтрах есть двухсторонний канал обмена информацией. для legacy фильтров только UM -> KM
F>4. Я правильно понимаю, что функциональность minifilter поддерживается начиная с WinXP SP2? И если да, то стало быть единственный путь, позволяющий фильтровать файловую систему на WinXP ниже SP2 — это полноценный file system filter driver?
минифильтры имеют ряд очень важных преимуществ по сравнению с legacy фильтрами, поэтому если это возможно лучше поднять системные требования до SP2, чем связываться с legacy фильтром. вкратце у минифильтров преимущемства следующеие:
— возможность загрузки/выгрузки без рестарта системы (для legacy фильтров это невозможно)
— меньше различий в коде для поддержки разных ОС — 2K, XP,Vista и т.п.
— существенно более простая логика драйвера
— поддержка контекстов на уровне волюма, файла, хэндла
— двухсторонний канал обмена с UM, особенно ценна возможность вызовов KM -> UM
— некоторые необходимые функции ядра появились только с выходом filtermanager, поэтому некооторые вещи принципиально не могут быть безопасно реализованы на системах ниже требований filtermanager.
| От: | Flamer | http://users.livejournal.com/_flamer_/ |
Дата: | 13.12.07 21:26 | ||
Оценка: |
Здравствуйте, Ivan, Вы писали:
[]
I>минифильтры имеют ряд очень важных преимуществ по сравнению с legacy фильтрами, поэтому если это возможно лучше поднять системные требования до SP2, чем связываться с legacy фильтром. вкратце у минифильтров преимущемства следующеие:
I>- возможность загрузки/выгрузки без рестарта системы (для legacy фильтров это невозможно)
I>- меньше различий в коде для поддержки разных ОС — 2K, XP,Vista и т.п.
I>- существенно более простая логика драйвера
I>- поддержка контекстов на уровне волюма, файла, хэндла
I>- двухсторонний канал обмена с UM, особенно ценна возможность вызовов KM -> UM
I>- некоторые необходимые функции ядра появились только с выходом filtermanager, поэтому некооторые вещи принципиально не могут быть безопасно реализованы на системах ниже требований filtermanager.
Спасибо, действительно, стоит задуматься. Вот только где бы взять пример minifilter для ознакомления — у меня чего-то в IFS DDK ничего похожего не нашлось. Ы?
| От: | Unmanaged | ICQ 476611995 |
Дата: | 13.12.07 21:35 | ||
Оценка: |
F>Вот только где бы взять пример minifilter для ознакомления — у меня чего-то в IFS DDK ничего похожего не нашлось. Ы?
Папки \src\filesys\miniFilter\*.
Например, minispy.
| От: | Valery A. Boronin | linkedin.com/in/boronin |
Дата: | 13.12.07 21:48 | ||
Оценка: | 27 (1) |
Здравствуйте, Flamer, Вы писали:
F>1. Я правильно понимаю, что надо ставить обработчик на IRP_MJ_CREATE, и возвращать
F>
F>если мы хотим запретить доступ к объекту?
STATUS_ACCESS_DENIED однозначно.
F>2. Посмотрел исходник sfilter из IFS SDK — там черт ногу сломит. Сильно подозреваю, что существует некая базовая совсем минимальная функциональность, которую мне надо реализовать. Пните в нужном направлении, плз.
взять WDK с MSFT Connect поновее, сейчас базовым является WDK 6001 но есть и релизы для 2008й
F>3. Как правильно осуществлять обмен данными между фильтром и программой user-mode? Задача в общем-то типовая: программа хранит список правил фильтрации и при добавлении/удалении/изменении правила должна как-то сообщить об этом драйверу. Сильно подозреваю, что дергать прогу из драйвера на каждый IRP_MJ_CREATE — это ну совсем атас.
уже коллеги ответили
F>4. Я правильно понимаю, что функциональность minifilter поддерживается начиная с WinXP SP2? И если да, то стало быть единственный путь, позволяющий фильтровать файловую систему на WinXP ниже SP2 — это полноценный file system filter driver?
уточню по доступности минифильров — начиная с 2000 SP4 + rollup 1, существуют варианты доставить минифильтры с помощью redistributable компонент но за ними надо в MSFT support идти и запрашивать. Сам этим не занимался.
Иван уже все прекрасно расписал почему минифильтры — это выгодно и правильно, если нет серьезных противопоказаний. Не буду повторяться.
F>5. И последний: подозреваю, что времени на грамотное вхождение в тему уйдет просто масса, потому как бы два подвопроса: а) что посоветуете почитать _онлайн_ и, б) сколько будет стоить разработка драйвер-фильтра с подобной функциональностью (надо лишь запрещать достп к объектам файловой системы, если матчится правило, например, запретить доступ к «C:\Windows», и чтобы этой папки вообще не было видно в файловой системе, как если бы ее не было)?
Дмитрий, свяжитесь со мной по этому вопросу в частном порядке?
| От: | Flamer | http://users.livejournal.com/_flamer_/ |
Дата: | 13.12.07 22:04 | ||
Оценка: |
Здравствуйте, Unmanaged, Вы писали:
U>Папки \src\filesys\miniFilter\*.
U>Например, minispy.
Блин, нету такого у меня Есть только src\filesys\cdfs, src\filesys\filter сотоварищи. Да, вечер перестает быть томным
Версия DDK 3790 — в этой папке стоит все добро.
| От: | Flamer | http://users.livejournal.com/_flamer_/ |
Дата: | 13.12.07 22:04 | ||
Оценка: |
Здравствуйте, Valery A. Boronin, Вы писали:
[]
VAB>Дмитрий, свяжитесь со мной по этому вопросу в частном порядке?
Отписал на мыло в профайле. Заранее благодарен за ответ.
| От: | Ivan | www.rsdn.ru |
Дата: | 13.12.07 22:08 | ||
Оценка: | 18 (1) |
Здравствуйте, Flamer, Вы писали:
F>Спасибо, действительно, стоит задуматься. Вот только где бы взять пример minifilter для ознакомления — у меня чего-то в IFS DDK ничего похожего не нашлось. Ы?
кстати, на channel9 есть интервью с Neal Christiansen о filter manager и минифильтрах — там рассказывается о том, зачем и почему создавался filter manager.
| От: | Maxim S. Shatskih |
Дата: | 13.12.07 22:10 | |
Оценка: |
Лучше STATUS_ACCESS_DENIED.
F>2. Посмотрел исходник sfilter из IFS SDK — там черт ногу сломит. Сильно подозреваю, что существует некая базовая совсем минимальная функциональность, которую мне надо реализовать. Пните в нужном направлении, плз.
Тогда нужен FltMgrшный минифильтр.
F>3. Как правильно осуществлять обмен данными между фильтром и программой user-mode? Задача в общем-то типовая: программа хранит список правил фильтрации и при добавлении/удалении/изменении правила должна как-то сообщить об этом драйверу. Сильно подозреваю, что дергать прогу из драйвера на каждый IRP_MJ_CREATE — это ну совсем атас.
Почему атас? вот на paging IO так дергать нельзя, дедлокнется все, а на CREATE — пожалуйста. Хотя первоначальную обработку лучше таки в драйвере делать.
F>4. Я правильно понимаю, что функциональность minifilter поддерживается начиная с WinXP SP2? И если да, то стало быть единственный путь, позволяющий фильтровать файловую систему на WinXP ниже SP2 — это полноценный file system filter driver?
Кажется, FltMgr перенесен назад до w2k SP4.
На XP ниже SP2 я бы просто забил. Ничего нет страшного в том, чтобы потребовать SP2.
| От: | Flamer | http://users.livejournal.com/_flamer_/ |
Дата: | 13.12.07 22:21 | ||
Оценка: |
Здравствуйте, Maxim S. Shatskih, Вы писали:
MSS>Тогда нужен FltMgrшный минифильтр.
С этого момента можно поподробнее? Что такое FltMgr? Поиск в гугле выдает чего-то невнятное.
| От: | Злость |
Дата: | 14.12.07 06:59 | |
Оценка: |
Здравствуйте, Flamer, Вы писали:
Добавлю к тому что сказали — посмотри WINDDK\3790.1414 или старше\src\filesys\minifilter\scanner\ — этот минифильтр. Он бли всего подойдет для того что вы хочите реализовать (кое что выкинете, чуть чуть добавите и все.)
А это окно. и никаких личный бесед — пишите все сюда
| От: | Maxim S. Shatskih |
Дата: | 14.12.07 17:38 | |
Оценка: | 8 (1) |
F>С этого момента можно поподробнее? Что такое FltMgr? Поиск в гугле выдает чего-то невнятное.
Фреймворк для фильтров файловых систем, который прячет от вас все кишки sfilterа.
| От: | Аноним |
Дата: | 18.12.07 12:40 | |
Оценка: |
Здравствуйте, Unmanaged, Вы писали:
U>sfilter уже очень сильно урезан, очень сильно.
U>Хочешь испугаться, посмотри исходник фильтра filespy.
U>Хочешь инфаркт, посмотри исходник ntfs — он там рядом лежит.