Здравствуйте, Freid, Вы писали:
F> Имеется несколько вызовов ExReleaseFastMutex(). Как правило, они отрабатывают нормально, F>но иногда вываливается БСОД с ошибкой IRQL_NOT_LESS_OR_EQUAL. Похоже, что вызов происходит F>на уровне выше PASSIVE_LEVEL. F> Почему, всё-таки, так происходит и как этого можно корректно избежать?
--
Это может происходить потому, что некоторые функции драйвера могут вызываться на разных IRQL.
C помощью функции KeGetCurrentIrql() Вы можете определить текущий IRQL и, в зависимости от его значения, вызывать или нет эту функцию (или, скорее всего, вызывать или нет ExAcquireFastMutex). По крайней мере Вы сможете определить, когда именно возникает эта ситуация и дальше уже пытаться решать эту проблему.