Создание виртуального контроллера

Тема в разделе "WASM.NT.KERNEL", создана пользователем Llirik, 1 июн 2011.

  1. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    В драйвере Mouse joystick создается виртуальный контроллер VID_145E&PID_01FE. Мне очень нужно понять как он создается. Помогите, пож, разобраться
     
  2. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    WinDDK\3790.1830\src\wdm\hid\hidgame
    Возможно оригинальные DDK исходники модифицированы.
    Исходники из DDK в аттаче.
     
  3. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
  4. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Four-F
    А Вы бы не могли просто вкратце рассказать суть, а то я С практически не знаю
     
  5. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    В суть я не вдавался. Просто сопоставил то, что увидел в дизасме с исходником и дал Вам исходник вот и всё.
     
  6. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Four-F, так этот пример из ddk у меня есть, но по-моему никаких виртуальных контроллеров в нем не создаётся. это просто пример драйвера джойстика, а к джойстикам мой драйвер никакого отношения как бы иметь не будет. Мне просто нужно узнать как создаётся VID_145E&PID_01FE
     
  7. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Вы запостили бинарь... я тупо залил его в дизасм и увидел, что что-то подобное есть в DDK. Пошукал и нашёл в старом DKK 3790.1830, в новых этих исходнико нет. Я и подумал, что с исходником Вам наверное будет проще. Такова была моя мотивация.

    Исходник из DDK взят за основу этого драйвера. Разбирать по бинарю кто, как и чего там создаёт вряд ли кто-нибудь станет. У всех семья, работа, пиво, футбол... :)
     
  8. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Four-F, а что же мне тогда делать? Здесь никто ничего не знает о создании виртуальных устройств и информации об этом в инете тоже нет
     
  9. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Ну бинарь же у Вас есть. Тяжело и мучительно разбирайте как он устроен. Можете посмотреть toaster из DDK. Там тоже всё виртуальное.
     
  10. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    toaster ? а где он находится?
     
  11. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    WinDDK\7600.16385.1\src\general\toaster\wdm
    http://msdn.microsoft.com/en-us/library/bb758855.aspx
    http://msdn.microsoft.com/en-us/library/ff558716(VS.85).aspx
     
  12. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    Llirik
    Если для устройства то сдесь обычный инф файл нужен .. ОСь сама загрузит дров на это устроство ..
    Код (Text):
    1. [Joystick.AddReg]
    2. HKLM,%KEY_OEM%\VID_045E&PID_01FE,OEMName,,%Joystick%
    3. HKLM,%KEY_OEM%\VID_045E&PID_01FE,OEMData,1, 0, 0, 0, 0, 2, 0, 0, 0
    4. HKLM,%KEY_OEM%\VID_045E&PID_01FE,OEMHardwareID,,"GamePort\VID_045E&PID_01FE"
    Или вы ходите виртуализировать появления устройства? то и есть посылать свои VID_045E&PID_01FE и говорить что якобы устройство появилось?
     
  13. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Вот именно! Но на VID_045E&PID_01FE должен висеть не джойстик, а мышь. И естественно я его переименную, например на VID_045E&PID_01FF
     
  14. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    А как это сделать я не знаю(
     
  15. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    А может jmouse.sys в иду загрузите ?
    DriverEntry
    C7 41 74 58 0F 01 00 mov dword ptr [ecx+74h], offset _HGM_InternalIoctl@8 ; HGM_InternalIoctl(x,x)
    C7 81 A4 00 00 00 76+ mov dword ptr [ecx+0A4h], offset _HGM_PnP@8 ; HGM_PnP(x,x)
    C7 81 90 00 00 00 C8+ mov dword ptr [ecx+90h], offset _HGM_Power@8 ; HGM_Power(x,x)
    C7 41 34 2E 27 01 00 mov dword ptr [ecx+34h], offset _HGM_Unload@4 ; HGM_Unload(x)
    C7 40 04 1E 26 01 00 mov dword ptr [eax+4], offset _HGM_AddDevice@8 ; HGM_AddDevice(x,x)

    89 4D F0 mov [ebp+var_10], ecx
    C7 45 F8 D8 02 00 00 mov [ebp+var_8], 2D8h
    88 5D FC mov [ebp+var_4], bl
    E8 F4 ED FF FF call _HidRegisterMinidriver@4 ; HidRegisterMinidriver(x)

    _HGM_AddDevice@8 proc near
    loc_1271D: ; CODE XREF: HGM_AddDevice(x,x)+9Ej
    E8 FE DB FF FF call _LCODE_HGM_InstallHook
    8B 5D F8 mov ebx, [ebp+var_8]

    _HGM_InternalIoctl@8 proc near

    loc_10F85: ; CODE XREF: HGM_InternalIoctl(x,x)+22j
    8B 5B 0C mov ebx, [ebx+0Ch]
    81 EB 03 00 0B 00 sub ebx, 0B0003h
    74 37 jz short loc_10FC7
    83 EB 04 sub ebx, 4
    74 27 jz short loc_10FBC
    83 EB 04 sub ebx, 4
    74 17 jz short loc_10FB1
    83 EB 1C sub ebx, 1Ch
    74 07 jz short loc_10FA6
    BF BB 00 00 C0 mov edi, 0C00000BBh
    EB 2C jmp short loc_10FD2


    loc_10FB1:
    56 push esi
    FF 75 08 push [ebp+arg_0]
    E8 4A 00 00 00 call _HGM_ReadReport@8 ; HGM_ReadReport(x,x)
    EB 14 jmp short loc_10FD0

    HGM_ReadReport
    call _HGM_UpdateLatestPollData@4
    call _HGM_Game2HID@8
    call _HGM_Mouse2HID@8

    Думаю идея понятна ..
     
  16. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    П.С

    _LTEXT:00010320 _LCODE_HGM_InstallHook proc near ; CODE XREF: HGM_AddDevice(x,x):loc_1271Dp
    _LTEXT:00010320 83 3D 60 1D 01 00 00 cmp ds:Real_Hook, 0
    _LTEXT:00010327 75 18 jnz short loc_10341
    _LTEXT:00010329 B8 08 00 0C 00 mov eax, 0C0008h
    _LTEXT:0001032E BE 78 03 01 00 mov esi, offset HGM_HookProc
    _LTEXT:00010333 CD 20 90 00 01 00 VMMCall Hook_Device_Service
    _LTEXT:00010339 72 06 jb short loc_10341
    _LTEXT:0001033B B8 00 00 00 00 mov eax, 0
    _LTEXT:00010340 C3 retn
    _LTEXT:00010341
    _LTEXT:00010341 loc_10341:
    _LTEXT:00010341
    _LTEXT:00010341 B8 FF FF FF FF mov eax, 0FFFFFFFFh
    _LTEXT:00010346 C3 retn
    _LTEXT:00010346 _LCODE_HGM_InstallHook endp
     
  17. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Честно? не очень(
     
  18. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    Llirik
    Тогда можно и не честно ...
    Ну возьми иду и продизасмь ... посленния дажет демо круто его подняла ...
     
  19. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Ты глупости говоришь. Зачем драйверу создавать виртуальную железку. С железками драйвера работают, чтобы система про это как можно меньше знала. Там задачка проще : выброшена вся обработка аппаратного джойстика и в Винду шлют то, что шлет реальная железка, точнее ее драйвер.
    Ты до сих пор не ответил кто инициатор событий твоей виртуальной мыши - кто ее двигает и как кликает.
    Конкретизируй задачу, а иначе так ничего и не будешь понимать.
    Собрался хитрый драйвер писать, а про драйвера мало знаешь.
    Драйвер клавиатуры не показатель - там все просто и универсально.
     
  20. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    valterg, а почему же тогда при загрузке jmouse.sys появляется новое HID-игровое устройство?
    Моим инициатором событий будет клава