В составе приложения есть драйвер виртуальной камеры, сделанный на основе TESTCAP драйвера из DDK, компилялся для WinXP. Проблему его установки в систему так решить и не удалось. Используются простые инсталляторы, в состав которых не входят возможности установки драйверов, поэтому нужно написать установку самому.
Установить драйвер в систему из контекстного меню install не удается. Тулза от Microsoft, которой рекомендуется делать инсталляшки драйверов для Windows, Driver Installation Tools (DPInst) не позволяет работать с неподписанными цифровой подписью Microsoft драйверами. Поэтому тут мы в пролете.
При использовании Setup API происходит такая ошибка:
UpdateDriverForPlugAndPlayDevices возвращает код ошибки 0xe0000203
в системном логе на это есть такая запись:
#E122 Device install failed. Error 0xe0000203: There is no driver selected for the device information set or element.
#E157 Default installer failed. Error 0xe0000203: There is no driver selected for the device information set or element.
Почему возникает и как ее исправить в моем случае так и не нашел.
Думал не хватает копирования inf файла, /т.к. девайса реального нету/, ф-ция SetupCopyOEMInf, да, копирует но эффекту не больше.
Дорогие инсталляторы обещают решение моих проблем, но... InstallShield 10.5 Premier $2,499.00 мне не купят
Кто как решает проблему установки драйверов и что мне делать в моем случае? Куда копать, есть идеи?
Здравствуйте, Andrew S, Вы писали:
_>>Кто как решает проблему установки драйверов и что мне делать в моем случае? Куда копать, есть идеи?
AS>Использовать поиск по форуму. Последовательность вызовов SetupDiXxx функций для этих целей тут приводилась неоднократно. Удачи.
Читал я, то что поиск по форуму выдает. Ошибка-то все-равно возникает.
Здравствуйте, william_j, Вы писали:
_>Здравствуйте, Andrew S, Вы писали:
_>>>Кто как решает проблему установки драйверов и что мне делать в моем случае? Куда копать, есть идеи?
AS>>Использовать поиск по форуму. Последовательность вызовов SetupDiXxx функций для этих целей тут приводилась неоднократно. Удачи.
_>Читал я, то что поиск по форуму выдает. Ошибка-то все-равно возникает.
Девайс в устройствах создается, ошибка при вызове функции установки драйвера для девайса.
AS>>Использовать поиск по форуму. Последовательность вызовов SetupDiXxx функций для этих целей тут приводилась неоднократно. Удачи.
_>Читал я, то что поиск по форуму выдает. Ошибка-то все-равно возникает.
Значит, не то читали. Была приведена последовательность без использования UpdateDriverForPlugAndPlayDevices.
Здравствуйте, Andrew S, Вы писали:
AS>>>Использовать поиск по форуму. Последовательность вызовов SetupDiXxx функций для этих целей тут приводилась неоднократно. Удачи.
_>>Читал я, то что поиск по форуму выдает. Ошибка-то все-равно возникает. AS>Значит, не то читали. Была приведена последовательность без использования UpdateDriverForPlugAndPlayDevices.
Andrew S, кинь, пожалуйста, в меня, ссылкой, где это написано, если помнишь еще.
AS>>>>Использовать поиск по форуму. Последовательность вызовов SetupDiXxx функций для этих целей тут приводилась неоднократно. Удачи.
_>>>Читал я, то что поиск по форуму выдает. Ошибка-то все-равно возникает. AS>>Значит, не то читали. Была приведена последовательность без использования UpdateDriverForPlugAndPlayDevices.
_>Andrew S, кинь, пожалуйста, в меня, ссылкой, где это написано, если помнишь еще.
Здравствуйте, Andrew S, Вы писали:
AS>>>>>Использовать поиск по форуму. Последовательность вызовов SetupDiXxx функций для этих целей тут приводилась неоднократно. Удачи.
_>>>>Читал я, то что поиск по форуму выдает. Ошибка-то все-равно возникает. AS>>>Значит, не то читали. Была приведена последовательность без использования UpdateDriverForPlugAndPlayDevices.
_>>Andrew S, кинь, пожалуйста, в меня, ссылкой, где это написано, если помнишь еще.
AS>Легко. http://gzip.rsdn.ru/Forum/?mid=116168
Чего-то не получается у меня...
Делаю вызовы, как написано, дохожу до вызова SetupDiEnumDriverInfo. (ищешь свой драйвер по строке description)
А она возвращает 259 — No more data is available.
На этом и останавливаемся. Чего может быть не так?
_>Чего-то не получается у меня... _>Делаю вызовы, как написано, дохожу до вызова SetupDiEnumDriverInfo. (ищешь свой драйвер по строке description) _>А она возвращает 259 — No more data is available. _>На этом и останавливаемся. Чего может быть не так?
Приведите пример кода, а так что-либо понять сложно.
Здравствуйте, Andrew S, Вы писали:
_>>Чего-то не получается у меня... _>>Делаю вызовы, как написано, дохожу до вызова SetupDiEnumDriverInfo. (ищешь свой драйвер по строке description) _>>А она возвращает 259 — No more data is available. _>>На этом и останавливаемся. Чего может быть не так?
AS>Приведите пример кода, а так что-либо понять сложно.
Вот кусок:
GetFullPathName(inf,MAX_PATH,InfPath,NULL);
do
{
if ( !SetupCopyOEMInf ( InfPath, NULL, SPOST_NONE, 0, NULL, 0, NULL, NULL ) )
break;
if (!SetupDiGetINFClass(InfPath,&ClassGUID,ClassName,sizeof(ClassName)/sizeof(ClassName[0]),0))
break;
DeviceInfoSet = SetupDiCreateDeviceInfoList(&ClassGUID,0);
if(DeviceInfoSet == INVALID_HANDLE_VALUE)
break;
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
if (!SetupDiCreateDeviceInfo(DeviceInfoSet, ClassName, &ClassGUID, NULL,
0, DICD_GENERATE_ID, &DeviceInfoData))
break;
if(!SetupDiRegisterDeviceInfo ( DeviceInfoSet, &DeviceInfoData, SPRDI_FIND_DUPS, NULL,
NULL, &DeviceInfoData ))
break;
if (!SetupDiBuildDriverInfoList(DeviceInfoSet, &DeviceInfoData, SPDIT_COMPATDRIVER))
break;
DWORD nCurDrv=0;
drv_info.cbSize = sizeof(SP_DRVINFO_DATA);
while ( SetupDiEnumDriverInfo ( DeviceInfoSet, &DeviceInfoData, SPDIT_COMPATDRIVER, nCurDrv, &drv_info ) )
{
int i=0;
++nCurDrv;
}
// if (!SetupDiCallClassInstaller(DIF_REGISTERDEVICE, DeviceInfoSet, &DeviceInfoData))
// break;
} while ( false );
_>>>Чего-то не получается у меня... _>>>Делаю вызовы, как написано, дохожу до вызова SetupDiEnumDriverInfo. (ищешь свой драйвер по строке description) _>>>А она возвращает 259 — No more data is available. _>>>На этом и останавливаемся. Чего может быть не так?
AS>>Приведите пример кода, а так что-либо понять сложно.
_>Вот кусок:
В целом понятно. Ошибки искать не хочется, попробуйте такую последовательность:
если правильно понимаю, то должно произойти копирование драйвера /sys файла/? ну или хотя бы в списке устройств появится информация о драйвере? дело в том, что ничего не происходит.
В том числе и последующее перечисление функциями SetupDiBuildDriverInfoList, SetupDiEnumDriverInfo возвращают пустой список.
Есть еще хоть какие либо предположения?
Да, с флагами Flags и FlagsEx эксперементировал. ни с каким никакого эффекта.
Re[12]: Создание setup для драйвера
От:
Аноним
Дата:
29.04.05 15:42
Оценка:
забыл, путь к файлу драйвера звполняется корректным значением.
Хм, а где сказано, что в DriverPath может быть путь к файлу драйвера? Там либо путь к каталогу, где лежат INF-файлы, либо путь к конкретному INF-файлу в случае DI_ENUMSINGLEINF. Копировать файл будет либо система, либо надо ставить DI_NOFILECOPY и копировать руками.
Здравствуйте, william_j, Вы писали:
_>В составе приложения есть драйвер виртуальной камеры, сделанный на основе TESTCAP драйвера из DDK, компилялся для WinXP. Проблему его установки в систему так решить и не удалось. Используются простые инсталляторы, в состав которых не входят возможности установки драйверов, поэтому нужно написать установку самому. _>Установить драйвер в систему из контекстного меню install не удается. Тулза от Microsoft, которой рекомендуется делать инсталляшки драйверов для Windows, Driver Installation Tools (DPInst) не позволяет работать с неподписанными цифровой подписью Microsoft драйверами. Поэтому тут мы в пролете. _>При использовании Setup API происходит такая ошибка: _>UpdateDriverForPlugAndPlayDevices возвращает код ошибки 0xe0000203 _>в системном логе на это есть такая запись: _>#E122 Device install failed. Error 0xe0000203: There is no driver selected for the device information set or element. _>#E157 Default installer failed. Error 0xe0000203: There is no driver selected for the device information set or element. _>Почему возникает и как ее исправить в моем случае так и не нашел. _>Думал не хватает копирования inf файла, /т.к. девайса реального нету/, ф-ция SetupCopyOEMInf, да, копирует но эффекту не больше. _>Дорогие инсталляторы обещают решение моих проблем, но... InstallShield 10.5 Premier $2,499.00 мне не купят
_>Кто как решает проблему установки драйверов и что мне делать в моем случае? Куда копать, есть идеи?
У меня есть драйвер виртуального диска и я тоже не могу ничего сделать!!!
Вылетаю либо на SetupCopyOEMInf, пишет что была установлена точка останова (int 3 гдето внутри функции, что ли?!),
либо SetupDiGetINFClass((PTSTR) AppPath, ClassGuid, (PTSTR) Path,sizeof(Path)/sizeof((PTSTR) Path[0]),0) матерится!
Вы не могли бы поделится опытом в этом мутном деле, если что, я мог бы прислать вам инф, может ошибка там?
В общем, что-то так и не получается у нас никакими средствами написать инсталляшку.
Мы хотим отдать умеющему человеку эту задачу. Желающие в ближайшее время заработать от $200 за решение этой маленькой задачки, пишите на ipopov (at) warelex.com
Да, вот что еще вспомнил... Была одна очень неприятная особенность. Какая то из SetupDi функций нормально отрабатывала только при компиляции в юникоде. Может, это поможет? Если нет — тогда см. ниже
_>В общем, что-то так и не получается у нас никакими средствами написать инсталляшку. _>Мы хотим отдать умеющему человеку эту задачу. Желающие в ближайшее время заработать от $200 за решение этой маленькой задачки, пишите на ipopov (at) warelex.com
От 200 Что _от_ — это хорошо. Сколько готовы отдать то, если не от, точно? И что вообще надо сделать. Отдельный бинарник, который будет заниматься инсталляцией\деинсталляцией, или что еще? Я в принципе попробовал — мой код на testcap отработал, драйвер установился и удалился.
Что есть. Имеются 2 функции. Одна принимает в себя идентификатор драйвера, путь к inf и указатель на BOOL, куда возвращается необходимость перезагрузки. Другая функция осуществляет поиск драйвера по идентификатору, и при желании убивает его. Написано все на С\С++, пример в виде консольного приложения. Если есть желание — пишите, может и сторгуемся Майл в профайле.