2013-07-03 3 views
0

У нас возникают проблемы с зависанием нашего драйвера при попытке отправить синхронный запрос драйверу нижнего уровня. В настоящее время подпрограмма выполняется в DISPATCH_LEVEL при вызове этой процедуры.Программирование в режиме ядра Windows: возможен ли взаимозависимость между драйверами?

я рассмотрение Microsoft поставляемого документа "Locks, Deadlocks, and Synchronization" и говорит следующее:

Рассмотрим случая, когда код работает при низком IRQL успешно получает блокировку, но поток прерывается для запуска кода на более высоком IRQL. Если код более высокого IRQL пытается получить тот же замок, поток может зависать вечно. Более низкий IRQL-код не может работать до тех пор, пока не выйдет код с более высоким IRQL, но код с более высоким IRQL не сможет выйти, пока код с более низким IRQL не освободит блокировку. Включается только один поток. Чтобы предотвратить эту проблему, код, который приобретает блокировку, обычно повышает свой IRQL до самого высокого IRQL, при котором может работать любой код драйвера, который получает блокировку.

Наша проблема дает нам завивки и синие экраны. Хотя я понимаю, что мы не должны делать звонки, которые ждут DISPATCH_LEVEL и что наш дизайн нуждается в работе, я просто хочу убедиться, что я правильно понимаю механизм IRQL.

Я исправлю, что IRQL являются процессорами, и что разные драйверы будут работать на разных процессорах? Я хотел бы подтвердить, действительно ли синхронный запрос, предназначенный для драйвера нижнего уровня от DISPATCH_LEVEL, фактически вызывает проблему, вытесняя поток из другого драйвера из-за его более высокого IRQL.

ответ

2

Если вы выполняете обычный вызов, другой код будет выполняться на одном процессоре на том же уровне. Если вы выполняете асинхронную пересылку, это может быть запланировано на другом процессоре. Если вы выполняете синхронизацию отправки от более высокого к более низкому драйверу уровня, вы, вероятно, должны быть повешены. Просто сделайте его асинхронным и напишите процедуру завершения.

+0

Отлично, ответил на мой вопрос! Благодарю. – 8bitcartridge

Смежные вопросы