Всем доброго времени суток! У меня следующая проблема: есть драйвер, один файл, назовём его driver.sys. Это PNP драйвер двух виртуальных устройств: одно их них - виртуальная шина, другое - виртуальное устройство, эти виртуальные устройства висят на этой виртуальной шине. Оба устройства тесно связаны, поэтому дабы не дублировать код я решил написать для них один драйвер. Естественно, эти 2 девайса надо как-то устанавливать в систему, для этого я сделал 2 .INF файла. Один .INF файл для шины, другой - для устройства, в один файл запихнуть не удаётся, т.к устройства разных классов. Шина класса System, а устройство класса Ports, а т.к секция [Version] может быть только одна, то приходится писать 2 .INF файла. Вот тут-то и возникают проблемы, ведь файл драйвера - driver.sys, который устанавливается, один, а .INF файла, которые его ставят - два. Возникает такая ситуация - ставлю шину, всё OK, драйвер копируется в system32\drivers и запускается, поддерживает шину. Потом шина перечисляет девайсы и теперь нужно установить каждый девайс, .INF устройства читается, драйвер копируется поверх старого, но запуститься не может, винда говорит что не может обновить драйвер, т.к он используется, нужна перезагрузка. Перезагрузка естественно не помогает, шина всё равно грузится первой и занимает driver.sys. Есть ли способ дать винде понять что driver.sys - шареный для обоих девайсов и что не надо пытаться его по новой загрузить а просто юзать существующий ? P.S: Если сделать один .INF файл и запихнуть и шину и девайс в один класс, скажем Ports то всё Ok, драйвер грузится один раз, шина успешно перечисляет девайсы и драйвер для них работает тот же самый.
Попробуй в inf файл шины добавить директиву CopyInf = mydevice.inf Где mydevice.inf - inf файл для устройства. Из последнего нужно убрать все секции, связанные с копированием файлов, оставить только AddService, чтобы система знала, что за сервис обслуживает данный девайс.
TarasCo, к сожалению не помогло. Эта директива лишь говорит о том что драйвер виртуального девайса надо искать в mydevice.inf, т.е теперь мне не приходится выбирать этот файл руками, он сам подцепляется, а ошибка всё тажа: Windows cannot load the device driver for this hardware because a previous instance of the device driver is still in memory. (Code 38) You need to restart your computer before the changes you made to this device will take affect.
Если это к памяти на относиться то можно просто переименовать драйвер. А вдруг жалко памяти - то выход 2 драйвера, при этом основной функционал вынесен в отдельную длл.
TarasCo, всё получилось, надо было просто чтобы сервис в обоих .INF'ах имел одинаковые значения Name и DisplayName. Спасибо огромное за помощь!!! С меня пиво