2015-07-14 5 views
1

У меня на компьютере установлен Windows XP. Я хочу, чтобы моя процедура DPC вызывалась каждые 10 мс.ExSetTimerResolution не работает

Вот почему я написал этот код:

ASSERT(KeGetCurrentIrql() <= APC_LEVEL); 
    KeRaiseIrql(APC_LEVEL, &level); 

    resolution = ExSetTimerResolution(100000, TRUE); 
    KdPrint((DRIVERNAME " - RESOLUTION = %d\n", resolution)); 

    KeLowerIrql(level); 

    KeSetTimerEx(&pExt->timer, duetime, 10, &pExt->dpc); 

DebugView показывает мне, что возвращаемое значение (разрешение) равна 156250.

В результате моя процедура DPC вызывается каждые 15,5 мс

Что я делаю не так?

ответ

1

Из любопытства я попробовал ExSetTimerResolution с разными значениями.

Вот что я получил:

10000 -> 9766 
50000 -> 39063 
75000 -> 39063 
90000 -> 156250 

левый столбец содержит значения, которые я использовал в качестве параметра DesiredTime. Правая колонка содержит возвращаемые значения.

Как вы можете видеть, похоже, что Windows не может изменить разрешение глобального таймера на любое желаемое число.

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

  • Нет связанных вопросов^_^