Есть самодельное PCI-устройство, мною же написан драйвер (W2k/XP) (sys и inf)
Есть задача ставить драйвер автоматически, чтобы не лазить в диспетчере устроств.
Самое очевидное решение какое я увидел это проделать такое с помощью devcon от MS.
Там есть ключ install, но вот беда , точнее 2 варианта
1)если я вызываю инсталл (предварительно устройство не обнаружено системой никак)
devcon install inf_fil.inf PCI\VEN_1999
то почему-то драйвер не встает, а появляецо неизвестное устройство для которого не найдены драйвера
setupapi при этом говорит
#-199 Выполнение "C:\Work\GoldSphere\Driver\devcon.exe" с командной строкой: devcon.exe install GSDriver.inf PCI\VEN_1999
#I060 Установка выбранного драйвера.
#-019 Поиск идентификаторов аппаратуры: pci\ven_1999
#-166 Функция установки устройства: DIF_SELECTBESTCOMPATDRV.
#W059 Ошибка при подборе наиболее совместимого драйвера. Ошибка 0xe0000228: Для этого устройства отсутствую совместимые драйверы.
#W157 Ошибка установщика по умолчанию. Ошибка 0xe0000228: Для этого устройства отсутствую совместимые драйверы.
#-166 Функция установки устройства: DIF_INSTALLDEVICEFILES.
#I125 Установка пустого драйвера для "ROOT\MyClass\0000".
#E122 Не удалось установить устройство. Ошибка 0xe0000203: Для элемента или информационного пакета устройства не выбран драйвер.
#E157 Ошибка установщика по умолчанию. Ошибка 0xe0000203: Для элемента или информационного пакета устройства не выбран драйвер.
#I060 Установка выбранного драйвера.
#I125 Установка пустого драйвера для "ROOT\MyClass\0000".
#I121 Установка устройства "ROOT\MyClass\0000" успешно завершена.
2)а если перед командой инсталл я дам команду рескан (предварительно устройство не обнаружено системой никак), типа такого
devcon rescan
devcon install inf_fil.inf PCI\VEN_1999
то вначале он находит неизвестное PCI устройство, потом ставит для него драйвер , НО!!! также как и в первом варианте появляется неизвестное устройство!
[2006/11/03 16:07:56 760.19 Driver Install]
#-019 Поиск идентификаторов аппаратуры: pci\ven_1999&dev_0002&subsys_00000080&rev_00,pci\ven_1999&dev_0002&subsys_00000080,pci\ven_1999&dev_0002&cc_070780,pci\ven_1999&dev_0002&cc_0707
#-018 Поиск совместимых идентификаторов: pci\ven_1999&dev_0002&rev_00,pci\ven_1999&dev_0002,pci\ven_1999&cc_070780,pci\ven_1999&cc_0707,pci\ven_1999,pci\cc_070780,pci\cc_0707
#-198 Обработана командная строка: C:\WINDOWS\system32\services.exe
#I022 Найдено "PCI\VEN_1999&DEV_0002" в C:\WINDOWS\inf\oem36.inf; Устройство: "GoldSphere Trunk"; Драйвер: "GoldSphere Trunk"; Поставщик: "My Company"; Изготовитель: "My Company"; Секция: "GSDriver_DDI"
#I087 Нет доверия к узлу драйвера, ранг изменен с 0x00002001 на 0x0000a001.
#I023 Действительная секция установки: [GSDriver_DDI.NT]. Ранг: 0x0000a001. Дата драйвера: 01/01/1601.
#I022 Найдено "PCI\VEN_1999&DEV_0002" в C:\WINDOWS\inf\oem37.inf; Устройство: "GoldSphere Trunk"; Драйвер: "GoldSphere Trunk"; Поставщик: "My Company"; Изготовитель: "My Company"; Секция: "GSDriver_DDI"
#I087 Нет доверия к узлу драйвера, ранг изменен с 0x00002001 на 0x0000a001.
#I023 Действительная секция установки: [GSDriver_DDI.NT]. Ранг: 0x0000a001. Дата драйвера: 01/01/1601.
#-166 Функция установки устройства: DIF_SELECTBESTCOMPATDRV.
#I063 Установка выбранного драйвера из секции [GSDriver_DDI] в "c:\windows\inf\oem36.inf".
#I320 GUID класса устройства остается равным {FF646F80-8DEF-11D2-9449-00105A075F6B}.
#I060 Установка выбранного драйвера.
#I058 Выбран наиболее совместимый драйвер.
#-166 Функция установки устройства: DIF_INSTALLDEVICEFILES.
#I124 Выполняется только копирующая установка "PCI\VEN_1999&DEV_0002&SUBSYS_00000080&REV_00\4&BC67B8D&0&00F0".
#-011 Установка секции [GSDriver_DDI.NT] из "c:\windows\inf\oem36.inf".
#E358 Неподписанный или неправильно подписанный файл "c:\windows\inf\oem36.inf" для драйвера "GoldSphere Trunk" заблокирован (серверная установка). Ошибка 1168: Элемент не найден.
#E122 Не удалось установить устройство. Ошибка 1168: Элемент не найден.
#E157 Ошибка установщика по умолчанию. Ошибка 1168: Элемент не найден.
[2006/11/03 16:08:00 600.2]
#-199 Выполнение "C:\WINDOWS\system32\rundll32.exe" с командной строкой: rundll32.exe newdev.dll,ClientSideInstall \\.\pipe\PNP_Device_Install_Pipe_0.{FD92C582-E411-42DC-AD61-F9FDA1A499D1}
#I060 Установка выбранного драйвера.
#-019 Поиск идентификаторов аппаратуры: pci\ven_1999&dev_0002&subsys_00000080&rev_00,pci\ven_1999&dev_0002&subsys_00000080,pci\ven_1999&dev_0002&cc_070780,pci\ven_1999&dev_0002&cc_0707
#-018 Поиск совместимых идентификаторов: pci\ven_1999&dev_0002&rev_00,pci\ven_1999&dev_0002,pci\ven_1999&cc_070780,pci\ven_1999&cc_0707,pci\ven_1999,pci\cc_070780,pci\cc_0707
#I022 Найдено "PCI\VEN_1999&DEV_0002" в C:\WINDOWS\inf\oem36.inf; Устройство: "GoldSphere Trunk"; Драйвер: "GoldSphere Trunk"; Поставщик: "My Company"; Изготовитель: "My Company"; Секция: "GSDriver_DDI"
#I087 Нет доверия к узлу драйвера, ранг изменен с 0x00002001 на 0x0000a001.
#I023 Действительная секция установки: [GSDriver_DDI.NT]. Ранг: 0x0000a001. Дата драйвера: 01/01/1601.
#I022 Найдено "PCI\VEN_1999&DEV_0002" в C:\WINDOWS\inf\oem37.inf; Устройство: "GoldSphere Trunk"; Драйвер: "GoldSphere Trunk"; Поставщик: "My Company"; Изготовитель: "My Company"; Секция: "GSDriver_DDI"
#I087 Нет доверия к узлу драйвера, ранг изменен с 0x00002001 на 0x0000a001.
#I023 Действительная секция установки: [GSDriver_DDI.NT]. Ранг: 0x0000a001. Дата драйвера: 01/01/1601.
#-166 Функция установки устройства: DIF_SELECTBESTCOMPATDRV.
#I063 Установка выбранного драйвера из секции [GSDriver_DDI] в "c:\windows\inf\oem36.inf".
#I320 GUID класса устройства остается равным {FF646F80-8DEF-11D2-9449-00105A075F6B}.
#I060 Установка выбранного драйвера.
#I058 Выбран наиболее совместимый драйвер.
[2006/11/03 16:08:07 180.182]
#-199 Выполнение "C:\Work\GoldSphere\Driver\devcon.exe" с командной строкой: devcon.exe install GSDriver.inf PCI\VEN_1999
#I060 Установка выбранного драйвера.
#-019 Поиск идентификаторов аппаратуры: pci\ven_1999&dev_0002&subsys_00000080&rev_00,pci\ven_1999&dev_0002&subsys_00000080,pci\ven_1999&dev_0002&cc_070780,pci\ven_1999&dev_0002&cc_0707
#-018 Поиск совместимых идентификаторов: pci\ven_1999&dev_0002&rev_00,pci\ven_1999&dev_0002,pci\ven_1999&cc_070780,pci\ven_1999&cc_0707,pci\ven_1999,pci\cc_070780,pci\cc_0707
#I022 Найдено "PCI\VEN_1999&DEV_0002" в c:\work\goldsphere\driver\gsdriver.inf; Устройство: "GoldSphere Trunk"; Драйвер: "GoldSphere Trunk"; Поставщик: "My Company"; Изготовитель: "My Company"; Секция: "GSDriver_DDI"
#I087 Нет доверия к узлу драйвера, ранг изменен с 0x00002001 на 0x0000a001.
#I023 Действительная секция установки: [GSDriver_DDI.NT]. Ранг: 0x0000a001. Дата драйвера: 01/01/1601.
#-166 Функция установки устройства: DIF_SELECTBESTCOMPATDRV.
#I063 Установка выбранного драйвера из секции [GSDriver_DDI] в "c:\work\goldsphere\driver\gsdriver.inf".
#I320 GUID класса устройства остается равным {FF646F80-8DEF-11D2-9449-00105A075F6B}.
#I060 Установка выбранного драйвера.
#I058 Выбран наиболее совместимый драйвер.
#-124 Выполняется только копирующая установка "PCI\VEN_1999&DEV_0002&SUBSYS_00000080&REV_00\4&BC67B8D&0&00F0".
#E360 Неподписанный или неправильно подписанный файл "c:\work\goldsphere\driver\gsdriver.inf" для драйвера "GoldSphere Trunk" будет установлен (Политика=Игнорировать). Ошибка 0xe000022f: INF стороннего производителя не содержит информации о подписи.
#-024 Копирование файла "c:\work\goldsphere\driver\GSDriver.sys" в "C:\WINDOWS\System32\Drivers\GSDriver.sys".
#E360 Неподписанный или неправильно подписанный файл "c:\work\goldsphere\driver\GSDriver.sys" для драйвера "GoldSphere Trunk" будет установлен (Политика=Игнорировать). Ошибка 0xe000022f: INF стороннего производителя не содержит информации о подписи.
#-166 Функция установки устройства: DIF_REGISTER_COINSTALLERS.
#I056 Совместные установщики зарегистрированы.
#-166 Функция установки устройства: DIF_INSTALLINTERFACES.
#-011 Установка секции [GSDriver_DDI.NT.Interfaces] из "c:\work\goldsphere\driver\gsdriver.inf".
#I054 Интерфейсы установлены.
#-166 Функция установки устройства: DIF_INSTALLDEVICE.
#I123 Выполняется полная установка "PCI\VEN_1999&DEV_0002&SUBSYS_00000080&REV_00\4&BC67B8D&0&00F0".
#E360 Неподписанный или неправильно подписанный файл "c:\work\goldsphere\driver\gsdriver.inf" для драйвера "GoldSphere Trunk" будет установлен (Политика=Игнорировать). Ошибка 0xe000022f: INF стороннего производителя не содержит информации о подписи.
#I121 Установка устройства "PCI\VEN_1999&DEV_0002&SUBSYS_00000080&REV_00\4&BC67B8D&0&00F0" успешно завершена.
[2006/11/03 16:08:07 180.186]
#-199 Выполнение "C:\Work\GoldSphere\Driver\devcon.exe" с командной строкой: devcon.exe install GSDriver.inf PCI\VEN_1999
#I060 Установка выбранного драйвера.
#-019 Поиск идентификаторов аппаратуры: pci\ven_1999
#-166 Функция установки устройства: DIF_SELECTBESTCOMPATDRV.
#W059 Ошибка при подборе наиболее совместимого драйвера. Ошибка 0xe0000228: Для этого устройства отсутствую совместимые драйверы.
#W157 Ошибка установщика по умолчанию. Ошибка 0xe0000228: Для этого устройства отсутствую совместимые драйверы.
#-166 Функция установки устройства: DIF_INSTALLDEVICEFILES.
#I125 Установка пустого драйвера для "ROOT\MyClass\0000".
#E122 Не удалось установить устройство. Ошибка 0xe0000203: Для элемента или информационного пакета устройства не выбран драйвер.
#E157 Ошибка установщика по умолчанию. Ошибка 0xe0000203: Для элемента или информационного пакета устройства не выбран драйвер.
#I060 Установка выбранного драйвера.
#I125 Установка пустого драйвера для "ROOT\MyClass\0000".
#I121 Установка устройства "ROOT\MyClass\0000" успешно завершена.
Однако надо признать что драйвер встает все же и ПО с платой работает корректно, но вот как прибить это лишнее устроство через тот же devcon, я не пойму.
devcon remove может прибить токо оба устройства
Вот вроде такая маленькая ложка дегтя , а все портит, можно конечно и руками прибить, но тогда легче уж и руками и драйвер ставить.
И еще такой вопрос, кто-нибудь пробовал изучать работу того же devcon? Можно его из под студии собрать что бы потрасировать полноценно. А то только как драйвер — очень не удобно.
Просто есть идея сделать там приписку что бы он мог тупо прибивать это ненавистный ROOT\MyClass\xxxx, а то щас он може прибить токо все устройства класса MyClass.
Я конечно читал уже обсуждения подобных проблем, но что-то ответов там для себя не нашел.
Может есть другие примеры кроме devcon (ибо его функционал конечно избыточен)? С нуля если честно вникать не хотелось во все эти тонкости, хотя видимо придется