Иллюстрированный самоучитель по Pogramming Sistem Security


Контекст исполнения и уровень IRQL


Говоря о точках входа в драйвер, необходимо отметить контекст, при котором эти точки входа могут быть вызваны.

Вначале необходимо определиться с тем, что мы подразумеваем под контекстом исполнения?

Контекст исполнения определяется двумя составляющими:

  • исполняемый в настоящее время поток (контекст планирования потока - thread scheduling context);
  • контекст памяти процесса, которому принадлежит поток.

Текущий контекст исполнения может принадлежать одному из трех классов:

  • контекст процесса «System» (далее - системный контекст);
  • контекст конкретного потока и процесса;
  • контекст случайного потока и процесса (далее - случайный контекст).

Различные точки входа в драйвер могут вызываться в контексте, принадлежащем одному из этих классов.

DriverEntry всегда вызывается в системном контексте.

Диспетчерские функции для драйверов верхнего уровня (то есть получающих запрос от прикладных программ) вызываются в контексте инициирующего запрос потока.

Диспетчерские функции драйверов остальных уровней, получающие запрос от драйвера верхнего уровня, вызываются в случайном контексте.

Все точки входа, связанные с сериализацией запросов ввода/вывода или с обработкой прерываний и DPC, вызываются в случайном контексте.

DriverEntry всегда вызывается на IRQL, равным PASSIVE_LEVEL.

Диспетчерские точки входа вызываются на IRQL, равным PASSIVE_LEVEL или APC_LEVEL.

Вызов отложенных процедур - на DISPATCH_LEVEL

Функции обработки прерываний - на одном из DIRQL.




- Начало -  - Назад -  - Вперед -



Книжный магазин