Знаю что в ядре нет функции ZwGetTickCount, знаю что эта инфа (количество миллисекунд со старта системы) находится в структуре KUSER_SHARED_DATA. Вопрос в следующем: как правильно использовать эту структуру? чтобы работало на ХР висте и семёрке
Не знаю, что именно заполняет KUSER_SHARED_DATA, но, думаю, KeQueryPerfomanceCounter будет достаточно универсальным решением. Единственная проблема -- MSDN не рекомендует вызывать эту ф-ию слишком часто. Правда, на x86 она, вроде, не повышает IRQL, но могу и ошибаться, она в hal.dll реализована и может меняться от системы к системе.
про неё я знаю. насколько я понял это всё равно что инструкция RDTSC. нужно что-то попроще... если других способ не найдётся, то реализую через KeQueryPerfomanceCounter
Не обязательно через rdtsc -- HAL динамически определяет, откуда брать значение счетчика, в том числе это может быть и rdtsc.
Почемуже нет? Есть KeTickCount переменная экспортируемая (хоть якобы она и не документирована) но по факту её смысл такой же как и данных которые берутся для GetTickCount В исходниках ядра можно найти такой пример использования: Код (Text): PUBLIC _KiGetTickCount _KiGetTickCount proc cmp [esp+4], KGDT_R3_CODE OR RPL_MASK jnz short @f Kgtc00: mov eax,dword ptr cs:[_KeTickCount] mul dword ptr cs:[_ExpTickCountMultiplier] shrd eax,edx,24 ; compute resultant tick count iretd Который почти полностью(в вычислительном плане) совпадает с исходником GetTickCount