Анализ проблем верификации драйверов Windows - page 9

Анализ проблем верификации драйверов Windows
9
В результате анализа можно сделать вывод, что в случае подоб-
ной ошибки рекомендуется провести анализ стека обязательно при
включенном режиме Driver Verifier, иначе драйвер в стеке вообще
может не фигурировать.
Как отмечалось выше, использование спин-блокировок повышает
уровень приоритета до DPC/Dispatch и блокирует любые действия в
системе. В тех случаях, когда выполнение кода ядра может быть пе-
реведено в состояние ожидания, могут использоваться другие сред-
ства синхронизации, такие как быстрые мьютексы [2].
Однако и эти средства не всегда защищены от ситуаций, приво-
дящих к взаимоблокировкам (например, когда приоритет процесса
при захвате мьютекса повышается до уровня APC_LEVEL
(Asynchronous Procedure Call)). При этом станет невозможным созда-
вать синхронные IPR, так как функция должна вызываться на пользо-
вательском уровне привилегий — PASSIVE_LEVEL, который имеет
приоритет ниже, чем APC_LEVEL. Ожидание синхронного IRP при-
ведет к взаимной блокировке по причине несоответствия уровня
IRQL. Ошибка, вызванная несоответствием IRQL, рассмотрена выше
на примере спин-блокировок. Реакция системы в этом случае будет
аналогичной. Кроме того, быстрые мьютексы не рекурсивны, и по-
вторный их захват является серьезной проблемой.
Для анализа ситуации была написана функция, вызывающая по-
вторный захват быстрого мьютекса по аналогии со спин-блокировками
(рис. 7). В функции создается два быстрых мьютекса. Каждый из них
Рис. 7.
Функция с двумя быстрыми мьютексами
1,2,3,4,5,6,7,8 10,11,12
Powered by FlippingBook