Вот токо никак меньше 10мс не удается получить интервал
Почему так долго? Вот мое же аппаратное прерывание махом отрабатывается (в пределах сотен мкс). А тут?
Может если процесс в ядре сделать, то быстрее будет?
Ты как с таймером работаешь- ждешь на KeWaitForSingleObject? Если да, то не рассчитывай на точность и малые интервалы. 10мс- это (по порядку величины) квант времени одного потока, характерная величина, именно она определяет погрешность функций, основанных на перепланировке потоков. Все ф-ции типа KeWaitForSingleObject работают по принципу- если вызваны с ненулевым временем ожидания и объект не в сигнальном состоянии, то вызывается планировщик потоков, поток вызвавший ф-цию снимается с процессора и переносится в список потоков НЕ запланированных на выполнение, когда объект переходит в сигнальное состояние то поток переводистя в список потоков запланированных на выполнение, но когда он реально получит доступ к процессору не определно, это зависит от других, более приоритетных потоков, вот и выходит 10 мс- ниже труднее.
Также 10 мс - это интервал системного таймера(system clock или это системные часы?). Может именно он и влияет на точность. Не скажу сразу как работают программные таймеры, если от системного таймера- то поэтому 10 мс минимальный интервал. Также при отсутствии других прерываний DPC вызываются именно через 10 ms после отработки ISR системного таймера, но могут и чаще, если какой-то поток сам отдает управление и вызывает планировщик или поднимает IRQL процессора до DISPATCH_LEVEL.
Процессов в ядре не бывает- там только системные потоки(без пользовательского адресного пространства), планируются потоки в соответствии с их приоритетом в независимости от того системный он или пользовательский.