Здравствуйте. Пишу фильтр-драйвер для 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' или как я - подключаться/отключаться самому ?
vasalvit Оба варианта пройдут. AddDevice скорее является "правилом хорошего тона", WDM рекомендует аттачить девайс в этой функции
Хорошо. А как системе указать, чтобы она вызвала AddDevice? Т.е. есть у меня имя '\Device\CdRom0'. Я могу получить его устройство PDEVICE_OBJECT. А дальше как?
Это зависит от того, 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", там очень хорошо расписан этот вопрос.