Использование SetupDi-installation functions
От: DenkaS Украина  
Дата: 24.07.05 11:55
Оценка:
Народ кто знает какой порядок вызова функций должен быть при инсталлировании драйвера USB — устройств?? Или подскажите пожалуйста где можно оную инфу найти и ознакомиться самому.Премного бдагодарен за оказанную помощь
Re: Использование SetupDi-installation functions
От: Andrew S Россия http://alchemy-lab.com
Дата: 24.07.05 14:00
Оценка:
DS>Народ кто знает какой порядок вызова функций должен быть при инсталлировании драйвера USB — устройств?? Или подскажите пожалуйста где можно оную инфу найти и ознакомиться самому.Премного бдагодарен за оказанную помощь

В ДДК есть пример. Ну и поиск по форуму.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: Использование SetupDi-installation functions
От: DenkaS Украина  
Дата: 25.07.05 07:42
Оценка:
Здравствуйте, Andrew S, Вы писали:

DS>>Народ кто знает какой порядок вызова функций должен быть при инсталлировании драйвера USB — устройств?? Или подскажите пожалуйста где можно оную инфу найти и ознакомиться самому.Премного бдагодарен за оказанную помощь


AS>В ДДК есть пример. Ну и поиск по форуму.

Я уже смотрел пример в DDK (Вы наверное имеете ввиду DevCon ) и здесь на форуме находил порядок вызовов. Но под XP DevCon ставит USB Universal driver хотя у меня драйвер TI DFU class driver то биш после вставки устройства в USB порт опять всплывает диалог New HardWare Wizard. А по той схеме что приводится в форуме вылет на функции SetupDiEnumDriverInfo . Еще такой нюанс устройство у меня композитное( в одном корпусе несколько устройств в моем случае 3)
Re[3]: Использование SetupDi-installation functions
От: Andrew S Россия http://alchemy-lab.com
Дата: 25.07.05 08:14
Оценка:
AS>>В ДДК есть пример. Ну и поиск по форуму.
DS>Я уже смотрел пример в DDK (Вы наверное имеете ввиду DevCon ) и здесь на форуме находил порядок вызовов. Но под XP DevCon ставит USB Universal driver хотя у меня драйвер TI DFU class driver то биш после вставки устройства в USB порт опять всплывает диалог New HardWare Wizard. А по той схеме что приводится в форуме вылет на функции SetupDiEnumDriverInfo . Еще такой нюанс устройство у меня композитное( в одном корпусе несколько устройств в моем случае 3)

Ну так вы посмотрите, какой там драйвер выбирается. Наверняка не тот, что вы подсовываете. Соответственно, измените алгоритм нахождения нужного драйвера в списке на свой.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[4]: Использование SetupDi-installation functions
От: DenkaS Украина  
Дата: 25.07.05 09:34
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>>>В ДДК есть пример. Ну и поиск по форуму.

DS>>Я уже смотрел пример в DDK (Вы наверное имеете ввиду DevCon ) и здесь на форуме находил порядок вызовов. Но под XP DevCon ставит USB Universal driver хотя у меня драйвер TI DFU class driver то биш после вставки устройства в USB порт опять всплывает диалог New HardWare Wizard. А по той схеме что приводится в форуме вылет на функции SetupDiEnumDriverInfo . Еще такой нюанс устройство у меня композитное( в одном корпусе несколько устройств в моем случае 3)

AS>Ну так вы посмотрите, какой там драйвер выбирается. Наверняка не тот, что вы подсовываете. Соответственно, измените алгоритм нахождения нужного драйвера в списке на свой.


Я вообще ни какой драйвер выбрать не могу. У меня вылет на функции SetupDiEnumDriverInfo с кодом ошибки ERROR_NO_MORE_ITEMS при первой же попытке вызвать эту функцию.(переменная что принемает описаловку драйвера ни чего не содержит) Такое ощущение что не создается вообще ни какого списка. Я уже и с параметрами функций эксперементировал.... глухо. Если не трудно то подскажите в чем промах?! Код мой следующий:
hDevList = SetupDiCreateDeviceInfoList(&UsbGuid,0);
if( hDevList==INVALID_HANDLE_VALUE)
{
DWORD dwError = GetLastError();
}

if( !SetupDiClassNameFromGuid(&UsbGuid,chClassName,MAX_PATH,&dwRequiredSize) )
{
DWORD dwError = GetLastError();
}

SP_DEVINFO_DATA DeviceInfoData;
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);

if( !SetupDiCreateDeviceInfo(hDevList,"Vid_0554&Pid_1002&Mi_04",&UsbGuid,"TI DFU class driver",0,DICD_GENERATE_ID,&DeviceInfoData)) // "TI DFU class driver",NULL,DICD_GENERATE_ID,&DeviceInfoData
{
DWORD dwError = GetLastError();
switch( dwError )
{
case ERROR_CLASS_MISMATCH:
MessageBox(NULL,"ERROR_CLASS_MISMATCH","Error",MB_OK);
break;
case ERROR_DEVINST_ALREADY_EXISTS:
MessageBox(NULL,"ERROR_DEVINST_ALREADY_EXISTS","Error",MB_OK);
break;
case ERROR_INVALID_USER_BUFFER:
MessageBox(NULL,"ERROR_INVALID_USER_BUFFER","Error",MB_OK);
break;
default:
MessageBox(NULL,"Unknow Error","Error",MB_OK);
}
}

SP_DEVINFO_DATA DupDeviceInfoData;
DupDeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
//SPRDI_FIND_DUPS,NULL,NULL,&DupDeviceInfoData
if( !SetupDiRegisterDeviceInfo(hDevList,&DeviceInfoData,0,NULL,0,NULL) )
{
DWORD dwError = GetLastError();
switch( dwError )
{
case ERROR_DI_DO_DEFAULT:
MessageBox(NULL,"ERROR_DI_DO_DEFAULT","Error",MB_OK);
break;

default:
MessageBox(NULL,"Unknow Error Terminate instalation application","Error",MB_OK);
}

}

SP_DEVINSTALL_PARAMS DeviceInstallParams;
DeviceInstallParams.cbSize = sizeof( SP_DEVINSTALL_PARAMS );
DeviceInstallParams.Flags = DI_ENUMSINGLEINF | DI_QUIETINSTALL | DI_COMPAT_FROM_CLASS ; // DI_ENUMSINGLEINF
DeviceInstallParams.FlagsEx = 0;
DeviceInstallParams.hwndParent = NULL;
DeviceInstallParams.InstallMsgHandler = NULL;
DeviceInstallParams.InstallMsgHandlerContext = NULL;
strcpy(DeviceInstallParams.DriverPath,"D:\\WORK\\PSSDK\\Research\\Microphone\\CommUCom\\html2\\cab\\dfuusb.inf");
DeviceInstallParams.FileQueue = NULL;
DeviceInstallParams.ClassInstallReserved = 0;


if(!SetupDiSetDeviceInstallParams(hDevList,&DeviceInfoData,&DeviceInstallParams))
{
DWORD dwError = GetLastError();
}

if( !SetupDiBuildDriverInfoList(hDevList,&DeviceInfoData,SPDIT_CLASSDRIVER ) )
{
DWORD dwError = GetLastError();
}

DWORD nCurDrv=0;
SP_DRVINFO_DATA drv_info;
drv_info.cbSize = sizeof(SP_DRVINFO_DATA);
while ( !SetupDiEnumDriverInfo ( hDevList, &DeviceInfoData , SPDIT_CLASSDRIVER, nCurDrv, &drv_info) )
{
if( ERROR_NO_MORE_ITEMS == GetLastError())
break;
// Finf driver
++nCurDrv;
}

// if( !SetupDiGetDriverInfoDetail(hDevList,&DeviceInfoData,&drv_info,0,sizeof(PSP_DRVINFO_DETAIL_DATA),0) )
// {
// DWORD dwError = GetLastError();
// }

drv_info.Reserved = 0;
if( !SetupDiSetSelectedDriver( hDevList, &DeviceInfoData,&drv_info ) )
{
DWORD dwError = GetLastError();

}


if(!SetupDiCallClassInstaller(DIF_INSTALLDEVICE,hDevList,&DeviceInfoData))
{
DWORD dwError = GetLastError();
}

if(!SetupDiCallClassInstaller(DIF_REGISTER_COINSTALLERS,hDevList,&DeviceInfoData))
{
DWORD dwError = GetLastError();
}

if(!SetupDiCallClassInstaller(DIF_INSTALLINTERFACES,hDevList,&DeviceInfoData))
{
DWORD dwError = GetLastError();
}


if( !SetupDiInstallDevice(hDevList,&DeviceInfoData) )
{
DWORD dwError = GetLastError();
}


SP_DEVINSTALL_PARAMS DeviceInstallParam;
DeviceInstallParam.cbSize = sizeof( SP_DEVINSTALL_PARAMS );
if( !SetupDiGetDeviceInstallParams(hDevList,&DeviceInfoData,&DeviceInstallParam) )
{
DWORD dwError = GetLastError();
}

SetupDiDestroyDeviceInfoList( hDevList );
Re[5]: Использование SetupDi-installation functions
От: Andrew S Россия http://alchemy-lab.com
Дата: 25.07.05 10:00
Оценка:
AS>>Ну так вы посмотрите, какой там драйвер выбирается. Наверняка не тот, что вы подсовываете. Соответственно, измените алгоритм нахождения нужного драйвера в списке на свой.

DS>Я вообще ни какой драйвер выбрать не могу. У меня вылет на функции SetupDiEnumDriverInfo с кодом ошибки ERROR_NO_MORE_ITEMS при первой же попытке вызвать эту функцию.(переменная что принемает описаловку драйвера ни чего не содержит) Такое ощущение что не создается вообще ни какого списка. Я уже и с параметрами функций эксперементировал.... глухо. Если не трудно то подскажите в чем промах?! Код мой следующий:


1. Вы этот код вызываете после подключения устройства? Если да, тогда собственно новый device скорее всего уже добавлен, вам надо лишь найти его в неизвестных устройствах. И далее оперировать с ним. Посмотрите в DevMgr — там устройство уже добавлено после его подключения?
2. Код регистрации устройства в связи с (1) вызывает большие сомнения.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.