Программирование драйверов Windows


Обслуживание прерываний - часть 2


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

Таблица 8.10. Прототип функции IoConnectInterrupt

NTSTATUS IoConnectInterrupt IRQL == PASSIVE_LEVEL
Параметры Регистрирует процедуру обслуживания прерывания, предоставляемую драйвером, и "подключает" ее к источнику прерываний
OUT PKINTERRUPT

*pInterruptObject

Адрес указателя, в котором будет возращен указатель на объект прерывания
IN PKSERVICE_ROUTINE

ServiceRoutine

Процедура (функция) драйвера, которая теперь будет обслуживать прерывание
IN PVOID pServiceContext Аргумент, передаваемый в процедуру ISR, обычно рекомендуется приводить здесь указатель на структуру расширения объекта устройства
IN PKSPIN_LOCK pSpinLock Инициализированный объект спин-блокировки
IN ULONG Vector Транслированное значение вектора прерывания
IN KIRQL Irql Значение DIRQL для данного устройства
IN KIRQL SynchronizeIrql Обычно равно значению Irql
IN KINTERRUPT_MODE InterruptMode Аппаратный тип прерывания. Одно из значений:

• LevelSensitive

• Latched

IN BOOLEAN isSharableVector Если TRUE &#8212 данный вектор прерывания является совместно используемым (разделяемым)
IN KAFFINITY ProcessorEnableMask Установить набор процессоров, которые могут получать сигналы прерывания
IN BOOLEAN doFloatingSave Если TRUE &#8212 сохранять состояние регистров сопроцессора (FPU). Обычно используется FALSE
Возвращаемое значение

• STATUS_SUCCESS

• STATUS_INVALID_PARAMETER

• STATUS_UNSUFFUCIENT_RESOURCES

Таблица 8.11. Прототип функции драйвера для обслуживания прерываний

BOOLEAN ISR IRQL == DIRQL
Параметры Процедура драйвера, предоставляемая им для обслуживания прерывания
IN PKINTERRUPT *pInterruptObject Объект прерывания, "генерирующий" прерывания
IN VOID pServiceContext Контекстный аргумент, указанный при регистрации в IoConnectInterrupt
Возвращаемое значение

• TRUE &#8212 прерывание было обслужено ISR

• FALSE &#8212 прерывание не обслуживается

<


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