Григорий
Гость
|
|
« : 16-08-2004 15:08 » |
|
Уважаемые Спецы, помогите! Есть устройство на USB, драйвер к нему почти готов, осталось разобраться с поддержкой драйвером нескольких устройств. Но проблема - при подключении второго устройства я не получаю вызова AddDevice ?? Я для проверки запустил Win2000. Первое устройство загружается нормально. В Device manager проблем нет. А вот при подключении второго появляется диалог с надписью типа "Установка новых устройств закончена. Новые парамтеры вступят в силу только после перезагрузки системы", а в Device Manager отображается как "Другие устройства" (т.е. со значком вопроса) с кодом ошибки 14 и предупреждением, что устройство будет работать нормально только после перезагрузки системы Есть какие-нибудь соображения или предположения на этот счет ? С уважением, Григорий
|
|
|
Записан
|
|
|
|
mad
Гость
|
|
« Ответ #1 : 16-08-2004 15:55 » |
|
Мда, сколько уже народа погорело с такими простыми вещами..... посмотри на трейс вызова iocreatesymboliclink....немного подумай.....и поищи аналогичные ситуации.....И то, что не запускается эдддевайс - вылет с ошибкой из ентри. А то что девайс отображается в другом классе, опять же следствие вылета из энтри. Я например на CyUsb уже после adddevice при mn_start_device перешиваю вендора и девид (а до этого девайс показывается с другим именем), эти все извращения зависят от десигна девайса. короче, смотри внимательно ентри.
|
|
|
Записан
|
|
|
|
Григорий
Гость
|
|
« Ответ #2 : 16-08-2004 18:04 » |
|
Если честно, то не понял про что ты пишешь. При чем тут ентри. Загрузка первого устройства проходит успешно и дальнейшая работа с драйвером то же. Во вторых, при подключении второго устройства ентри уже не вызывается. Должен вызываться только AddDevice. В третьих - перешивание идентификаторов - это пордоньте не выход, т.к. создается уже новое устройство. В четвертых "немного подумай.....и поищи аналогичные ситуации...." - это вообще про что >>А то что девайс отображается в другом классе, опять же следствие вылета из энтри Это вовсе не следствие вылета из энтри, а может быть результатом неправильной работы внутри функции StartDevice и т.п. и т.д.
|
|
|
Записан
|
|
|
|
mad
Гость
|
|
« Ответ #3 : 17-08-2004 08:33 » |
|
Во вторых, при подключении второго устройства ентри уже не вызывается
ты ошибаешься
|
|
|
Записан
|
|
|
|
Григорий
Гость
|
|
« Ответ #4 : 17-08-2004 08:39 » |
|
Во-первых, проверь. Во-вторых - читай DDK и Walter Oney.
|
|
|
Записан
|
|
|
|
mad
Гость
|
|
« Ответ #5 : 17-08-2004 08:39 » |
|
при обнаружении на шине устройства всегда загружается драйвер, ассоциированный и идентификаторами устройства вне зависимости от того представлен ли его образ в памяти. Я тебя опять отсылаю посмотреть ентри.
|
|
|
Записан
|
|
|
|
Григорий
Гость
|
|
« Ответ #6 : 17-08-2004 08:41 » |
|
Если не хочешь верить, возьми SoftICE и посмотри.
|
|
|
Записан
|
|
|
|
mad
Гость
|
|
« Ответ #7 : 17-08-2004 08:42 » |
|
=) хех. Спасибо! Обязательно почитаю!!
|
|
|
Записан
|
|
|
|
mad
Гость
|
|
« Ответ #8 : 17-08-2004 08:43 » |
|
Я делал поддержку клонов для USB и на PCI.
|
|
|
Записан
|
|
|
|
Григорий
Гость
|
|
« Ответ #9 : 17-08-2004 08:45 » |
|
Только не надо так томно вздыхать. Если у тебя все время вызывается DriverEntry это означает только то, что ты меняешь Vid&Pid устройства, а значит подключаешь к шине уже новое для системы устройство, а не второй экземпляр устройство.
|
|
|
Записан
|
|
|
|
mad
Гость
|
|
« Ответ #10 : 17-08-2004 08:45 » |
|
А то, что у тебя дествительно энтри не вызавается, это говорит о том, что ты (или кто то там) и инф неправильно накатал.
|
|
|
Записан
|
|
|
|
mad
Гость
|
|
« Ответ #11 : 17-08-2004 08:47 » |
|
Хорошо, дай реф на они или ддк, где говорится, что должно быть как ты говоришь =)
|
|
|
Записан
|
|
|
|
mad
Гость
|
|
« Ответ #12 : 17-08-2004 08:47 » |
|
Хех, все у меня работало, не веришь заходи на www.foreview.ru
|
|
|
Записан
|
|
|
|
mad
Гость
|
|
« Ответ #13 : 17-08-2004 08:48 » |
|
=)
|
|
|
Записан
|
|
|
|
Григорий
Гость
|
|
« Ответ #14 : 17-08-2004 08:54 » |
|
У тебя что DDK не установлен. Тогда установи. Смотри главу про PnP. Сайт красивый (ничего не могу сказать). Но исходников там нет, посмотреть что у тебя там работает . А они могу кинуть на мыло (но он здоровый гад, если с примерами). и еще раз - если driverentry вызывается повторно для второго подключаемого устройства (с одинаковыми id) то значит действительно что не то с inf или еще с чем. И напоследок - почему ты такой злой ??
|
|
|
Записан
|
|
|
|
mad
Гость
|
|
« Ответ #15 : 17-08-2004 08:56 » |
|
Итересно, как ядро должно узнать об адресе твоей adddevice, адрес которой ты прописываешь в driver_obj в ентри =))))
|
|
|
Записан
|
|
|
|
mad
Гость
|
|
« Ответ #16 : 17-08-2004 08:57 » |
|
Ладно, надоело, спасибо за советы, обязательно почитаю всю вышеизложенную литературу=)
|
|
|
Записан
|
|
|
|
Григорий
Гость
|
|
« Ответ #17 : 17-08-2004 09:00 » |
|
Так:
!!!! >>>> DriverObject->DriverExtension->AddDevice = AddDevice;
DriverObject->DriverUnload = DriverUnload; DriverObject->MajorFunction[IRP_MJ_CREATE] = DispatchCreate; DriverObject->MajorFunction[IRP_MJ_CLOSE] = DispatchClose; DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchControl; DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp; .....
ты сам при вызове функции DriverEntry указываешь адрес функции AddDevice, которая как раз и вызывается PnP Manager после подключения к шине нового (такого же) устройства. Более подробно вся эта катавасия с PnP запросами как раз и описана в DDK и у Они.
|
|
|
Записан
|
|
|
|
Григорий
Гость
|
|
« Ответ #18 : 17-08-2004 09:04 » |
|
Короче. Мы ушли от темы моей проблемы. Если мне все-таки последовать твоим советам и посмотреть DriverEntry, то он всегда возвращает STATUS_SUCCESS, т.к. в ней практически ничего не делается, кроме указания адресов функций и определения типа операционной системы. Поэтому DriverEntry из рассмотрения выпадает. Есть еще идеи. Постоянно менять Id я не хочу. Это всего лишь временный выход. Я хочу все таки найти причину отсутсвия вызова AddDevice после подключения второго устройства
|
|
|
Записан
|
|
|
|
mad
Гость
|
|
« Ответ #19 : 17-08-2004 09:06 » |
|
хех, мне поигать хочется =)
ок, ты можешь представить как будет работать драйвер, например, с одной твоей структурой девайс екстеншн?=))) У тебя есть переменные которые надо где то хранить? Пусть например, ты хранишь их в екстеншн.....=)
|
|
|
Записан
|
|
|
|
mad
Гость
|
|
« Ответ #20 : 17-08-2004 09:07 » |
|
учитывая, что указатель на екстеншн для одного имиджа один (входит в структ девайс обж кажись)....
|
|
|
Записан
|
|
|
|
mad
Гость
|
|
« Ответ #21 : 17-08-2004 09:09 » |
|
давай код ентри, действительно, что расуждать то...
|
|
|
Записан
|
|
|
|
mad
Гость
|
|
« Ответ #22 : 17-08-2004 09:10 » |
|
и попробуй еще переставить девайсы. Если ситуация будет аналогичная (в точности). то еще давай и инф
|
|
|
Записан
|
|
|
|
Григорий
Гость
|
|
« Ответ #23 : 17-08-2004 09:11 » |
|
Не понял чего тебе хочется Если ты имеешь в виду DriverExtension, то эта структура создается тобой в функции AddDevice и хранится в дальнейшем в fdo твоего устройства. Здесь ты хранишь свои пременные для каждого подключенного устройства
|
|
|
Записан
|
|
|
|
mad
Гость
|
|
« Ответ #24 : 17-08-2004 09:12 » |
|
И еще, у тебя может быть проблемы при MN_START_DEVICE. И возвразаться ошибка оттуда при крейте симлинки
|
|
|
Записан
|
|
|
|
Григорий
Гость
|
|
« Ответ #25 : 17-08-2004 09:19 » |
|
Со стартом все ок. Для второго устройства до него не доходит. Девайсы уже переставлял (вначале думал что прошивки разные). Абсолютно без разницы кто будет первым, а кто вторым.
|
|
|
Записан
|
|
|
|
Григорий
Гость
|
|
« Ответ #26 : 17-08-2004 09:21 » |
|
Я не использую создание символической ссылки. Просто создаю имя, на конце его номер (начиная с 0).
|
|
|
Записан
|
|
|
|
Григорий
Гость
|
|
« Ответ #27 : 17-08-2004 09:23 » |
|
Код DriverEntry я уже скидывал. Там только еще вывод текстовых строк, что вызвана функци DriverEntry.
|
|
|
Записан
|
|
|
|
mad
Гость
|
|
« Ответ #28 : 17-08-2004 10:24 » |
|
Я не видел. Если у тебя действительно не вызавается ентри для драйвера и ты мне тут голову не морочишь - давай инф
|
|
|
Записан
|
|
|
|
Григорий
Гость
|
|
« Ответ #29 : 17-08-2004 10:38 » |
|
DriverEntry смотри выше и внимательнее. Тебе голову никто не морочит. Вместо прериканий которые ты развел лучше бы подсказал, коль считаешь себы гуру. Вот инф:
;; UsbCan.inf
;--------- Version Section ---------------------------------------------------
[Version] Signature="$Chicago$" Provider=%ProviderName%
; If device fits one of the standard classes, use the name and GUID here, ; otherwise create your own device class and GUID as this example shows.
Class=UsbAdapterDeviceClass ClassGuid={D6252AE0-769E-11d8-9C69-0002B3031235}
;--------- SourceDiskNames and SourceDiskFiles Section -----------------------
; These sections identify source disks and files for installation. They are ; shown here as an example, but commented out.
[SourceDisksNames] 1 = "Kaskod Ltd (R) USB-CAN Communication Adapter Driver Package Installation Disc",,, ;1 = "Kaskod Ltd (R) USB-CAN Communication Adapter Driver Package Installation Disc",Disk1,,
[SourceDisksFiles] usbcan.sys = 1 ;usbcan.sys = 1,c:\windows\system32\drivers,
;--------- ClassInstall/ClassInstall32 Section -------------------------------
; Not necessary if using a standard class
; 9X Style [ClassInstall] Addreg=Class_AddReg
; NT Style [ClassInstall32] Addreg=Class_AddReg
[Class_AddReg] HKR,,,,%DeviceClassName% HKR,,Icon,,"-20"
;--------- DestinationDirs Section -------------------------------------------
[DestinationDirs] UsbCan_Files_Driver = 10,System32\Drivers
;--------- Manufacturer and Models Sections ----------------------------------
[Manufacturer] %MfgName%=Mfg0
[Mfg0] %DeviceDesc%=UsbCan_DDI, USB\VID_0700&PID_0001
;---------- DDInstall Sections ----------------------------------------------- ; --------- Windows 9X -----------------
; Experimentation has shown that DDInstall root names greater than 19 characters ; cause problems in Windows 98
[UsbCan_DDI] CopyFiles=UsbCan_Files_Driver AddReg=UsbCan_9X_AddReg
[UsbCan_9X_AddReg] HKR,,DevLoader,,*ntkern HKR,,NTMPDriver,,UsbCan.sys
; --------- Windows NT -----------------
[UsbCan_DDI.NT] CopyFiles=UsbCan_Files_Driver
[UsbCan_DDI.NT.Services] Addservice = UsbCan, 0x00000002, UsbCan_AddService
[UsbCan_AddService] DisplayName = %SvcDesc% ServiceType = 1 ; SERVICE_KERNEL_DRIVER StartType = 3 ; SERVICE_DEMAND_START ErrorControl = 1 ; SERVICE_ERROR_NORMAL ServiceBinary = %10%\System32\Drivers\UsbCan.sys LoadOrderGroup = Base
; --------- Files (common) -------------
[UsbCan_Files_Driver] UsbCan.sys
;--------- Strings Section ---------------------------------------------------
[Strings] ProviderName="Kaskod Ltd (R)" MfgName="Kaskod Ltd (R)" DeviceDesc="Kaskod Ltd (R) USB-CAN communication adapter" DeviceClassName="USB Peripheral Adapters" SvcDesc="USB-CAN (USB,WDM)"
|
|
|
Записан
|
|
|
|
|