Непонятный фильтр на KeyboardClass

Тема в разделе "WASM.WIN32", создана пользователем sasha_s, 14 апр 2006.

  1. sasha_s

    sasha_s New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2005
    Сообщения:
    165
    Адрес:
    Belarus
    Смысл вот в чем:

    Сделал я фильтр и он приаттачивается к последнему фильтру и в функции

    NTSTATUS DriverDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)



    всего-то делает



    IoSkipCurrentIrpStackLocation(Irp);

    if (skip_flag)

    {

    return IoCallDriver(root_device, Irp);

    }

    else

    {

    return IoCallDriver(next, Irp);

    }



    root_device -- это девайс самого KeyboardClass0;

    next -- это девайс следующего за мной фильтра;

    skip_flag == TRUE, когда активно приложение в котором я не хочу чтобы работали оастальные фильтры



    Т.е. мой фильтр отрубает все остальные фильтры! Но нашелся один (пока один) фильтр с которым глючит сей механизм. (Одна нужная утилитка ставит сей фильтр для благих намерений)



    Глюк состоит в следующем:



    при быстром наборе с клавы в целевом приложении половина клавиш как бы не доходят до приложения, а когда переходиш в другое приложение, то при следующим нажатии на клавишу все недошедшие появляются одним разом.

    И еще одна особенность:

    при работе через "return IoCallDriver(next, Irp);" через ф-цию DriverDispatch проходит по два Irp на каждое нажатие клавиши (я так понимаю что по одному Irp на нажатие и отжатие), но при работе через "return IoCallDriver(root_device, Irp);" проходит только одно Irp.



    В чем дело? Мот кто встречался с подобным или идеи есть?