Определение фильтр-драйверов на устройстве.

Тема в разделе "WASM.NT.KERNEL", создана пользователем souzz, 4 сен 2006.

  1. souzz

    souzz New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    17
    Адрес:
    Freedom
    Подскажите пожалуйста, какие методы есть определения фильтр-драйверов?
    например, как определить, что на мой девайс повесили фильтр-драйвер?
    И можно ли спрятаться от такого определения?

    Спасибо.
     
  2. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    souzz
    Для PnP устройств в юзер-моде можно просмотром реестра через функции SetupDi. См. DevCon в DDK. Там точно есть команда, по которой выдается кто в стеке кто. Эта инфа черпается из реестра, т.е. вне зависимости от того, загружен стек или нет.

    При заргуженном стеке из драйвера можно пройтись по нему вверх или вниз.

    Вверх: Получить PDO с помощью IoGetDeviceAttachmentBaseRef и идти вверх pDeviceObject->AttachedDevice.
    Вниз: Получить топ с помощью IoGetAttachedDeviceReference и идти вниз IoGetLowerDeviceObject под ХР+ или pDeviceObject->DeviceObjectExtension->AttachedTo под w2k.

    Если ты знаешь, какой драйвер в стеке управляет FDO, то значит все остальные (кроме PDO в самом низу) - фильтры.

    souzz
    Думаю нет. Для PnP устройств все фильтры прописываются в ключи реестра UpperFilters и LowerFilters в хардварной и/или софтварной ветке. Можно обмануть сканирование реестра, возвращая отредактированные значения этих ключей. Сделать это тоже будет не просто, если вообще возможно, т.к. видимо невозможно будет определить кто запрашивает информацию. А защититься от прохода по стеку вверх-вниз, IMHO, нереально.
     
  3. souzz

    souzz New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    17
    Адрес:
    Freedom
    Ясно, спасибо.

    Как вариант, получается после загрузки операционки и фильтра, очистить эти ключи, в этом случае в течении данного сеанса работы, фильтр работает, но через реестр отловить нельзя.

    Главное не забыть, восстановить эти параметры при выходе.
     
  4. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    souzz
    Тебе виднее какой там у тебя фильтр и где, но если в систему придёт ещё одно устройство того же типа, то стек будет выстроен без тех фильтров, которые ты вытер в UpperFilters/LowerFilters. Если это фильтр класса, то может покрывать довольно большое кол-во разных устройств.

    souzz
    А если система упадёт?

    Некрасивый какой-то вариант. И сторого говоря, я не знаю обращаются ли SetupDi каждый раз именно к реестру. Возможно эта информация читается из реестра при загрузке и где-то складывается у PnP менеджера, хотя вряд ли.