У меня есть простой драйвер Kernal sys, в DRIVER_OBJECT я установил MajorFunction[IRP_MJ_DEVICE_CONTROL]
в подпрограмму обработчика отправки.
Пользователи читают / пишут мне элементы управления следующим образом:
DeviceIoControl ( device_handle, ctrl_code, &outdata, out_length, &indata, in_length, &count, NULL);
И это все работает отлично.
Моя проблема: у меня есть ситуация, когда данные, которые мой драйвер должен отправить для одного контрольного кода, недоступны до тех пор, пока они не будут впервые прочитаны из другого контрольного кода (обычно другим пользователем).
Итак, мой вопрос:
Могу ли я сообщить керналу в процедуре отправки драйверов, что я не готов, и что керналу необходимо повторно вызвать диспетчер для этого запроса позже?Между тем, пользовательский вызов DeviceIOControl будет блокировать?
В качестве альтернативы, можно ли «отключить» управляющий код, чтобы предотвратить его отправку, чтобы пользовательский DeviceIOControl блокировал вызов, пока я не «включу» этот управляющий код иразрешить отправку еще раз?
Спасибо за любую помощь!