Динамическое подключение/отключение драйвера фильтра

Тема в разделе "WASM.NT.KERNEL", создана пользователем vasalvit, 8 янв 2009.

  1. vasalvit

    vasalvit New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    53
    Здравствуйте.

    Пишу фильтр-драйвер для CD-ROM'ов. Принцип работы (его изменить нельзя) таков:
    1. приложение посылает запрос IOCTL_ATTACH с указанием CD-ROM'а (\Device\CdRom0). Фильтр должен подключиться к устройству и отлавливать нужные события
    2. приложение посылает запрос IOCTL_DETACH с указанием CD-ROM'а (\Device\CdRom0). Фильтр должен отключиться.

    Вопрос: Как правильно произвести поключение/отключение.

    На данный момент я в обработчике IOCTL_ATTACH вызываю 'IoAttachDeviceToDeviceStack', а в IOCTL_DETACH - 'IoDetachDevice'.

    В DDK и на форумах часто упоминается функция AddDevice. Если я понимаю правильно, то эту функцию вызывает система при обнаружении устройства. Нужно ли мне определять эту функцию?

    Как правильнее - работать через 'AddDevice' или как я - подключаться/отключаться самому ?
     
  2. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    vasalvit
    Оба варианта пройдут.
    AddDevice скорее является "правилом хорошего тона", WDM рекомендует аттачить девайс в этой функции
     
  3. vasalvit

    vasalvit New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    53
    Хорошо. А как системе указать, чтобы она вызвала AddDevice? Т.е. есть у меня имя '\Device\CdRom0'. Я могу получить его устройство PDEVICE_OBJECT. А дальше как?
     
  4. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    Это зависит от того, legacy-драйвер ты пишешь, или нет. Если да, то AddDevice нужно прописать, но специально вызывать не надо, система (а точнее PnP Manager) сделает это сама при загрузке драйвера (грубо говоря - создаст устройство, сосчитает его параметры из реестра, и воткнет его в стек того или иного устройства автоматически в зависимости от того, high или low это фильтр). Для того, чтобы это произошло, "дизайн" драйвера должен соотвествовать предъявляемым параметрам WDM, если этого не будет, PnP Manager подключить фильтр не сможет.
    Исходя из твоих требований к фильтру, тебе не нужен legacy-драйвер, на твоем месте я бы не заморачивался насчет AddDevice и вообще не прописывал бы ее.
    Вообще, подключение legacy драйвера-фильтра с первого взгляда - невнятная тема, она кстати на форуме уже поднималась - http://www.wasm.ru/forum/viewtopic.php?id=18770. Могу также посоветовать почитать Walter Oney "Programming the WDM", там очень хорошо расписан этот вопрос.