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


Интервалы ожидания для отдельного потока - часть 2


/p>

Значение TimeInterval может описывать как относительные, так и абсолютные временные интервалы. Для задания абсолютных интервалов следует использовать вызов KeQuerySystemTime

(см. таблицу 7.45), при помощи которого можно получить текущее системное время &#8212 как время начала ожидания. Функции, которые можно использовать для операции над типом данных LARGE_INTEGER, перечислены в таблице 7.44.

Переходным методом (между методами, описанными выше, и методами с использованием синхронизационных примитивов, рассматриваемых далее) является использование callback-функции IoTimerRoutine, которую драйвер регистрирует при помощи вызова IoInitializeTimer (имя данной функции, IoTimerRoutine, здесь присвоено для определенности, разработчик имеет право называть ее любым приглянувшимся ему именем). "Переходным" этот метод можно считать потому, что объект таймера уже используется в полной мере, но этот объект пока еще скрыт от разработчика драйвера за интерфейсом функций, предоставляемых Диспетчером ввода/вывода.

Таблица 10.9. Прототип вызова IoInitializeTimer

NTSTATUS IoInitializeTimer IRQL == PASSIVE_LEVEL
Параметры Выполняет регистрацию callback-функции IoTimerRoutine, предоставляемой драйвером
IN PDEVICE_OBJECT pDevObject Объект устройства инициатора вызова, за которым будет "закреплен" создаваемый данным вызовом объект таймера
IN PIO_TIMER_ROUTINE pIoTimerRoutine Указатель на регистрируемую callback-функцию IoTimerRoutine
IN PVOID pContext Аргумент, передаваемый впоследствии в callback-функцию IoTimerRoutine
Возвращаемое значение

STATUS_SUCCESS при успешном завершении

В результате вызова IoInitializeTimer (таблица 10.9) операционная система создает таймерный объект режима ядра и связывает его с объектом устройства и callback-функцией IoTimerRoutine, предоставляемой драйвером. Регистрацию функции IoTimerRoutine лучше всего выполнять сразу после создания объекта устройства в процедуре AddDevice или DriverEntry (для не-WDM драйверов).


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