Опять вопрос по фильтру файловой системы.

Тема в разделе "WASM.WIN32", создана пользователем LuckyDevil, 30 сен 2005.

  1. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Всем доброго!

    По количеству ответов, на мой предыдущий пост делаю вывод, что народу мало что известно об этом или просто это тема закрыта для обсуждения. И все же я продолжаю начатаю мной тему.

    Всем известна такая программа как notepad.exe, скажите и что???

    Меня интересует метод открытия файлов, для этого программа использует мапирование файла в pagefile.sys, насколько я знаю. Так вот это и является для меня загадкой, единственный IPR запрос, посылаемый в систему notepad'oм при открытии файла является IRP_MJ_CREATE. Неужели весь буфер данных передается в этом запросе или есть какие-то дополнительные особенности при использовании мапирования?

    :dntknw:

    Вообщем, куда мнеглядеть, что бы обнаружеть буфер данных(содержимое файла)?
     
  2. eugene

    eugene New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2004
    Сообщения:
    5
    notepad.exe отображает файл в память как ты уже заметил. Система загружает необходимые страницы в память и сбрасывает на диск измененные. Поэтому ты не видишь этих операций в контексте самого процесса notepad.exe. Ты должен смотреть на операции с файловыми объектами, которые соответствуют секции созданной notepad.exe. Кое что на этот счет можно посмотреть на OSR. Так же посмотри Microsoft Windwos Internals by Mark E. Russinovich, David A. Solomon. А именно главу 7 Memory Management раздел Section Objects.
     
  3. eugene

    eugene New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2004
    Сообщения:
    5
  4. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Для маппированных файлов используется кэширование. При этом IRP вообще не создается. Ищи "Fast I/O" и всё, что с этим связано.



    Для исследования бери FileSpy http://www.zezula.net/
     
  5. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    eugene,Four-F, spasibo za soveti.

    eugene, spasibo za linki.

    Tak kak ya novichek v sistemnom programmirovanii mnogie terminalogii dlya menya zagadka "которые соответствуют секции созданной notepad.exe", chto ti pod etim podrazumevaesh?

    Four-F, ya reshil vsetaki ispol'sovat' filespy kak bazu dlya moego drivera, poka chto mne udalos' tol'ko podkluchit'sya k ustroistvu. Ya poluchayu vse IRP_MJ_XXX posilaemie emu, no FAST IO poka molchat. V pevonachal'noi versii ya ispol'soval metod podkluchenya ot Filemon i s Fast IO problem ne bilo, no k primeru ya ne zametil chto bi srabativali Fast IO pri rabote Notepad.exe, v kakom-to iz forumov pisali chto pri mapirovanii Fast IO vovse ne rabotayut, tol'ko IRP_MJ_XXX :dntknw:. I kak bit' s keshirovaniem?

    Eshe vopros, ob "shadow device", chto eto za metod, v kakih sluchiyah ego primenyayut?
     
  6. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    "Fast I/O is specifically designed for rapid synchronous I/O on cached files. In fast I/O operations, data is transferred directly between user buffers and the system cache, bypassing the file system and the storage driver stack."



    Диспетчер кеша сам со всем справляется, похоже. В IFS Kit есть спец раздел посвященный файловым системам, фильтрам файловых систем и кешированию. Там же много внимания уделено исходникам FileSpy.



    "shadow device" - отдельный девайс, который не садится в стек и используется только для управления фильтрами (изменение режима работы, получение логов и т.п.). Короче, см. "control device object" в FileSpy - это и есть "shadow device". Ещё встречается термин "extra device object".
     
  7. eugene

    eugene New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2004
    Сообщения:
    5
    Я неправильно написал. Файловый объект будет один. Тот, на который указывает FilePointer из объекта CONTROL_AREA. Он и будет использоваться системой для чтения в память и записи на диск. Все это выглядит так:



    --> Section object pointers --> Control area

    | |

    | |

    FileObject <-----------------------



    С использованием FileObject будет происходить чтение с диска и запись на диск. Это будет paging I/O в произвольном контексте (Arbitrary Caller's Thread Context).



    Что касается "shadow device". Это не тоже самое что "control device object". Shadow device используется в диспатчере IRP_MJ_CREATE для открыия файла, с целью избежать рекурсивного вызова диспатчера IRP_MJ_CREATE. Читать IFS Faq.
     
  8. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Four-F, я проанализировал логи выдоваемые Filespy от zezula.

    Я был не прав говоря что Fast IO не прослеживаются при мапировании, они действительно появляются, но только при повторном открытии файла, т.е. из кэша. Также эта утиль показывает, что при первом открытии отрабатывает стандартный IRP_MJ_READ, осталось только разобраться почему у меня не работают Fast IO и почему я пропустил(наверное не заметил) этот IRP_MJ_READ.

    eugene, да статью про "shadow device" на OSR я читал, как раз там говорилось о рекурсиях. В силу плохого английского, я просто не смог уловить суть этого метода.
     
  9. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    об "shadow device" от Valerio:

    вообще говоря SDO используется в IRP_MJ_CREATE для того чтобы избежать рекурсии (вероятно, то о чем писал и Мэйсон и все остальные) в связи со своими собственными подзапросами на открытие файла из этого же самого IRP_MJ_CREATE: если скажем в IRP_MJ_CREATE выполнить ZwCreateFile то мы опять попадем в IRP_MJ_CREATE обработчик в том же самом стеке и получим рекурсию, которая на втором-третьем таком вхождении даст BSOD.



    Поэтому и был изобретен SDO способ — свои подзапросы постим на только нам известный SDO, а при входе в IRP_MJ_CREATE первым делом смотрим — с какого устройства пришел IRP, если это наш SDO — то просто пропускаем запрос вниз не глядя и таким образом разруливается рекурсия.

     
  10. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Продолжаю тему...

    Filespy, на сколько я понял невыгружаемый драйвер, по крайней мере Unload работает только для XP, а для W2K просто остановака ведения лога. Почему?

    Я пытаюсь сейчас выгрузить драйвер в W2k, но он остается в списке загруженных драйверов, хоть и не работает, в чем может быть проблема:

    1) я не удалил все созданные мной устройства?

    2) может это быть из-за не обнуленных ссылок на объект (ObDereferenceObject), если да, то есть ли механизм определения количества ссылок?
     
  11. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Там в комментариях есть, IMHO, ответы на все вопросы.



    <font color="gray][ LuckyDevil</font><!--color--><font color="gray]: по крайней мере Unload работает только для XP ]</font><!--color-->



    и только в Debug версии.


    Код (Text):
    1. VOID
    2. DriverUnload (
    3.     IN PDRIVER_OBJECT DriverObject
    4.     )
    5. /*++
    6. . . .
    7.     WARNING: Microsoft does not officially support the unloading of File
    8.              System Filter Drivers.  This is an example of how to unload
    9.              your driver if you would like to use it during development.
    10.              This should not be made available in production code.


    <font color="gray][ LuckyDevil</font><!--color--><font color="gray]: а для W2K просто остановака ведения лога. Почему? ]</font><!--color-->


    Код (Text):
    1. VOID
    2. DriverUnload (
    3.     IN PDRIVER_OBJECT DriverObject
    4.     )
    5. /*++
    6. . . .
    7.     //
    8.     //  MULTIVERSION NOTE:
    9.     //
    10.     //  We can only support unload for testing environments if we can enumerate
    11.     //  the outstanding device objects that our driver has.
    12.     //
    13. . . .
    14.         //
    15.         //  Get what device objects we can for this driver.  Quit if there
    16.         //  are not any more.  Note that this routine should always be defined
    17.         //  since this routine is only compiled for Windows XP and later.
    18.         //
    19.  
    20.         status = (gSpyDynamicFunctions.EnumerateDeviceObjectList)(. . .);


    Функция IoEnumerateDeviceObjectList доступна только начиная с XP. Хотя, кажется, очень легко реализуется руками.



    <font color="gray][ LuckyDevil</font><!--color--><font color="gray]: Я пытаюсь сейчас выгрузить драйвер в W2k, но он остается в списке загруженных драйверов ]</font><!--color-->



    Если исходник оригинальный, то для W2k gFileSpyDriverObject->DriverUnload будет равно NULL.
    Код (Text):
    1.  
    2.     if (IS_WINDOWSXP_OR_LATER()) {
    3.        
    4.         gFileSpyDriverObject->DriverUnload = DriverUnload;
    5.     }


    <font color="gray][ LuckyDevil</font><!--color--><font color="gray]: может это быть из-за не обнуленных ссылок на объект (ObDereferenceObject), если да, то есть ли механизм определения количества ссылок? ]</font><!--color-->


    Код (Text):
    1.  
    2. VOID
    3. DriverUnload (
    4.     IN PDRIVER_OBJECT DriverObject
    5.     )
    6. /*++
    7. . . .
    8.     When a request is made to unload a driver the IO System will cache that
    9.     information and not actually call this routine until the following states
    10.     have occurred:
    11.     - All device objects which belong to this filter are at the top of their
    12.       respective attachment chains.
    13.     - All handle counts for all device objects which belong to this filter have
    14.       gone to zero.
     
  12. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Four-F, мммм... но ведь Зезуле это удается, а ведь он использует filespy from IFS Kit.
     
  13. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Насколько я знаю, его фильтр изначально базировался на filespy from 2003 IFS Kit. Кажется, он уже несколько видоизменён. Спроси у автора.
     
  14. Intercepter

    Intercepter New Member

    Публикаций:
    0
    Регистрация:
    22 сен 2005
    Сообщения:
    14
    Адрес:
    Russia
    еще в книге Rajeev Nagar идет речь о драйвере фильтре NTFS...
     
  15. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Four-F, а DDK 3790 то какой?
     
  16. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Windows Server 2003 Service Pack 1 (SP1) Driver Development Kit (DDK)



    Но это не IFS Kit. Примеров драйверов файловых систем там нет.
     
  17. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    \cdfs

    \fastfat

    \filter

    \nulmrx

    \OSR_docs

    \smbmrx

    dirs

    ifs_install.htm



    Four-F, ну если этот список не является примерами драйверов файловой системы, то... караул, если кому не жалко киньте их в мою сторону.
     
  18. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Не, погоди. Я попутал чуток. Это у тя содержимое каталога \src\filesys от Windows Server 2003 IFS Kit у него тоже билд 3790. Так что всё нормально. IFS Kit - надмножество над DDK. У DDK и IFS Kit может быть один и тот же номер билда, но в с IFS Kit дополнительно идут кое-кикие вещи для разработки драйверов файловых систем.



    Одни из последних:

    Windows Server 2003 IFS Kit 3790

    Windows Server 2003 Service Pack 1 (SP1) Driver Development Kit (DDK) 3790.1830

    Есть ли IFS Kit 3790.1830 я не знаю.



    У Зезулы спрашивал про его FileSpy?
     
  19. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Four-F, не еще, времени нет, хотелось бы с толком и расстановкой подойти к этому, а то если честно сам еще до конца не знаю с чего именно начать его закидывать вопросами.