Ты явно путаешь, как в том анектдоте, надпись на сарае и его реальное содержимое. Появляется не устройство, а записи в системе, создаваемые при взаимодействии системы и драйвера. Есть железка или нет системе наплевать. Тогда ищи исходники виртуальных мышей, например, для пультов ТВ тюнеров или мобил через блютус и WiFi. Но они все равно неудобные. По менюшкам приложений через клаву удобнее работать, а играть в игры даже мышеджойстиком - ОТСТОЙ. Я жалею что раньше джойстик не купил - получил массу новых ощущений, но увы уже поздно мне учится владеть им... ====================== Пардон отвлекся на свое. Тебе всего-то надо зарегистрировать устройство типа мышь и разрулить куда направить коды клавиш - в винду или в имитатор мыши. Можно конечно просто вторую клаву юзать, но смысла в этой работе мало. А подсказывать тебе будут, когда будет реальный исходник, а не прожект. Кстати для прожектов тут отдельная тема, а в кернел ты явно не у дел.
valterg, а для меня мышеджой лучше всяких там навороченных джоев! Я ими даже не могу пользоваться в силу физических причин, а мышку взял и погнал по трассе
Four-F, у меня Toaster почему-то не собирается( Вы бы не могли его собрать с флагами USER_C_FLAGS=/FAs и дать мне полученый asm для анализа?
Llirik 1) Удачи в создании драйвера клавамыша 2) Войди в профиль Four-F. Там и ПМ и другие контакты есть. Быстрее будет. По-моему опыту сборка DDK обламывается, когда не соблюдаешь ПРАВИЛ. Обычно у тебя в путях и системных переменных есть левые утилиты и инклюды, которые мешают. Сейчас ДДК у меня не установлен, т.ч. проверить не могу.
Ответил в ветке http://wasm.ru/forum/viewtopic.php?pid=434190 Совет1: Время которое Вы потратите на изучение автосгенеренных асмов лучше потратить не изучение С. Совет1: Собрать бинарь без генерации асмов и залить в IDA. Листинг получится, ИМХО, более читебельный.
Вопрос такой: почему при вот таком коде Code (Text): .data ..................... busguid dd 0C05EAD84h dw 0E34Ch, 04ee2h, 0BF6Ah db 05Dh, 04Bh, 0B7h, 0D2h, 0B1h, 022h ............................. .code ................................ xKbFilter_AddDevice proc pDriverObject:PDRIVER_OBJECT, pDeviceObject:PDEVICE_OBJECT local KeyeviceObject:PDEVICE_OBJECT local devext:PFiDO_DEVICE_EXTENSION local status:NTSTATUS .if buss == 0 invoke IoCreateDevice, pDriverObject, sizeof FiDO_DEVICE_EXTENSION, 0, FILE_DEVICE_MOUSE, \ 0, FALSE, addr KeyeviceObject inc buss .else invoke IoCreateDevice, pDriverObject, sizeof FiDO_DEVICE_EXTENSION, addr gg_usDeviceName, FILE_DEVICE_KEYBOARD, \ 0, FALSE, addr KeyeviceObject .endif .if eax == STATUS_SUCCESS inc gr invoke IoAttachDeviceToDeviceStack, KeyeviceObject, pDeviceObject .if eax != NULL push ebx mov ebx, KeyeviceObject assume ebx:ptr DEVICE_OBJECT mov ecx, [ebx].DeviceExtension assume ebx:nothing assume ecx:ptr FiDO_DEVICE_EXTENSION mov [ecx].TopOfStack, eax push KeyeviceObject pop [ecx].Self push pDeviceObject pop [ecx].PDO and [ecx].SurpriseRemoved, FALSE; and [ecx].Removed, FALSE; and [ecx].Started, FALSE; assume ecx:nothing mov ecx, KeyeviceObject assume eax:ptr DEVICE_OBJECT assume ecx:ptr DEVICE_OBJECT mov ebx, [eax].DeviceType mov [ecx].DeviceType, ebx mov ebx, [eax].Flags mov [ecx].Flags,ebx or [ecx].Flags, DO_BUFFERED_IO or DO_POWER_PAGABLE and [ecx].Flags, not DO_DEVICE_INITIALIZING assume eax:nothing assume ecx:nothing mov status, STATUS_SUCCESS pop ebx .else mov status, STATUS_DEVICE_NOT_CONNECTED invoke IoDeleteDevice, KeyeviceObject .endif .else mov status, STATUS_DEVICE_NOT_CONNECTED .endif ;; .endif mov eax, status ret xKbFilter_AddDevice endp .code INIT DriverEntry1 proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING local SymbolicName:dword local status:NTSTATUS mov status, STATUS_DEVICE_CONFIGURATION_ERROR invoke IoCreateDevice, pDriverObject, sizeof FiDO_DEVICE_EXTENSION, addr Qg_usDeviceName, FILE_DEVICE_UNKNOWN, \ 0, TRUE, addr KeyDeviceObject .if eax == STATUS_SUCCESS invoke IoCreateSymbolicLink, addr g_usSymbolicLinkName, addr Qg_usDeviceName .if eax == STATUS_SUCCESS mov eax, pDriverObject assume eax:PTR DRIVER_OBJECT mov ecx, IRP_MJ_MAXIMUM_FUNCTION + 1 .while ecx dec ecx mov [eax].MajorFunction[ecx*(sizeof PVOID)], offset FiDO_DispatchPassThrough .endw mov [eax].MajorFunction[IRP_MJ_DEVICE_CONTROL*(sizeof PVOID)], offset CDO_DispatchDeviceControl mov [eax].MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL*(sizeof PVOID)], offset CDO_DispatchDeviceControl mov [eax].MajorFunction[IRP_MJ_PNP*(sizeof PVOID)], offset KbFilter_PnP mov [eax].MajorFunction[IRP_MJ_POWER*(sizeof PVOID)], offset FiDO_DispatchPower mov ecx, [eax].DriverExtension assume ecx:PTR DRIVER_EXTENSION mov [ecx].AddDevice, offset xKbFilter_AddDevice; mov [eax].DriverUnload, offset DriverUnload assume eax:nothing assume ecx:nothing invoke IoCreateDevice, pDriverObject, sizeof BFiDO_DEVICE_EXTENSION, NULL, FILE_DEVICE_BUS_EXTENDER, FILE_DEVICE_SECURE_OPEN, TRUE, addr BusDeviceObject mov eax, BusDeviceObject assume eax:ptr DEVICE_OBJECT mov ecx, [eax].DeviceExtension assume eax:nothing assume ecx:ptr BFiDO_DEVICE_EXTENSION lea eax, [ecx].InterfaceName mov SymbolicName, eax [b]invoke IoRegisterDeviceInterface, BusDeviceObject, addr busguid, 0, eax[/b]invoke IoSetDeviceInterfaceState, SymbolicName, TRUE invoke xKbFilter_AddDevice, pDriverObject, BusDeviceObject mov status, STATUS_SUCCESS .else mov status, STATUS_DEVICE_NOT_CONNECTED invoke IoDeleteDevice, KeyDeviceObject .endif .endif mov eax, status ret DriverEntry1 endp end DriverEntry1 Код ошибки: Причём не сразу, а только тогда, когда начинает грузиться графическая оболочка винды. Может чего-то в коде ещё не хватает? P.S. в архиве драйвер и CrashDump
Пожалуйста, приведите мне простенький обработки IRP_MN_QUERY_ID с функцией завершения PnPQueryComplete
Я имею ввиду пример вот этого: Code (Text): PAGE:0001280B loc_1280B: ; CODE XREF: HGM_PnP(x,x)+61j PAGE:0001280B push 9 PAGE:0001280D mov [ebx+1Ch], ecx PAGE:00012810 mov [ebx+18h], ecx PAGE:00012813 lea edi, [eax-24h] PAGE:00012816 pop ecx PAGE:00012817 mov esi, eax PAGE:00012819 rep movsd PAGE:0001281B mov eax, [ebx+60h] PAGE:0001281E mov ecx, [ebp+var_4] PAGE:00012821 sub eax, 24h PAGE:00012824 mov edx, ebx PAGE:00012826 mov dword ptr [eax+1Ch], offset _HGM_PnPQueryComplete@12 ; HGM_PnPQueryComplete(x,x,x) PAGE:0001282D mov [eax+20h], ecx PAGE:00012830 mov byte ptr [eax+3], 0E0h PAGE:00012834 mov eax, [ebx+60h] PAGE:00012837 or byte ptr [eax+3], 1 PAGE:0001283B mov eax, [ebp+arg_0] PAGE:0001283E mov eax, [eax+28h] PAGE:00012841 mov ecx, [eax+4] PAGE:00012844 call ds:__imp_@IofCallDriver@8 ; IofCallDriver(x,x) PAGE:0001284A mov edi, eax PAGE:0001284C jmp loc_12990 хотя бы на С