Контекст исполнения и уровень IRQL
Контекст исполнения и уровень IRQL
Говоря о точках входа в драйвер, необходимо отметить контекст, при котором эти точки входа могут быть вызваны.
Вначале необходимо определиться с тем, что мы подразумеваем под контекстом исполнения?
Контекст исполнения определяется двумя составляющими:
Текущий контекст исполнения может принадлежать одному из трех классов:
Различные точки входа в драйвер могут вызываться в контексте, принадлежащем одному из этих классов.
DriverEntry всегда вызывается в системном контексте.
Диспетчерские функции для драйверов верхнего уровня (то есть получающих запрос от прикладных программ) вызываются в контексте инициирующего запрос потока.
Диспетчерские функции драйверов остальных уровней, получающие запрос от драйвера верхнего уровня, вызываются в случайном контексте.
Все точки входа, связанные с сериализацией запросов ввода/вывода или с обработкой прерываний и DPC, вызываются в случайном контексте.
DriverEntry всегда вызывается на IRQL, равным PASSIVE_LEVEL.
Диспетчерские точки входа вызываются на IRQL, равным PASSIVE_LEVEL или APC_LEVEL.
Вызов отложенных процедур - на DISPATCH_LEVEL
Функции обработки прерываний - на одном из DIRQL.