Подскажите пожалуйста, какие методы есть определения фильтр-драйверов? например, как определить, что на мой девайс повесили фильтр-драйвер? И можно ли спрятаться от такого определения? Спасибо.
souzz Для PnP устройств в юзер-моде можно просмотром реестра через функции SetupDi. См. DevCon в DDK. Там точно есть команда, по которой выдается кто в стеке кто. Эта инфа черпается из реестра, т.е. вне зависимости от того, загружен стек или нет. При заргуженном стеке из драйвера можно пройтись по нему вверх или вниз. Вверх: Получить PDO с помощью IoGetDeviceAttachmentBaseRef и идти вверх pDeviceObject->AttachedDevice. Вниз: Получить топ с помощью IoGetAttachedDeviceReference и идти вниз IoGetLowerDeviceObject под ХР+ или pDeviceObject->DeviceObjectExtension->AttachedTo под w2k. Если ты знаешь, какой драйвер в стеке управляет FDO, то значит все остальные (кроме PDO в самом низу) - фильтры. souzz Думаю нет. Для PnP устройств все фильтры прописываются в ключи реестра UpperFilters и LowerFilters в хардварной и/или софтварной ветке. Можно обмануть сканирование реестра, возвращая отредактированные значения этих ключей. Сделать это тоже будет не просто, если вообще возможно, т.к. видимо невозможно будет определить кто запрашивает информацию. А защититься от прохода по стеку вверх-вниз, IMHO, нереально.
Ясно, спасибо. Как вариант, получается после загрузки операционки и фильтра, очистить эти ключи, в этом случае в течении данного сеанса работы, фильтр работает, но через реестр отловить нельзя. Главное не забыть, восстановить эти параметры при выходе.
souzz Тебе виднее какой там у тебя фильтр и где, но если в систему придёт ещё одно устройство того же типа, то стек будет выстроен без тех фильтров, которые ты вытер в UpperFilters/LowerFilters. Если это фильтр класса, то может покрывать довольно большое кол-во разных устройств. souzz А если система упадёт? Некрасивый какой-то вариант. И сторого говоря, я не знаю обращаются ли SetupDi каждый раз именно к реестру. Возможно эта информация читается из реестра при загрузке и где-то складывается у PnP менеджера, хотя вряд ли.