progman_rus
Интересующийся
Offline
|
|
« : 06-11-2010 17:33 » |
|
Дали железку USB, дали два файла sys и inf и сказали: "ты программист - вот и пиши". И не описания, ни инструкции, ни контакта к разработчикам железки - секретность, типа (((
Ну, я программно установщик драйвера в систему написал. В списке оборудования, по крайней мере, устройство появилось. И вот полдня не знаю, что дальше делать.
Самое плохое, что бмп, какие там функции внутри - дизасмом смотрел, но мало что пока понял, думал там экспортные функции, как в dll лежат - ан нет. В общем, для начала, как его загрузить в win32 приложении и хоть что-то вызвать?
Читал тут на форуме, что сначала надо
CreateFile HANDLE hDevice = CreateFile ( szDeviceName ..... ); а затем DeviceIoControl
Так szDeviceName - как его получить?
Когда железку установил, то опытным путем выяснил, что HardwareID у нее "usb\\vid_7777&pid_7777" Опять же, не знаю, как его получать - я в свойствах установленной железки подсмотрел )
В общем, парни, направьте, пожалуйста, в верную сторону, а то начальство результатов требует.
|
|
« Последнее редактирование: 06-11-2010 17:57 от Sel »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #1 : 06-11-2010 17:47 » |
|
progman_rus, что за железка и что она делает ? И любопытства ради напиши названия упомянутых *.sys и *.inf. Меня терзают смутные сомнения (с) )))
|
|
|
Записан
|
|
|
|
Sel
Злобный
Администратор
Offline
|
|
« Ответ #2 : 06-11-2010 17:57 » |
|
progman_rus, пиши по-русски. Следующий подобный олбанский пост удалю к черту.
|
|
|
Записан
|
Слово не воробей. Всё не воробей, кроме воробья.
|
|
|
progman_rus
Интересующийся
Offline
|
|
« Ответ #3 : 06-11-2010 18:31 » |
|
Алексей1153++, USB железка к ней через 70пиновый разъем кнопки с лампочками подключаются и через драйвер идет управления поджигом лампочек и опрос на нажатие кнопок два файла DGDriver.sys и DGDriver.inf вот код инф файла ;--------- Version Section ---------------------------------------------------
[Version] Signature="$CHICAGO$" Provider=%ProviderName%
Class=MicrogameDevices ClassGUID={EB1BCDC2-4151-4b09-94AA-E7BE0A77D1AF}
;--------- 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 = "Install Disk",Disk1,,
;[SourceDisksFiles] ;DGDriver.sys = 1,,
;--------- 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,,"-5"
;--------- DestinationDirs Section -------------------------------------------
[DestinationDirs] DGDriver_Files_Driver = 10,System32\Drivers
;--------- Manufacturer and Models Sections ----------------------------------
[Manufacturer] %MfgName%=Mfg0
[Mfg0] %DeviceDesc%=DGDriver_DDI, USB\VID_7777&PID_7777
;---------- DDInstall Sections ----------------------------------------------- ; --------- Windows 9X -----------------
; Experimentation has shown that DDInstall root names greater than 19 characters ; cause problems in Windows 98
[DGDriver_DDI] CopyFiles=DGDriver_Files_Driver AddReg=DGDriver_9X_AddReg
[DGDriver_9X_AddReg] HKR,,DevLoader,,*ntkern HKR,,NTMPDriver,,DGDriver.sys
; --------- Windows NT -----------------
[DGDriver_DDI.NT] CopyFiles=DGDriver_Files_Driver
[DGDriver_DDI.NT.Services] Addservice = DGDriver, 0x00000002, DGDriver_AddService
[DGDriver_AddService] DisplayName = %SvcDesc% ServiceType = 1 ; SERVICE_KERNEL_DRIVER StartType = 3 ; SERVICE_DEMAND_START ErrorControl = 1 ; SERVICE_ERROR_NORMAL ServiceBinary = %10%\System32\Drivers\DGDriver.sys
; --------- Files (common) -------------
[DGDriver_Files_Driver] DGDriver.sys
;--------- Strings Section ---------------------------------------------------
[Strings] ProviderName="Novomatic LTD" MfgName="Novomatic LTD" DeviceDesc="Novomatic Controller USB" DeviceClassName="Novomatic USB Devices" SvcDesc="Novomatic Device Service"
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #4 : 06-11-2010 19:21 » |
|
Задача-то вообще какая?
|
|
|
Записан
|
|
|
|
progman_rus
Интересующийся
Offline
|
|
« Ответ #5 : 06-11-2010 20:20 » |
|
задача? в идеале научиться управлять железкой через драйвер, но не имея документации на функции драйвера это имба.
так что для начала разобраться как с драйвером хоть что то суметь сделать.
по аналогии с dll загрузить и получить адрес какой то функции чтобы вызвать ее. простите за дилетантство но я WDK касаюсь впервые и всего часов 8 в "теме"
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #6 : 07-11-2010 08:17 » |
|
progman_rus, научиться управлять железкой через драйвер, но не имея документации на функции драйвера
а зачем ? Задание на слёте хацкеров ?
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #7 : 07-11-2010 08:51 » |
|
мда... устройство явно самопальное судя по "USB\VID_7777&PID_7777" какие микросхемы на устройстве стоят - подглядеть можно? интересует та что к USB интерфейсу ближе.
что вы можете сделать с драйвером: загрузить то его конечно можно... но далее у него может быть два типа интерфейса либо через обычные API ReadFile/WriteFile либо через DeviceIoControl(). во всех вариантах необходимо знать что и зачем туда посылать. в последнем - еще требуется номер функции IOCTL знать.
для начала попробуйте получить хендл устройства через CreateFile(). как будет называться ваше устройство - с ходу не соображу... от драйвера зависит.
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Sel
Злобный
Администратор
Offline
|
|
« Ответ #8 : 07-11-2010 08:53 » |
|
Алексей1153++, я бы даже сказала "кулхацкерофф", судя по нубам, имбам и моску, который у него "выгрызают".
|
|
|
Записан
|
Слово не воробей. Всё не воробей, кроме воробья.
|
|
|
progman_rus
Интересующийся
Offline
|
|
« Ответ #9 : 07-11-2010 11:49 » |
|
Да нет никаких кулхацкеров. А мозг действительно грызут. Я людям на аутсорсе пишу сотф для аппрата торгового, вот и выставили, чуть ли не в последний день, "небольшое" изменение в задании - валидатор CashCode + контроллер клавиатуры (изначально предполагалась железная клава, как в аэропортах стоит на терминалах интернетовских). С валидатором то я разобрался, там элементарно, а вот с этой железкой USBшной секс сплошной. Ибо я с устройствами через драйвера никогда не работал (и вообще, понятия не имею, что и как. Но надо блин). А заказчик, то ли спер ее у кого, то ли еще как достал окольными путями, но, в общем, она дешевле клавы и нужно именно ее, а документации ноль. Что касается микрух, то их там на плате много, но всего 2 непосредственно возле разъема с проводами, в который USB втыкается. 1я Atmel 89C511311 UM 2я крохотная совсем, по 4 ноги двух сторон FM2SL256. Дальше не разобрать - лупы нет. что вы можете сделать с драйвером: загрузить то его конечно можно... но далее у него может быть два типа интерфейса либо через обычные API ReadFile/WriteFile либо через DeviceIoControl().
Да, мне хоть как-то научиться обращаться к нему. Это же не сокет открыть (((. во всех вариантах необходимо знать что и зачем туда посылать. в последнем - еще требуется номер функции IOCTL знать.
Дизассмом в IDA это можно увидеть или в inf файле? для начала попробуйте получить хендл устройства через CreateFile(). как будет называться ваше устройство - с ходу не соображу... от драйвера зависит.
Какими способами можно попробовать узнать/угадать имя устройства?
|
|
« Последнее редактирование: 07-11-2010 12:44 от RXL »
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #10 : 07-11-2010 13:20 » |
|
1. Исходя из inf-файла - имя устройства - DGDriver. Пробуй по этому имени открывать драйвер через CreateFile. 2. Дизассемблер вряд ли поможет в определении структуры обмена данных между драйвером и приложением. Здесь еще может помочь имеющееся приложение, работающее с этим драйвером, если запустить драйвер из отладчика режима ядра.
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #11 : 07-11-2010 20:43 » |
|
Из inf-файла имя устройства определить нереально. Да и какого именно устройства? Их может быть много.
Дизассемблер - единственный путь (раз уж нет исходников и "доков"), позволяющий узнать всё о драйвере, включая протокол обмена данными. А имена девайсов, которые создает драйвер, узнать проще простого, надо посмотреть все вызовы IoCreateDevice.
|
|
« Последнее редактирование: 07-11-2010 20:47 от resource »
|
Записан
|
|
|
|
supermaxus
Участник
Offline
|
|
« Ответ #12 : 07-11-2010 20:58 » |
|
Обращение к драйверу делается примерно как указано ниже. Правда, существуют и другие варианты. Обычно требуется знать IOCTL_xx константы и параметры(структуры), которые могут быть с их помощью переданы и получены. IOCTL_xx можно подсмотреть спецсредствами перехвата (для работающей проги), однако, понятно, не все из них вы поймаете. Понять же их назначение можно только дизассемблируя код драйвера, что в большинстве случаев является противозаконным. Кроме того, требует кучу времени и знаний. Т.о. проще всего найти вендора устройства (Novomatic LTD) и у них запросить комплект драйверов на устройство. Комплект будет в себя включать известный вам драйвер и user-модную часть. Собсно, ее вам и надо программировать. А в вашей постановке задача пахнет чистейшей воды хакерством. #include <windows.h> #include <stdio.h> #include <Winioctl.h>
#define IOCTL_TEST CTL_CODE( \ FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS)
int main(int argc, char* argv[]) { HANDLE hHandle = CreateFile("\\\\.\\devicename", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if(hHandle!=INVALID_HANDLE_VALUE) { DWORD BytesReturned; unsigned long ioctlCode=IOCTL_TEST; DWORD errorCode = 0; BOOL retvalue = DeviceIoControl(hHandle, ioctlCode, 0, 0, // Input params 0, 0, // Output params &BytesReturned, NULL ); if (!retvalue) errorCode = GetLastError(); // error has happened
CloseHandle(hHandle); }
return 0; }
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #13 : 08-11-2010 00:40 » |
|
1я Atmel 89C511311 UM - это 8битный контроллер с флеш-памятью. но на нем кажется нет интерфейса USB. вроде только UART. значит должен быть мост с UART на USB. попробуйте поискать тут: http://www.atmel.com/dyn/products/app_notes.asp?family_id=6042я - похоже название микросхемы не корректное. но возможно это как раз USB мост на UART. смотрите внимательнее. Алексей1153++, всяко бывает) zubr, - может быть... а может и нет) но попробовать действительно стоит) resource, если это клавиатура - теоретически могли сделать единый интерфейс через единое имя сервиса... так что наверное не так категорично нет... остальное -да, но проверка аппаратной части тоже может помочь) возможно встретятся описания клавиатур на такой аппаратной базе. supermaxus, я намеренно обратил внимание на ЗНАЧЕНИЕ 7777 VID/PID. я не верю что ТАКОЕ может быть получено по офф. лицензии для какой то левой фирмы) самопал скорее всего.
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
RXL
|
|
« Ответ #14 : 08-11-2010 04:27 » |
|
Судя по Гуглю, можно предположить, что сделано оно во Вьетнаме. Такая комбинация встречается только на их сайтах. Добавлено через 11 минут и 57 секунд:Это, случайно, не тот самый драйвер? http://sourceforge.net/projects/wsiausb/files/
|
|
« Последнее редактирование: 08-11-2010 04:39 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #15 : 08-11-2010 04:49 » |
|
Ochkarik, я только спросил
|
|
|
Записан
|
|
|
|
progman_rus
Интересующийся
Offline
|
|
« Ответ #16 : 08-11-2010 10:56 » |
|
supermaxus, Ну ковырять нутро чужого файла ни желания ни возможностей нет. Значит перед закзачиком буду ставить вопрос ребром - либо дают API для работы с драйвером либо как-то вот так.
RXL, хм. не знаю - то или не то.
ЗЫ спасибо всем за советы. пойду пилить заказчика на предмет предоставления АПИ
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #17 : 08-11-2010 17:53 » |
|
А сколько драйвер (sys) весит?
|
|
« Последнее редактирование: 08-11-2010 18:02 от resource »
|
Записан
|
|
|
|
|