Доброго времени суток, господа. Возник следующий вопрос.
Написал простейший в моем понимании драйвер-фильтр для файловой системы, снабдил его способностью пропускать все IRP запросы вниз по стэку, а также все FastIO запросы (реализацию содрал из sfilter). Все, больше никакого функционала. В стэк подключается с помощью функции IoAttachDeviceToDeviceStackSafe(), при калбаке функции IoRegisterFsRegistrationChange(). Скажу более того, фильтр даже устанавливается и практически нормально работает(не сосвсем, конечно, но вопрос мой сейчас в другом), но только до перезагрузки компьютера, при перезагрузке винда не грузится 8(. В чем накосячил, что должно быть у фильтра-драйвера ФС чтобы он позволил винде загрузиться, или же проблема в реализации того что что я "как бы уже реализовал"? Драйвер устанавливаю с параметром SERVICE_BOOT_START.
Код большеват получился, но могу выложить, конечно, если без этого не обойдется.
Спасибо.
Re: Фильтр драйвер фаловой системы роняет загрузку ОС
1. Чем обусловлен выбор sfilter?
2. Раз уж столкнулись с фильтрами ФС, осваивайте отладку boot-time драйверов с использованием отладочной версии ntldr.
Re[2]: Фильтр драйвер фаловой системы роняет загрузку ОС
Здравствуйте, airmaxx, Вы писали:
A>1. Чем обусловлен выбор sfilter? A>2. Раз уж столкнулись с фильтрами ФС, осваивайте отладку boot-time драйверов с использованием отладочной версии ntldr.
1. airmaxx, ну какая к е№еням разница
2. можно подробнее об этом, что это такое отладочная версия ntldr, и как осваивать отладку boot-time драйверов? Только по существу вопроса, пожалуйста, и со ссылками, очень очень очень прошу.
Re[2]: Фильтр драйвер фаловой системы роняет загрузку ОС
Здравствуйте, x64, Вы писали:
Y>>при перезагрузке винда не грузится
x64>Что значит сия фраза?
кхм, прошу пардона, не загружается она, не дойдя до этапа аутентификации пользователя
вот дамп
Microsoft (R) Windows Debugger Version 6.11.0001.404 X86
Copyright (c) Microsoft Corporation. All rights reserved.
Loading Dump File [C:\WINDOWS\Minidump\Mini111809-02.dmp]
Mini Kernel Dump File: Only registers and stack trace are available
Symbol search path is: *** Invalid ***
****************************************************************************
* Symbol loading may be unreliable without a symbol search path. *
* Use .symfix to have the debugger choose a symbol path. *
* After setting your symbol path, use .reload to refresh symbol locations. *
****************************************************************************
Executable search path is:
*********************************************************************
* Symbols can not be loaded because symbol path is not initialized. *
* *
* The Symbol Path can be set by: *
* using the _NT_SYMBOL_PATH environment variable. *
* using the -y <symbol_path> argument when starting the debugger. *
* using .sympath and .sympath+ *
*********************************************************************
Unable to load image ntoskrnl.exe, Win32 error 0n2
*** WARNING: Unable to verify timestamp for ntoskrnl.exe
*** ERROR: Module load completed but symbols could not be loaded for ntoskrnl.exe
Windows XP Kernel Version 2600 (Service Pack 3) MP (2 procs) Free x86 compatible
Product: WinNt, suite: TerminalServer SingleUserTS
Machine Name:
Kernel base = 0x804d7000 PsLoadedModuleList = 0x805634c0
Debug session time: Wed Nov 18 14:20:16.296 2009 (GMT+3)
System Uptime: 0 days 0:03:15.015
*********************************************************************
* Symbols can not be loaded because symbol path is not initialized. *
* *
* The Symbol Path can be set by: *
* using the _NT_SYMBOL_PATH environment variable. *
* using the -y <symbol_path> argument when starting the debugger. *
* using .sympath and .sympath+ *
*********************************************************************
Unable to load image ntoskrnl.exe, Win32 error 0n2
*** WARNING: Unable to verify timestamp for ntoskrnl.exe
*** ERROR: Module load completed but symbols could not be loaded for ntoskrnl.exe
Loading Kernel Symbols
...............................................................
................................................
Loading User Symbols
Loading unloaded module list
....
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
Use !analyze -v to get detailed debugging information.
***** Kernel symbols are WRONG. Please fix symbols to do analysis.
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: nt!_KPRCB ***
*** ***
*************************************************************************
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: nt!KPRCB ***
*** ***
*************************************************************************
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: nt!_KPRCB ***
*** ***
*************************************************************************
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: nt!KPRCB ***
*** ***
*************************************************************************
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: nt!_KPRCB ***
*** ***
*************************************************************************
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: nt!_KPRCB ***
*** ***
*************************************************************************
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: nt!_KPRCB ***
*** ***
*************************************************************************
*********************************************************************
* Symbols can not be loaded because symbol path is not initialized. *
* *
* The Symbol Path can be set by: *
* using the _NT_SYMBOL_PATH environment variable. *
* using the -y <symbol_path> argument when starting the debugger. *
* using .sympath and .sympath+ *
*********************************************************************
*********************************************************************
* Symbols can not be loaded because symbol path is not initialized. *
* *
* The Symbol Path can be set by: *
* using the _NT_SYMBOL_PATH environment variable. *
* using the -y <symbol_path> argument when starting the debugger. *
* using .sympath and .sympath+ *
*********************************************************************
Probably caused by : ntoskrnl.exe ( nt+a3c0 )
Followup: MachineOwner
---------
Re[2]: Фильтр драйвер фаловой системы роняет загрузку ОС
Так, ну хорошо, попробую упростить вопрос.
Должен ли фильтр-драйвер ФС уметь что-то делать, кроме как пропускать все запросы вниз по стэку, для того чтобы не препятствовать загрузке Винды? (Может там особо обрабатывать пакеты какие-то конкретно)
Ответ ДА или НЕТ.
Спасибо.
Re[3]: Фильтр драйвер фаловой системы роняет загрузку ОС
Здравствуйте, x64, Вы писали:
A>>...с использованием отладочной версии ntldr.
x64>А это зачем?
Автор не указал на каком именно этапе загрузки проблема.
Предполагаю что отладчиком он пользоваться либо не умеет либо до отладчика дело не доходит.
Если не доходит дело до отладчика — тогда, мой совет ему поможет начать разбираться.
Re[3]: Фильтр драйвер фаловой системы роняет загрузку ОС
Здравствуйте, Yaushev, Вы писали:
Y>1. airmaxx, ну какая к е№еням разница
Есть разница, иначе не спрашивал бы!
Y>2. можно подробнее об этом, что это такое отладочная версия ntldr, и как осваивать отладку boot-time драйверов? Только по существу вопроса, пожалуйста, и со ссылками, очень очень очень прошу.
В гугл "ntldr_dbg"
Re[4]: Фильтр драйвер фаловой системы роняет загрузку ОС
A>Автор не указал на каком именно этапе загрузки проблема. A>Предполагаю что отладчиком он пользоваться либо не умеет либо до отладчика дело не доходит. A>Если не доходит дело до отладчика — тогда, мой совет ему поможет начать разбираться.
Не, я вот чего не понял. До своего запуска файловый фильтр мешать загрузке системы никак не может. А сам запуск без проблем можно поймать отладчиком, ибо один хрен запускает драйвера ядро, а не загрузчик. Так и зачем тут отладочная версия загрузчика?
Re[2]: Фильтр драйвер фаловой системы роняет загрузку ОС
Здравствуйте, Yaushev, Вы писали:
Y>Доброго времени суток, господа. Возник следующий вопрос. Y>Написал простейший в моем понимании драйвер-фильтр для файловой системы, снабдил его способностью пропускать все IRP запросы вниз по стэку, а также все FastIO запросы (реализацию содрал из sfilter). Все, больше никакого функционала. В стэк подключается с помощью функции IoAttachDeviceToDeviceStackSafe(), при калбаке функции IoRegisterFsRegistrationChange(). Скажу более того, фильтр даже устанавливается и практически нормально работает(не сосвсем, конечно, но вопрос мой сейчас в другом), но только до перезагрузки компьютера, при перезагрузке винда не грузится 8(. В чем накосячил, что должно быть у фильтра-драйвера ФС чтобы он позволил винде загрузиться, или же проблема в реализации того что что я "как бы уже реализовал"? Драйвер устанавливаю с параметром SERVICE_BOOT_START.
Y>Код большеват получился, но могу выложить, конечно, если без этого не обойдется.
Y>Спасибо.
Насколько я помню в sfilter, подключение происходит после монтирования. И как следствие он у вас как бы и не работает совсем. А вот когда начинается загрузка, монтирование томов инициализация файловой системы и вот тут начинает работать ВАШ код.
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Re[4]: Фильтр драйвер фаловой системы роняет загрузку ОС
Здравствуйте, x64, Вы писали:
СР>>Насколько я помню в sfilter, подключение происходит после монтирования. И как следствие он у вас как бы и не работает совсем.
x64>sfilter умеет подключаться и к уже смонтированным томам.
Да верно на xp и выше windows вызовет нотификацю для всех установленных томов.
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Re[4]: Фильтр драйвер фаловой системы роняет загрузку ОС
x64>>sfilter умеет подключаться и к уже смонтированным томам. СР>Да верно на xp и выше windows вызовет нотификацю для всех установленных томов.
Да, но этого недостаточно, это ведь всего лишь приведёт к аттачу на CDO файловой системы, поэтому sfilter там делает дополнительно перечисление томов для каждой FS, о которой вызывается уведомлялка.
Re[5]: Фильтр драйвер фаловой системы роняет загрузку ОС
Здравствуйте, x64, Вы писали:
x64>>>sfilter умеет подключаться и к уже смонтированным томам. СР>>Да верно на xp и выше windows вызовет нотификацю для всех установленных томов.
x64>Да, но этого недостаточно, это ведь всего лишь приведёт к аттачу на CDO файловой системы, поэтому sfilter там делает дополнительно перечисление томов для каждой FS, о которой вызывается уведомлялка.
Да, так постепенно и раскажем человеку как рабоатет фильтр на xp. Еще скажем что можно и совместимый по бинарнику фильтр написать для 2000 и xp, где динамически фукции грузить.
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.