Вот конкретный мини-пример моей проблемы Код (Text): KKbFilter_ServiceCallback proc pDeviceObject:PDEVICE_OBJECT, InputDataStart:PKEYBOARD_INPUT_DATA, InputDataEnd:PKEYBOARD_INPUT_DATA, InputDataConsumed:PULONG mov eax, InputDataStart assume eax:ptr KEYBOARD_INPUT_DATA .if [eax].MakeCode == 36h .if [eax].Flags == 1 .if zl1 == 0 inc zl1 ret .else dec zl1 .endif .endif .endif push InputDataConsumed mov eax, pDeviceObject push InputDataEnd assume eax:ptr DEVICE_OBJECT mov ecx, [eax].DeviceExtension assume eax:nothing assume ecx:ptr FiDO_DEVICE_EXTENSION push InputDataStart push [ecx].UPPER_CONNECT_DATA.ClassDeviceObject call [ecx].UPPER_CONNECT_DATA.ClassService assume ecx:nothing ret KKbFilter_ServiceCallback endp Почему с USB-клавой этот код залипания правого Shift`а действует, а с PS/2 нет?
Как при каком?? при отпускании шифта, а при следующем отпускании оно пропадает. по-моему из приведённого мною кода это можно было понять. тут я его упростил до нельзя)
пожалуста, приведите разъяснение к строкам. просто я занялся драйверами только для того, чтобы создать проект наподобие вашего) заодно смогу поискать, почему действует только с USB-клавой
тут всё очень просто) когда шифт отпускается в первый раз, zl1 становится равным 1 и Callback не отправляется. получается залипание. когда шифт во второй раз zl1 обнуляется, а callback, как и все остальные, идёт дальше, соответственно шифт отпускается и всё начинается заново. Но на PS/2 это почему-то не работает