Создание setup для драйвера
От: william_j  
Дата: 21.04.05 09:30
Оценка:
В составе приложения есть драйвер виртуальной камеры, сделанный на основе 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 мне не купят

Кто как решает проблему установки драйверов и что мне делать в моем случае? Куда копать, есть идеи?
Re: Создание setup для драйвера
От: Andrew S Россия http://alchemy-lab.com
Дата: 21.04.05 11:08
Оценка:
_>Кто как решает проблему установки драйверов и что мне делать в моем случае? Куда копать, есть идеи?

Использовать поиск по форуму. Последовательность вызовов SetupDiXxx функций для этих целей тут приводилась неоднократно. Удачи.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: Создание setup для драйвера
От: william_j  
Дата: 21.04.05 12:40
Оценка:
Здравствуйте, Andrew S, Вы писали:

_>>Кто как решает проблему установки драйверов и что мне делать в моем случае? Куда копать, есть идеи?


AS>Использовать поиск по форуму. Последовательность вызовов SetupDiXxx функций для этих целей тут приводилась неоднократно. Удачи.


Читал я, то что поиск по форуму выдает. Ошибка-то все-равно возникает.
Re[3]: Создание setup для драйвера
От: william_j  
Дата: 21.04.05 12:42
Оценка:
Здравствуйте, william_j, Вы писали:

_>Здравствуйте, Andrew S, Вы писали:


_>>>Кто как решает проблему установки драйверов и что мне делать в моем случае? Куда копать, есть идеи?


AS>>Использовать поиск по форуму. Последовательность вызовов SetupDiXxx функций для этих целей тут приводилась неоднократно. Удачи.


_>Читал я, то что поиск по форуму выдает. Ошибка-то все-равно возникает.


Девайс в устройствах создается, ошибка при вызове функции установки драйвера для девайса.
Re[3]: Создание setup для драйвера
От: Andrew S Россия http://alchemy-lab.com
Дата: 21.04.05 13:45
Оценка:
AS>>Использовать поиск по форуму. Последовательность вызовов SetupDiXxx функций для этих целей тут приводилась неоднократно. Удачи.

_>Читал я, то что поиск по форуму выдает. Ошибка-то все-равно возникает.

Значит, не то читали. Была приведена последовательность без использования UpdateDriverForPlugAndPlayDevices.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[4]: Создание setup для драйвера
От: william_j  
Дата: 21.04.05 15:02
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>>>Использовать поиск по форуму. Последовательность вызовов SetupDiXxx функций для этих целей тут приводилась неоднократно. Удачи.


_>>Читал я, то что поиск по форуму выдает. Ошибка-то все-равно возникает.

AS>Значит, не то читали. Была приведена последовательность без использования UpdateDriverForPlugAndPlayDevices.

Andrew S, кинь, пожалуйста, в меня, ссылкой, где это написано, если помнишь еще.
Re[5]: Создание setup для драйвера
От: Andrew S Россия http://alchemy-lab.com
Дата: 21.04.05 16:17
Оценка:
AS>>>>Использовать поиск по форуму. Последовательность вызовов SetupDiXxx функций для этих целей тут приводилась неоднократно. Удачи.

_>>>Читал я, то что поиск по форуму выдает. Ошибка-то все-равно возникает.

AS>>Значит, не то читали. Была приведена последовательность без использования UpdateDriverForPlugAndPlayDevices.

_>Andrew S, кинь, пожалуйста, в меня, ссылкой, где это написано, если помнишь еще.


Легко. http://gzip.rsdn.ru/Forum/?mid=116168
Автор: Alex Fedotov
Дата: 17.10.02

Удачи.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[6]: Создание setup для драйвера
От: william_j  
Дата: 22.04.05 08:34
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>>>>>Использовать поиск по форуму. Последовательность вызовов SetupDiXxx функций для этих целей тут приводилась неоднократно. Удачи.


_>>>>Читал я, то что поиск по форуму выдает. Ошибка-то все-равно возникает.

AS>>>Значит, не то читали. Была приведена последовательность без использования UpdateDriverForPlugAndPlayDevices.

_>>Andrew S, кинь, пожалуйста, в меня, ссылкой, где это написано, если помнишь еще.


AS>Легко. http://gzip.rsdn.ru/Forum/?mid=116168
Автор: Alex Fedotov
Дата: 17.10.02

AS>Удачи.

Спасибо! Именно такой не пробовал, попробую. Жаль, что сразу не нашел.
Re[7]: Создание setup для драйвера
От: william_j  
Дата: 28.04.05 11:24
Оценка:
Чего-то не получается у меня...
Делаю вызовы, как написано, дохожу до вызова SetupDiEnumDriverInfo. (ищешь свой драйвер по строке description)
А она возвращает 259 — No more data is available.
На этом и останавливаемся. Чего может быть не так?
Re[8]: Создание setup для драйвера
От: Andrew S Россия http://alchemy-lab.com
Дата: 28.04.05 14:25
Оценка:
_>Чего-то не получается у меня...
_>Делаю вызовы, как написано, дохожу до вызова SetupDiEnumDriverInfo. (ищешь свой драйвер по строке description)
_>А она возвращает 259 — No more data is available.
_>На этом и останавливаемся. Чего может быть не так?

Приведите пример кода, а так что-либо понять сложно.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[9]: Создание setup для драйвера
От: william_j  
Дата: 28.04.05 15:01
Оценка:
Здравствуйте, 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 );
Re[10]: Создание setup для драйвера
От: Andrew S Россия http://alchemy-lab.com
Дата: 28.04.05 20:03
Оценка:
_>>>Чего-то не получается у меня...
_>>>Делаю вызовы, как написано, дохожу до вызова SetupDiEnumDriverInfo. (ищешь свой драйвер по строке description)
_>>>А она возвращает 259 — No more data is available.
_>>>На этом и останавливаемся. Чего может быть не так?

AS>>Приведите пример кода, а так что-либо понять сложно.


_>Вот кусок:


В целом понятно. Ошибки искать не хочется, попробуйте такую последовательность:

SetupDiGetINFClass
SetupDiCreateDeviceInfoList
SetupDiCreateDeviceInfo
SetupDiCallClassInstaller(DIF_REGISTERDEVICE) | SetupDiRegisterDeviceInfo
SetupDiSetDeviceInstallParams
{SetupDiBuildDriverInfoList(SPDIT_CLASSDRIVER)
SetupDiEnumDriverInfo(SPDIT_CLASSDRIVER)
SetupDiGetDriverInfoDetail} находим нужный драйвер
SetupDiSetSelectedDriver
SetupDiCallClassInstaller(DIF_REGISTER_COINSTALLERS)
SetupDiCallClassInstaller(DIF_INSTALLINTERFACES)
SetupDiCallClassInstaller(DIF_INSTALLDEVICE)
SetupDiInstallDevice
SetupDiGetDeviceInstallParams - определяем необходимость перезагрузки
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[11]: Создание setup для драйвера
От: Аноним  
Дата: 29.04.05 15:31
Оценка:
Здравствуйте, Andrew S, решается та же проблема /то же проект/:

доходим до вызова SetupDiSetDeviceInstallParams. передаем туда заполненную структуру:
installParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS);
installParams.Flags = DI_ENUMSINGLEINF | DI_COMPAT_FROM_CLASS | DI_QUIETINSTALL;
installParams.FlagsEx = 0;
installParams.hwndParent = NULL;
installParams.InstallMsgHandler = NULL;
installParams.InstallMsgHandlerContext = NULL;
installParams.FileQueue = NULL;
installParams.ClassInstallReserved = NULL;
installParams.Reserved = 0;

если правильно понимаю, то должно произойти копирование драйвера /sys файла/? ну или хотя бы в списке устройств появится информация о драйвере? дело в том, что ничего не происходит.
В том числе и последующее перечисление функциями SetupDiBuildDriverInfoList, SetupDiEnumDriverInfo возвращают пустой список.
Есть еще хоть какие либо предположения?
Да, с флагами Flags и FlagsEx эксперементировал. ни с каким никакого эффекта.
Re[12]: Создание setup для драйвера
От: Аноним  
Дата: 29.04.05 15:42
Оценка:
забыл, путь к файлу драйвера звполняется корректным значением.

wcscpy ( installParams.DriverPath, DrvPath );
Re[13]: Создание setup для драйвера
От: emusic Франция https://software.muzychenko.net/ru
Дата: 01.05.05 15:13
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>забыл, путь к файлу драйвера звполняется корректным значением.


А>
А>wcscpy ( installParams.DriverPath, DrvPath );
А>


Хм, а где сказано, что в DriverPath может быть путь к файлу драйвера? Там либо путь к каталогу, где лежат INF-файлы, либо путь к конкретному INF-файлу в случае DI_ENUMSINGLEINF. Копировать файл будет либо система, либо надо ставить DI_NOFILECOPY и копировать руками.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Re: Создание setup для драйвера
От: Plumbum Украина  
Дата: 04.05.05 16:44
Оценка:
Здравствуйте, 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) матерится!

Вы не могли бы поделится опытом в этом мутном деле, если что, я мог бы прислать вам инф, может ошибка там?

Заранее огромное спасибо!
Re[14]: Создание setup для драйвера
От: william_j  
Дата: 05.05.05 13:50
Оценка:
В общем, что-то так и не получается у нас никакими средствами написать инсталляшку.
Мы хотим отдать умеющему человеку эту задачу. Желающие в ближайшее время заработать от $200 за решение этой маленькой задачки, пишите на ipopov (at) warelex.com
Re[15]: Создание setup для драйвера
От: Andrew S Россия http://alchemy-lab.com
Дата: 05.05.05 15:21
Оценка:
Да, вот что еще вспомнил... Была одна очень неприятная особенность. Какая то из SetupDi функций нормально отрабатывала только при компиляции в юникоде. Может, это поможет? Если нет — тогда см. ниже


_>В общем, что-то так и не получается у нас никакими средствами написать инсталляшку.

_>Мы хотим отдать умеющему человеку эту задачу. Желающие в ближайшее время заработать от $200 за решение этой маленькой задачки, пишите на ipopov (at) warelex.com


От 200 Что _от_ — это хорошо. Сколько готовы отдать то, если не от, точно? И что вообще надо сделать. Отдельный бинарник, который будет заниматься инсталляцией\деинсталляцией, или что еще? Я в принципе попробовал — мой код на testcap отработал, драйвер установился и удалился.

Что есть. Имеются 2 функции. Одна принимает в себя идентификатор драйвера, путь к inf и указатель на BOOL, куда возвращается необходимость перезагрузки. Другая функция осуществляет поиск драйвера по идентификатору, и при желании убивает его. Написано все на С\С++, пример в виде консольного приложения. Если есть желание — пишите, может и сторгуемся Майл в профайле.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.