Установка фильтр-драйвера файловой системы
От: Yaushev  
Дата: 02.11.09 22:07
Оценка:
Господа, прошу отклонить посылки к поиску(уже там был) и критику темы вопроса на первых этапах чтения сообщения.

О себе. Пытаюсь изучить тематику написание фильтров файловой системы с целью реализации определнного функцианала в ОС. Прочитал множество статей по устройству драйверов Windows, книгу Солдатова, блог x64, все ветки, касающиеся тематики, на данном форуме. Располагаю всем необходимым инструментарием, а также написал ряд простейших драйверов(не фильтров). Все работает достаточно благополучно и присутствует ощее понимание предметной области.

Собственно вопрос. Проработав весь материал, который удалось найти по данной тематике, не смог найти для себя ответ на вопрос: "Как установить драйвер, чтобы он стал фильтром в стэке?", а точнее сказать "Как конкретно это сделать (кокие к_о_н_к_р_е_т_н_о строки в какие к_о_н_к_р_е_т_н_о ветки реестра)?". Прошу не пускаться в повествования о теоретически возможны способах установки драйверов (я прекрасно все понимаю и о .inf и о .reg файлах, и о различных функциях), меня интересует на данном этапе установка руками (прописыванием в реестре), т.к. у меня нет даже этого понимания.

Предположим есть драйвер MyFilter.sys, как его установить фильтром NTFS? (Пошаговое руководство ламера).

Всем спасибо за внимание. Буду особенно благодарен за конструктив.
Re: Установка фильтр-драйвера файловой системы
От: gear nuke  
Дата: 02.11.09 23:50
Оценка:
Здравствуйте, Yaushev, Вы писали:


Y>"Как установить драйвер, чтобы он стал фильтром в стэке?", а точнее сказать "Как конкретно это сделать (кокие к_о_н_к_р_е_т_н_о строки в какие к_о_н_к_р_е_т_н_о ветки реестра)?". Прошу не пускаться в повествования о теоретически возможны способах установки драйверов (я прекрасно все понимаю и о .inf и о .reg файлах, и о различных функциях), меня интересует на данном этапе установка руками (прописыванием в реестре), т.к. у меня нет даже этого понимания.


Дык возьми RegMon, или более новый ProcessMonitor и помониторь что за ключи создаются при установке.
.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[2]: Установка фильтр-драйвера файловой системы
От: x64 Россия  
Дата: 03.11.09 02:12
Оценка:
GN>Дык возьми RegMon, или более новый ProcessMonitor и помониторь что за ключи создаются при установке.

Это излишне, достаточно заглянуть в .inf-файлы, прилагаемые к сэмплам фильтров из WDK.
Re: Установка фильтр-драйвера файловой системы
От: x64 Россия  
Дата: 03.11.09 03:42
Оценка:
Y>...блог x64...

Это ты что ль там исходники просил?

Y>Предположим есть драйвер MyFilter.sys, как его установить фильтром NTFS?


Во-первых, почему именно NTFS? С точки зрения фильтра принципиальной разницы нет. В установщике фильтра делаешь так:

1. Открыть базу менеджера служб, функция OpenSCManager().
2. Создать запись типа "kernel driver", функция CreateService().
3. Закрыть базу служб, функция CloseServiceHandle().


Параметры для функции CreateService() следующие:

Имя службы: lpServiceName = L"MyFilter".
Отображаемое имя службы: lpDisplayName = L"My Super-Puper Filter Driver".
Тип службы: dwServiceType = SERVICE_KERNEL_DRIVER.
Для запуска в boot-time: dwStartType = SERVICE_BOOT_START.
Реакция ядра на ошибки запуска фильтра: dwErrorControl = SERVICE_ERROR_NORMAL.
Путь к файлу драйвера: lpwBinaryPathName = L"C:\\Windows\\System32\\Drivers\\MyFilter.sys".

Остальные поля особого значения не имеют в данном случае.


Далее нужно определиться, legacy ты хочешь фильтр или mini. По ряду причин я рекомендую legacy:

1. Сможешь изучишь это дело более подробно.
2. Не нужно будет заморачиваться с Altitude ID.
3. Будет работать на любой системе, независимо от версии или пакета обновления.


Mini-фильтры это не более чем удобная обёртка над legacy-моделью, хотя выбирать тебе, конечно. Итак, в случае legacy-фильтра надобно сделать следующее:

1. Зарегистрировать себя фильтром, функция IoRegisterFsRegistrationChange().
2. В колбеке получишь доступ к CDO файловой системы, создаёшь FiDO и аттачишь в стек, функция IoAttachDeviceToDeviceStackSafe().
3. Ловишь запрос IRP_MJ_FILE_SYSTEM_CONTROL с кодом IRP_MN_MOUNT_VOLUME, обрабатываешь его как показано в исходнике sfilter.
4. С этого момента ты приаттачен ко всем смонтированным томам, не забудь только указать режим запуска SERVICE_BOOT_START в CreateService().
5. Если нужно иметь возможность подключаться к томам без перезагрузки, то нужны дополнительные действия, опять же см. код sfilter'а.


На Windows 2000 с legacy-фильтрами чуть сложнее, но в sfilter'е показано, как быть и в этом случае.

Y>Пошаговое руководство ламера


Пошаговое руководство ламера с примерами и кодом будет у меня в блоге в следующих сообщениях, а сейчас могу только порекомендовать изучить исходный код примеров sfilter и FileSpy (оба есть в WDK for Vista и более ранних WDK, а из WDK for 7 вроде бы убрали их уже), плюс FileMon (с FileMon'ом осторожнее, в паблике слишком старые версии).
Re[2]: Установка фильтр-драйвера файловой системы
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 03.11.09 07:42
Оценка:
Здравствуйте, gear nuke, Вы писали:

Y>>Во-первых, почему именно NTFS? С точки зрения фильтра принципиальной разницы нет. В установщике фильтра делаешь так:

вопрос, прицепляться к тому или нет стоит решать в минифильтре в PFLT_INSTANCE_SETUP_CALLBACK.

А в legacy фильтре можно просто прицепляться всегда, но в случае когда тип тома не устраивает, использовать заглушки, пропуская все запросы дальше как есть.

Или можно пытаться выяснить тип FS (позвать FS recognizers?) до того, как к ней окончательно примонтируемся и затем завершив IRP_MJ_FILE_SYSTEM_CONTROL + IRP_MN_MOUNT_VOLUME с ошибкой. Или можно прицепиться, выяснить тип (не пропуская никакие другие запросы ниже до этой поры) и тут же форсировать отцеп, если что не так — но все это мне кажется излишним, привожу как варианты.

Y>>"Как установить драйвер, чтобы он стал фильтром в стэке?", а точнее сказать "Как конкретно это сделать (кокие к_о_н_к_р_е_т_н_о строки в какие к_о_н_к_р_е_т_н_о ветки реестра)?". Прошу не пускаться в повествования о теоретически возможны способах установки драйверов (я прекрасно все понимаю и о .inf и о .reg файлах, и о различных функциях), меня интересует на данном этапе установка руками (прописыванием в реестре), т.к. у меня нет даже этого понимания.


GN>Дык возьми RegMon, или более новый ProcessMonitor и помониторь что за ключи создаются при установке.

действительно, есть .inf files но и без них не очень хороший совет: устанавливать надо не таким, достаточно бездумным путем — а лучше сразу изучать лучшие практики и делать все документированным способом. Зато совет хорош тем, что показывает как самостоятельно решать постоянно возникающие мелкие проблемы навроде породившей данный топик — тут все средства хороши.

В этом плане подробная инструкция выше гораздо полезнее и правильнее — хотя бы для общего развития.

Впрочем, может быть еще проще, чем связываться с SCM и т.п., сделать правильный .inf и дернуть SetupAPI напрямую или даже просто позвать из .bat (если не хочется давить правую кнопку на .inf и звать Install в explorer)

rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 <path to .inf>
rundll32.exe setupapi,InstallHinfSection DefaultUninstall 132 <path to .inf>

Ссылки по теме:
Installation and Driver Signing
Installing a File System Filter Driver
Installing a Minifilter Driver

Еще можно добавить вариант с установкой через относительно новый DIFx API (DriverPackageType = FileSystemFilter) — как обычно, вариантов масса и это все работа для Setup Engineer, не все даже опытные инженеры, написавшие не один драйвер, имеют время и\или желание заморачиваться подобными "несущественными" вопросами вроде установки (а тем более сноса) — тяп-ляп зарегистрировали худо-бедно напрямую в реестре пару ключей — да и мол ништяк, "и так пойдет"

PS после этого топика у кого-то еще остался вопрос "Что есть "профессиональная установка компонентов режима ядра?"
Автор: x64
Дата: 27.10.09
?
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.
Re[3]: Установка фильтр-драйвера файловой системы
От: gear nuke  
Дата: 03.11.09 08:58
Оценка:
Здравствуйте, x64, Вы писали:

x64>Это излишне, достаточно заглянуть в .inf-файлы, прилагаемые к сэмплам фильтров из WDK.


Необходимо, но недостаточно. В .inf файлах не указаны пути в реестре.
.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[3]: Установка фильтр-драйвера файловой системы
От: gear nuke  
Дата: 03.11.09 08:58
Оценка:
Здравствуйте, Valery A. Boronin, Вы писали:

VAB>Впрочем, может быть еще проще, чем связываться с SCM и т.п., сделать правильный .inf и дернуть SetupAPI напрямую или даже просто позвать из .bat (если не хочется давить правую кнопку на .inf и звать Install в explorer)


Примерно это я и подразумевал под "при установке" (поскольку АТ всё это уже знает)
.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re: Установка фильтр-драйвера файловой системы
От: Yaushev  
Дата: 04.11.09 13:50
Оценка:
Я хочу поблагодарить всех ответевших, все ответы были очень полезны. По-сути, я понял все(по крайней мере, мне так кажется), что мне сейчас нужно, дело за реализацией. Прошу не отнестись очень сурово, если опять появлюсь с какими-нибудь ламерскими вопросами челом бью, как говориться, вельми понеже (премного вами благодпрен )

х64, да это я там про исходники писал.
Re[4]: Установка фильтр-драйвера файловой системы
От: x64 Россия  
Дата: 04.11.09 19:18
Оценка: 1 (1)
x64>>Это излишне, достаточно заглянуть в .inf-файлы, прилагаемые к сэмплам фильтров из WDK.
GN>Необходимо, но недостаточно. В .inf файлах не указаны пути в реестре.

Верно, но на самом деле разработчик драйверов не обязан знать как оно там хранится в реестре, потому что по-хорошему драйвера ставятся совершенно другими способами — Service Manager API, Setup API, .inf-файлы, да и .msi-пакет можно написать, в конце концов, и тогда за нас всё сделает Windows Installer. Но знать, тем не менее, такие подробности не помешает, разумеется. В любом случае мониторить это дело это из пушки в данном случае, всё уже написано для нас готовенькое:

CurrentControlSet\Services Subkey Entries
Creating an INF File for a File System Filter Driver
Creating an INF File for a Minifilter Driver
Summary of INF Sections

Ну и, конечно, не забудем проштудировать соответствующие разделы в WDK:

Installation and Driver Signing
Device and Driver Installation
Re[3]: Установка фильтр-драйвера файловой системы
От: x64 Россия  
Дата: 04.11.09 19:26
Оценка:
VAB>PS после этого топика у кого-то еще остался вопрос "Что есть "профессиональная установка компонентов режима ядра?" ?

Ну, конкретно, здесь речь идёт не о профессиональной установке, а о том, что у автора вообще нет понимания как это делается.
Re[2]: Установка фильтр-драйвера файловой системы
От: x64 Россия  
Дата: 04.11.09 19:31
Оценка: :))
Y>Я хочу поблагодарить всех ответевших...

Благодарности здесь оценочками выражаются. Что за мода вообще пошла? Не забываем, граждане.
Re[4]: Установка фильтр-драйвера файловой системы
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 05.11.09 14:48
Оценка:
Здравствуйте, x64, Вы писали:

VAB>>PS после этого топика у кого-то еще остался вопрос "Что есть "профессиональная установка компонентов режима ядра?" ?

x64>Ну, конкретно, здесь речь идёт не о профессиональной установке, а о том, что у автора вообще нет понимания как это делается.
нет. Автор конкретно в этой части вообще не при делах.

Мы лишь коротко обсудили такую простую проблему как установка драйвера, который даже не является ни PNP, ни каким-то слишком особенным в плане установки, не требует коинсталлеров и т.п., т.е. по сути "простейший" случай.

И даже в таком варианте было показано, сколько есть вариантов "как". При том что есть масса платформ, часто с особенностями. А также немало встречающихся в "дикой природе" вариантов (последствия отслеживания изменений реестра как вариант) того, каким образом могло быть нечто установлено\настроено. Еще, кроме, собственно, установки-сноса есть моменты с апгрейдом о которых не упомянул в пред. сообщении — например, возвращаясь к теме ветки, была версия на фильтре, а в следующем релизе появляется минифильтр. Или вот решили на DIFx переехать. Или Wix подтянуть. И это все уже весьма кардинальное для установки изменения, требующие определенного умения и квалификации, не говоря уже о конкретном опыте, не так ли?

Так вот, поинт здесь, повторю — в том, что в вопросах установки, даже не обязательно в крупных проектах, вполне достаточно вещей и технологий, которыми можно загрузиться по самое нехочу, простор для творчества однозначно имеется. А еще то, что всем этим тоже надо заниматься не менее системно, чем кодом своего любимого детища. Системность же — уже подразумевает определенный профессионализм.

Отсюда и приходим к, надеюсь, однозначному пониманию почему в достаточно крупных проектах никто уже не удивляется тому, что вводят позицию какого инженера со специализацией Installation Discipline в штатное расписание. А те кто поопытнее, так даже сами об этом сразу напоминают и просят.

PS Мне напоминать об этом будет не надо — такая вакансия у нас тоже уже запланирована. Но всему свое время.
PPS Кстати, тем кто имеет желание, умение и считает, что сможет работать на высочайшем уровне, в т.ч. системно и профессионально — искренне советую откликнуться на вывешенные (а также появляющиеся) вакансии - мы ищем таланты. Места, правда, ограничены.
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.
setup engineer
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.