Заранее прошу сильно не пинать за ламерские вопросы, в поиске был, пока тема для меня новая, потому уповаю на ваши пинки.
Задача стоит простая: ознакомиться на личном примере с написанием простейшего фильтра файловой системы. Фильтр, собственно, должен делать только одно: если запрошенный объект файловой системы (файл, папка) удовлетворяет каким-то критериям, то запретить к нему доступ. Вопросы буквально следующие:
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", и чтобы этой папки вообще не было видно в файловой системе, как если бы ее не было)?
Извиняюсь за обилие вопросов, но плодить кучу маленьких ламерских топиков имхо еще хуже Буду благодарен за ваши ответы.
<< Рабство не отменено — оно сменилось 8-часовым рабочим днем. >>
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>Буду благодарен за ваши ответы.
лучше 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.
[]
I>минифильтры имеют ряд очень важных преимуществ по сравнению с legacy фильтрами, поэтому если это возможно лучше поднять системные требования до SP2, чем связываться с legacy фильтром. вкратце у минифильтров преимущемства следующеие: I>- возможность загрузки/выгрузки без рестарта системы (для legacy фильтров это невозможно) I>- меньше различий в коде для поддержки разных ОС — 2K, XP,Vista и т.п. I>- существенно более простая логика драйвера I>- поддержка контекстов на уровне волюма, файла, хэндла I>- двухсторонний канал обмена с UM, особенно ценна возможность вызовов KM -> UM I>- некоторые необходимые функции ядра появились только с выходом filtermanager, поэтому некооторые вещи принципиально не могут быть безопасно реализованы на системах ниже требований filtermanager.
Спасибо, действительно, стоит задуматься. Вот только где бы взять пример minifilter для ознакомления — у меня чего-то в IFS DDK ничего похожего не нашлось. Ы?
<< Не присоединяйся к нашему миру наркоманов: нас много, а наркоты мало. >>
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", и чтобы этой папки вообще не было видно в файловой системе, как если бы ее не было)?
Дмитрий, свяжитесь со мной по этому вопросу в частном порядке?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Блин, нету такого у меня Есть только src\filesys\cdfs, src\filesys\filter сотоварищи. Да, вечер перестает быть томным Версия DDK 3790 — в этой папке стоит все добро.
<< Важно не знать, а иметь под рукой номер телефона того, кто знает. >>
Здравствуйте, Flamer, Вы писали:
F>Спасибо, действительно, стоит задуматься. Вот только где бы взять пример minifilter для ознакомления — у меня чего-то в IFS DDK ничего похожего не нашлось. Ы?
кстати, на channel9 есть интервью с Neal Christiansen о filter manager и минифильтрах — там рассказывается о том, зачем и почему создавался filter manager.
Лучше 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.
Добавлю к тому что сказали — посмотри WINDDK\3790.1414 или старше\src\filesys\minifilter\scanner\ — этот минифильтр. Он бли всего подойдет для того что вы хочите реализовать (кое что выкинете, чуть чуть добавите и все.)
А это окно. и никаких личный бесед — пишите все сюда
... << RSDN@Home 1.2.0 alpha rev. 685>>
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
F>С этого момента можно поподробнее? Что такое FltMgr? Поиск в гугле выдает чего-то невнятное...
Фреймворк для фильтров файловых систем, который прячет от вас все кишки sfilterа.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[2]: Драйвер-фильтр файловой системы
От:
Аноним
Дата:
18.12.07 12:40
Оценка:
Здравствуйте, Unmanaged, Вы писали:
U>sfilter уже очень сильно урезан, очень сильно. U>Хочешь испугаться, посмотри исходник фильтра filespy. U>Хочешь инфаркт, посмотри исходник ntfs — он там рядом лежит.