2010-10-27 4 views
2

Как я могу установить таймер в режиме ядра, чтобы указанная функция в моем драйвере вызывалась примерно каждую секунду в Windows XP и выше? Я должен использовать все функции (в частности, ZwQuerySystemInformation) в функции. Мне не нужен таймер с высоким разрешением или миллисекундная точность или что-то в этом роде, мне просто нужен способ запланировать выполнение функции один раз в секунду в режиме ядра и она должна работать на всех 32-битных системах Windows XP и выше.таймер режима ядра

ответ

5

Создайте таймер ядра через KeInitializeTimer.
Установите таймер с KeSetTimerEx и используйте период 1 с.
Создайте тему в своем драйвере.
В потоке звоните KeWaitForSingleObject, чтобы подождать по таймеру и по возвращении, вызовите свою функцию.
Повторите.

2

Вместо того, чтобы тратить поток, вы также можете использовать объект dpc для получения обратного вызова на уровне отправки, когда истекает время таймера. Просто передайте его как аргумент dpc для KeSetTimerEx.

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