Самоучитель по программированию систем защиты

       

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



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



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

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

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

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

  • контекст процесса «System» (далее - системный контекст);
  • контекст конкретного потока и процесса;
  • контекст случайного потока и процесса (далее - случайный контекст).
  • Различные точки входа в драйвер могут вызываться в контексте, принадлежащем одному из этих классов.

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

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

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

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

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

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

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

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

     



    Содержание раздела