Здравствуйте. Ситуация следующая. Есть устройство. 'Общение' с ним происходит в три этапа: 1. посылается команда 2. посылаются/принимаются данные 3. принимается состояние команды Эту последовательность прерывать нельзя. Т.е. при получении команды нужно ждать, пока не завершится предыдущая команда. Я завёл событие (synchronization event), которое находится в сигнальном состоянии, когда команду можно отправлять. При получении команды я жду по этому событию: Код (Text): KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL); После обработки статуся, я сигналю этим событием: Код (Text): KeSetEvent(&Event, IO_NO_INCREMENT, FALSE); Проблема в том, что приложение может захотеть отменить свой запрос, но т.к. идёт ожидание по событию - приложение 'повиснет'. Идея такая. Я хочу завести ещё одно событие (Cancelled). Это событие (по идее) должно устанавливаться при отмене IRP. А я буду ждать по двум событиям - Event и Cancelled. Как правильно реализовать такой алгоритм ? Я подразумеваю, что надо устанавливать IoSetCancelRoutine и в ней сигналить. Или нужно как-то по-другому реагировать?
Если общение с драйвером осуществляется посредством отправки ему определённых IRP, то да, ты идёшь в правильном направлении.