Фильтры файловой системы windows

Фильтры файловой системы 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. Запрос для вкл/выкл фильтрации. По получении данного запроса, драйвер тупо устанавливает глобальный флажок, что-то типа:

Читайте также:  Vmware mac windows server

Это если быстро и просто.
Если долго и сложно — ну сам понимаешь, это долго и сложно .

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.

Читайте также:  Generals windows 10 x64
От: 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», и чтобы этой папки вообще не было видно в файловой системе, как если бы ее не было)?
Дмитрий, свяжитесь со мной по этому вопросу в частном порядке?

Читайте также:  Обновление 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 — он там рядом лежит.

Оцените статью