2015-03-11 2 views
1

Как определить уровень IRQL кода кода драйвера. Макрос PAGED_CODE() указывает, что кусок кода может быть запущен на уровне IRQL меньше, чем DISPATCH_LEVEL. Но можно определить точный уровень IRQL.Определение уровня IRQL

ответ

3

KeGetCurrentIrql функция возвращает текущий IRQL:

KIRQL KeGetCurrentIrql(void); 

PAGED_CODE макроса использует эту функцию следующим образом:

#define PAGED_CODE() \ 
    if (KeGetCurrentIrql() > APC_LEVEL) { \ 
     KdPrint(("EX: Pageable code called at IRQL %d\n", KeGetCurrentIrql())); \ 
     ASSERT(FALSE); \ 
    } 

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

+0

Спасибо за ответ. Есть ли способ установить уровень Irql для функции? –

+0

IRQL не является атрибутом функции. Каждая функция запускается на том же IRQL, что и вызывающий. Существует много способов изменить текущий IRQL, например, «KeRaiseIrql» и различные функции синхронизации. –

+0

Спасибо, Алекс. Я получил информацию, которую искал. –

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