Есть драйвер-фильтр мыши (стандартный установленный через PnP, такой же как и kbdclass). Задача: надо время от времени перемещать или нажимать кнопки на мыши (разумеется эмулировать надо). Мой вариант такой: в обработчике IRP_MJ_READ создаю новый IRP (назовём его IRP2), заполняю его назначаю для него IoCompletionRountine и его отправляю дальше. Irp который получил ставлю PENDING и тоже жду. Если запускается IoCompletion от IRP2, в ней мы передаём данные в IRP1 и выполняем IoCompletion от IRP1. Таким образом мы обеспечиваем взаимодействие с драйвером клавы. Есть системный поток, которому время от времени хочется чтобы произошёл клик мышью. в обработчике IRP_MJ_READ помимо создания нового IRP мы заодно заносим его адрес в какую-нибудь переменную. Так вот системный поток вдруг захотел чтобы мышь кликнула, он заполняет эту последную IRP полученную из user mode нужными данными и выполяет её IoCompletion. Таким образом мы виртуально нажимаем на кнопку мыши. Такая схема работать будет? И вообще может можно сделать проще? Да и я не знаю что будет если IoCompletion от IRP2 выполнится в тот момент когда IRP1 будет выполнена, а новая IRP от user mode ещё не придёт.
Нет. Твой фильтр даже получать никакого IRP_MJ_READ не будет. Лучше написать callback. И если не секрет, в чём суть твоей задачи?)
не понял, почему? мой драйвер получает IRP_MJ_READ из usermode а дальше отправляет уже другой (новый) IRP. чтобы с помощью некоторых кнопок на клаве, можно было кликать мышью. Не надо говорить что это можно сделать с помощью стандартных API, я просто думаю какие варианты ещё есть
Если из usermode, то будет) Я то имел ввиду от вышестоящего драйвера не будет) Если пропишешь свой драйвер после Mouclass, то возможно и получится, хотя я такой вариант не пробовал, а вот есле до, то точно не получится. Вообщем-то у нас задачи схожи, только моя более расширенная)