BSOD при подключении USB-клавы

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

  1. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Что нужно при обработке IRP_MN_START_DEVICE от USB-клавы? Я написал так:
    Код (Text):
    1. ....................
    2.     .if [edi].MinorFunction == IRP_MN_START_DEVICE
    3. mov ebx, pDeviceObject
    4. assume ebx:ptr DEVICE_OBJECT
    5. mov ebx, [ebx].DeviceExtension
    6. assume ebx:nothing
    7. assume ebx:ptr FiDO_DEVICE_EXTENSION
    8.     IoCopyCurrentIrpStackLocationToNext esi
    9.     invoke KeInitializeEvent, addr event, NotificationEvent, FALSE
    10.  
    11.     IoSetCompletionRoutine esi, KbFilter_Complete, addr event, TRUE, TRUE, TRUE
    12. mov eax, pDeviceObject
    13. .if eax == KeyDeviceObject
    14. invoke killirp, pIrp
    15. jmp eehyu
    16. .endif
    17. mov edx, pIrp
    18.     mov eax, (DEVICE_OBJECT ptr [eax]).DeviceExtension
    19.     mov ecx, (FiDO_DEVICE_EXTENSION ptr [eax]).TopOfStack
    20. call    IofCallDriver
    21.   mov status, eax
    22.     cmp eax, STATUS_PENDING
    23.     je WAIT_DRIVER
    24.     cmp eax, STATUS_SUCCESS
    25.     je CHK_SUCCESS
    26.     jmp EXIT_START_DEVICE_SUB
    27.        
    28. WAIT_DRIVER:
    29.     invoke KeWaitForSingleObject, addr event, Executive, KernelMode, FALSE, 0
    30.    
    31. CHK_SUCCESS:
    32.     cmp [esi].IoStatus.Status, STATUS_SUCCESS
    33.     je CHANGE_DEV_EXT
    34.     jmp EXIT_START_DEVICE_SUB
    35.    
    36. CHANGE_DEV_EXT:
    37.     mov [ebx].Started, TRUE
    38.     mov [ebx].Removed, FALSE
    39.     mov [ebx].SurpriseRemoved, FALSE
    40. assume ebx:nothing
    41. EXIT_START_DEVICE_SUB:
    42.     push status
    43.     pop [esi].IoStatus.Status
    44.     mov [esi].IoStatus.Information, 0
    45.        
    46.     invoke IoCompleteRequest, pIrp, IO_NO_INCREMENT
    47. pop esi
    48. pop edi
    49. pop ebx    
    50.     mov eax, status
    51.     ret
    с PS/2 клавой фильтр работает, а вот при подключении USB-клавы получается BSOD.
    Дамп: http://www.wasm.ru/forum/attachment.php?item=4627
    Что ещё надо добавить в этот код?
     
  2. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Я нашел ошибку, но она чуть дальше этого кода