Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: цепляем фильтр  (Прочитано 13361 раз)
0 Пользователей и 1 Гость смотрят эту тему.
GG_shara
Постоялец

ua
Offline Offline
Пол: Мужской
Лицо под маской


« : 31-05-2010 18:28 » 

И вновь здравствуйте камрады!

ищу совета.. хочу подключить свой драйвер фильтр ФайловойСистемы ко всем дискам

делаю это так:
 
  • IoRegisterFsRegistrationChange ()  для получения уведомлений о новых файловых системах. функция-нотификатор  получает   Control Device Object  всех зерегистрированных драйверов файловой системы.
  • затем для каждого CDO перечисляю их тома и присоединяюсь к ним в стек. для этого использую функцию ядра IoEnumerateDeviceObjectList.
  • ну а дальше уже дело техники =)
 

вследствие работы этого алгоритма получаю такой результат:

Код:
init.. 

IoRegisterFsRegistrationChange (..) ok
           CDO
 adr  'ffb70828'  name \Device\WebDavRedirector        type NETWORK_FILE_SYSTEM
 adr  'ffb1ec00'  name \Device\LanmanRedirector        type NETWORK_FILE_SYSTEM
 adr  'ffb70d70'  name \FileSystem\FatCdRomRecognizer  type CD_ROM_FILE_SYSTEM
 adr  'ffb716b8'  name \FileSystem\UdfsCdRomRecognizer type CD_ROM_FILE_SYSTEM
 adr  '810879f8'  name \Cdfs                           type CD_ROM_FILE_SYSTEM
 adr  'ffb736b8'  name \FileSystem\FatDiskRecognizer   type DISK_FILE_SYSTEM
  IoEnumerateDeviceObjectList ..
   Device 0 'ffb70d70' - CD_ROM_FILE_SYSTEM name \FileSystem\FatCdRomRecognizer  type CD_ROM_FILE_SYSTEM
   Device 1 'ffb736b8' - DISK_FILE_SYSTEM   name \FileSystem\FatDiskRecognizer   type DISK_FILE_SYSTEM
   Device 2 'ffb72f08' - DISK_FILE_SYSTEM   name \FileSystem\UdfsDiskRecognizer  type DISK_FILE_SYSTEM
   Device 3 'ffb716b8' - CD_ROM_FILE_SYSTEM name \FileSystem\UdfsCdRomRecognizer type CD_ROM_FILE_SYSTEM
   Device 4 'ffb72ae0' - CD_ROM_FILE_SYSTEM name \FileSystem\CdfsRecognizer      type CD_ROM_FILE_SYSTEM
   END
  [OK]

 adr  'ffb72f08'  name \FileSystem\UdfsDiskRecognizer  type DISK_FILE_SYSTEM
  IoEnumerateDeviceObjectList ..
   Device 0 'ffb70d70' - CD_ROM_FILE_SYSTEM name \FileSystem\FatCdRomRecognizer  type CD_ROM_FILE_SYSTEM
   Device 1 'ffb736b8' - DISK_FILE_SYSTEM   name \FileSystem\FatDiskRecognizer   type DISK_FILE_SYSTEM
   Device 2 'ffb72f08' - DISK_FILE_SYSTEM   name \FileSystem\UdfsDiskRecognizer  type DISK_FILE_SYSTEM
   Device 3 'ffb716b8' - CD_ROM_FILE_SYSTEM name \FileSystem\UdfsCdRomRecognizer type CD_ROM_FILE_SYSTEM
   Device 4 'ffb72ae0' - CD_ROM_FILE_SYSTEM name \FileSystem\CdfsRecognizer      type CD_ROM_FILE_SYSTEM
   END
  [OK]

 adr  '81120030'  name \Ntfs  type DISK_FILE_SYSTEM
  IoEnumerateDeviceObjectList ..
   Device 0 '8111f770' - DISK_FILE_SYSTEM   name (null)  type DISK_FILE_SYSTEM
   Device 1 '81120030' - DISK_FILE_SYSTEM   name \Ntfs   type DISK_FILE_SYSTEM
   END
  [OK]
[OK]

народ, и у меня вопрос, как мне ИГНОРИРОВАТЬ расспознаватели (Recognizer)? к ним конектиться мне смысла никакого нету.  Жаль

можно отсекать их по имени "%Recognizer" но что-то не хочется так делать, потому-что есть весомые подозрения что имя расспознвателей может меняться. например тот-же SFilter их ищет посредством такого шаблона "\\FileSystem\\Fs_Rec" ...
т.е. метод весьма ненадежен  Должен же быть выход!!!


а прикреплять свой фильтр куда-попало не хочу  Я больше не буду...
« Последнее редактирование: 15-06-2010 15:18 от Алексей1153++ » Записан

Не смеши меня с точки зрения аэродинамики шмель не может летать
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 31-05-2010 18:48 » 

метод надежен  Улыбаюсь
Записан
GG_shara
Постоялец

ua
Offline Offline
Пол: Мужской
Лицо под маской


« Ответ #2 : 31-05-2010 18:59 » 

resource, несогласен

и выше я писал почему..
поиском "..\\Fs_Rec" в имя девайса (как делает SFilter) я в своем конкретном случае я рекогнизеров не найду.. нужно искать через "%Recognizer". а где гарантия что на другой системе не будет какое-то другое имя?

Код:
 if (!FlagOn(SfDebug, SFDEBUG_ATTACH_TO_FSRECOGNIZER)) {

        //
        //  See if this is one of the standard Microsoft file system recognizer
        //  devices (see if this device is in the FS_REC driver).  If so skip
        //  it.  We no longer attach to file system recognizer devices, we
        //  simply wait for the real file system driver to load.
        //

        RtlInitUnicodeString( &fsrecName, L"\\FileSystem\\Fs_Rec" );

        fsName = NLGetAndAllocateObjectName( DeviceObject->DriverObject,
                                             &gSfNameBufferLookasideList );

        if (fsName == NULL) {

            SF_LOG_PRINT( SFDEBUG_DISPLAY_ATTACHMENT_NAMES,
                          ("SFilter!SfAttachToFileSystemDevice:          Error retrieving name, may attach to FS recognizer, status=%08x\n",
                           STATUS_INSUFFICIENT_RESOURCES) );

        } else if (RtlCompareUnicodeString( &fsName->Name,
                                            &fsrecName, TRUE ) == 0) {

            //
            //  If it is a recognizer, don't attach
            //

            NLFreeNameControl( fsName, &gSfNameBufferLookasideList );
            return STATUS_SUCCESS;
        }

        NLFreeNameControl( fsName, &gSfNameBufferLookasideList );
    }

    //
    //  We want to attach to this file system.  Create a new device object we
    //  can attach with.
    //
bla bla bla ...
« Последнее редактирование: 31-05-2010 19:09 от GG_shara » Записан

Не смеши меня с точки зрения аэродинамики шмель не может летать
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 31-05-2010 19:56 » 

Это не имя девайса. Это имя драйвера.
Записан
GG_shara
Постоялец

ua
Offline Offline
Пол: Мужской
Лицо под маской


« Ответ #4 : 01-06-2010 16:44 » 

да, и но оно может меняться..
Записан

Не смеши меня с точки зрения аэродинамики шмель не может летать
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 01-06-2010 16:54 » 

Ну можно глянуть от 2к до win7, поменялось или нет  Улыбаюсь
Записан
GG_shara
Постоялец

ua
Offline Offline
Пол: Мужской
Лицо под маской


« Ответ #6 : 01-06-2010 17:43 » 

вывод насчет того что оно менялось я сделал просматривая исходники SFiltra

а как кстати можно просмотреть их имена не имя под румами всех этих ОСей?
у меня только ХР  Скромно так...
Записан

Не смеши меня с точки зрения аэродинамики шмель не может летать
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 01-06-2010 20:37 » 

У меня на работе все оси. Но все и не нужны. Надо только 2К и 7ку. Завтра гляну.
Записан
GG_shara
Постоялец

ua
Offline Offline
Пол: Мужской
Лицо под маской


« Ответ #8 : 01-06-2010 20:44 » 

буду весьма признателен
Записан

Не смеши меня с точки зрения аэродинамики шмель не может летать
x64
Участник

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 01-06-2010 20:57 » 

вывод насчет того что оно менялось я сделал просматривая исходники SFiltra

Имя драйвера распознавателей не менялось.
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 01-06-2010 21:11 » 

Цитата: x64
Имя драйвера распознавателей не менялось.

Следовательно мне можно не смотреть  Улыбаюсь
Да в любом случае, я не вижу никаких других признаков по которым можно распознать рекогнайзер.
Записан
GG_shara
Постоялец

ua
Offline Offline
Пол: Мужской
Лицо под маской


« Ответ #11 : 02-06-2010 16:33 » 

я не вижу никаких других признаков по которым можно распознать рекогнайзер.
вот то-то и оно. ладна будем искать искать по имени =)
Записан

Не смеши меня с точки зрения аэродинамики шмель не может летать
GG_shara
Постоялец

ua
Offline Offline
Пол: Мужской
Лицо под маской


« Ответ #12 : 14-06-2010 19:12 » 

значится так, если кому будет интересно  Внимание! Говорит и показывает...

если при обработке IRP_MN_LOAD_FILE_SYSTEM
минор код irpSp->MinorFunction  == IRP_MN_LOAD_FILE_SYSTEM значит мы (фильтр) прицеплены к распознавателю ФС

ставим постобработку сего ИРПА.  усе ок? значит  ФС была успешно смонтированна - мы можем без зазрения совести "отвалиться" от текущего  DeviceObjecta. ну а если по каким-либо причинам ФС не удалось подмонтироваться - то остаемся дальше висеть на этом Распознавателе и ловить IRP_MN_LOAD_FILE_SYSTEM

собсно вопрос решен =)

з.ы.
Одмины!!
а тут можно как-то тему решенной пометить?.. ну чтобы для истории..   Скромно так...
« Последнее редактирование: 14-06-2010 19:14 от GG_shara » Записан

Не смеши меня с точки зрения аэродинамики шмель не может летать
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 15-06-2010 13:53 » 

оно уже в истории)
по идее можно тему "закрыть", но с другой стороны... вдруг когда нибудь кто-нибудь решится что нибудь дописать)

PS пометил иконкой "супер")
это делается путем редактирования  первого сообщения. вы как автор кажется это тоже можете делать)
« Последнее редактирование: 15-06-2010 13:55 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines