Что нужно при обработке IRP_MN_START_DEVICE от USB-клавы? Я написал так: Код (Text): .................... .if [edi].MinorFunction == IRP_MN_START_DEVICE mov ebx, pDeviceObject assume ebx:ptr DEVICE_OBJECT mov ebx, [ebx].DeviceExtension assume ebx:nothing assume ebx:ptr FiDO_DEVICE_EXTENSION IoCopyCurrentIrpStackLocationToNext esi invoke KeInitializeEvent, addr event, NotificationEvent, FALSE IoSetCompletionRoutine esi, KbFilter_Complete, addr event, TRUE, TRUE, TRUE mov eax, pDeviceObject .if eax == KeyDeviceObject invoke killirp, pIrp jmp eehyu .endif mov edx, pIrp mov eax, (DEVICE_OBJECT ptr [eax]).DeviceExtension mov ecx, (FiDO_DEVICE_EXTENSION ptr [eax]).TopOfStack call IofCallDriver mov status, eax cmp eax, STATUS_PENDING je WAIT_DRIVER cmp eax, STATUS_SUCCESS je CHK_SUCCESS jmp EXIT_START_DEVICE_SUB WAIT_DRIVER: invoke KeWaitForSingleObject, addr event, Executive, KernelMode, FALSE, 0 CHK_SUCCESS: cmp [esi].IoStatus.Status, STATUS_SUCCESS je CHANGE_DEV_EXT jmp EXIT_START_DEVICE_SUB CHANGE_DEV_EXT: mov [ebx].Started, TRUE mov [ebx].Removed, FALSE mov [ebx].SurpriseRemoved, FALSE assume ebx:nothing EXIT_START_DEVICE_SUB: push status pop [esi].IoStatus.Status mov [esi].IoStatus.Information, 0 invoke IoCompleteRequest, pIrp, IO_NO_INCREMENT pop esi pop edi pop ebx mov eax, status ret с PS/2 клавой фильтр работает, а вот при подключении USB-клавы получается BSOD. Дамп: http://www.wasm.ru/forum/attachment.php?item=4627 Что ещё надо добавить в этот код?