Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите с драйвером - как из ехе работать с ним?  (Прочитано 19329 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
progman_rus
Интересующийся

ru
Offline 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 » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 06-11-2010 17:47 » 

progman_rus, что за железка и что она делает ? И любопытства ради напиши названия упомянутых *.sys и *.inf. Меня терзают смутные сомнения (с) Улыбаюсь)))
Записан

Sel
Злобный
Администратор

ru
Offline Offline

« Ответ #2 : 06-11-2010 17:57 » 

progman_rus, пиши по-русски. Следующий подобный олбанский пост удалю к черту.
Записан

Слово не воробей. Всё не воробей, кроме воробья.
progman_rus
Интересующийся

ru
Offline 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
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 06-11-2010 19:21 » 

Задача-то вообще какая?
Записан
progman_rus
Интересующийся

ru
Offline Offline

« Ответ #5 : 06-11-2010 20:20 » 

задача? в идеале научиться управлять железкой через драйвер, но не имея документации на функции драйвера это имба.

так что для начала разобраться как с драйвером хоть что то суметь сделать.

по аналогии с dll загрузить и получить адрес какой то функции чтобы вызвать ее.
простите за дилетантство но я WDK касаюсь впервые и всего часов 8 в "теме"
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 07-11-2010 08:17 » 

progman_rus,
Цитата
научиться управлять железкой через драйвер, но не имея документации на функции драйвера
а зачем ? Задание на слёте хацкеров ? Улыбаюсь
Записан

Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 07-11-2010 08:51 » 

мда... устройство явно самопальное судя по "USB\VID_7777&PID_7777"
какие микросхемы на устройстве стоят - подглядеть можно? интересует та что к USB интерфейсу ближе.

что вы можете сделать с драйвером: загрузить то его конечно можно... но далее у него может быть два типа интерфейса
либо через обычные API ReadFile/WriteFile либо через DeviceIoControl().
во всех вариантах необходимо знать что и зачем туда посылать. в последнем - еще требуется номер функции IOCTL знать.

для начала попробуйте получить хендл устройства через CreateFile(). как будет называться ваше устройство - с ходу не соображу... от драйвера зависит.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Sel
Злобный
Администратор

ru
Offline Offline

« Ответ #8 : 07-11-2010 08:53 » 

Алексей1153++, я бы даже сказала "кулхацкерофф", судя по нубам, имбам и моску, который у него "выгрызают". Отлично
Записан

Слово не воробей. Всё не воробей, кроме воробья.
progman_rus
Интересующийся

ru
Offline 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 » new

1. Исходя из inf-файла - имя устройства - DGDriver. Пробуй по этому имени открывать драйвер через CreateFile.
2. Дизассемблер вряд ли поможет в определении структуры обмена данных между драйвером и приложением. Здесь еще может помочь имеющееся приложение, работающее с этим драйвером, если запустить драйвер из отладчика режима ядра.
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 07-11-2010 20:43 » 

Из inf-файла имя устройства определить нереально. Да и какого именно устройства? Их может быть много.

Дизассемблер - единственный путь (раз уж нет исходников и "доков"), позволяющий узнать всё о драйвере,  включая протокол обмена данными. А имена девайсов, которые создает драйвер, узнать проще простого, надо посмотреть все вызовы IoCreateDevice.
« Последнее редактирование: 07-11-2010 20:47 от resource » Записан
supermaxus
Участник

ru
Offline 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
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #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=604

2я - похоже название микросхемы не корректное. но возможно это как раз USB мост на UART. смотрите внимательнее.


Алексей1153++, всяко бывает)

zubr, - может  быть... а может и нет) но попробовать действительно стоит)

resource, если это клавиатура - теоретически могли сделать единый интерфейс через единое имя сервиса... так что наверное не так категорично нет...
остальное -да, но проверка аппаратной части тоже может помочь) возможно встретятся описания клавиатур на такой аппаратной базе.

supermaxus, я намеренно обратил внимание на ЗНАЧЕНИЕ 7777 VID/PID. я не верю что ТАКОЕ может быть  получено по офф. лицензии для какой то левой фирмы) самопал скорее всего.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 08-11-2010 04:27 » 

Судя по Гуглю, можно предположить, что сделано оно во Вьетнаме. Такая комбинация встречается только на их сайтах.

Добавлено через 11 минут и 57 секунд:
Это, случайно, не тот самый драйвер?
http://sourceforge.net/projects/wsiausb/files/
« Последнее редактирование: 08-11-2010 04:39 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 08-11-2010 04:49 » 

Ochkarik, я только спросил Улыбаюсь
Записан

progman_rus
Интересующийся

ru
Offline Offline

« Ответ #16 : 08-11-2010 10:56 » 

supermaxus,
Ну ковырять нутро чужого файла ни желания ни возможностей нет. Значит перед закзачиком буду ставить вопрос ребром - либо дают API для работы с драйвером либо как-то вот так.

RXL, хм. не знаю - то или не то.

ЗЫ спасибо всем за советы. пойду пилить заказчика на предмет предоставления АПИ
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 08-11-2010 17:53 » 

А сколько драйвер (sys) весит?
« Последнее редактирование: 08-11-2010 18:02 от resource » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines