ZwGetTickCount или как получить время работы системы в миллисекундах

Тема в разделе "WASM.NT.KERNEL", создана пользователем rpy3uH, 18 май 2011.

  1. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    Знаю что в ядре нет функции ZwGetTickCount, знаю что эта инфа (количество миллисекунд со старта системы) находится в структуре KUSER_SHARED_DATA. Вопрос в следующем: как правильно использовать эту структуру? чтобы работало на ХР висте и семёрке
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Не знаю, что именно заполняет KUSER_SHARED_DATA, но, думаю, KeQueryPerfomanceCounter будет достаточно универсальным решением. Единственная проблема -- MSDN не рекомендует вызывать эту ф-ию слишком часто. Правда, на x86 она, вроде, не повышает IRQL, но могу и ошибаться, она в hal.dll реализована и может меняться от системы к системе.
     
  3. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    про неё я знаю. насколько я понял это всё равно что инструкция RDTSC. нужно что-то попроще... если других способ не найдётся, то реализую через KeQueryPerfomanceCounter
     
  4. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Не обязательно через rdtsc -- HAL динамически определяет, откуда брать значение счетчика, в том числе это может быть и rdtsc.
     
  5. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    Почемуже нет? Есть KeTickCount переменная экспортируемая (хоть якобы она и не документирована) но по факту её смысл такой же как и данных которые берутся для GetTickCount

    В исходниках ядра можно найти такой пример использования:
    Код (Text):
    1.       PUBLIC  _KiGetTickCount
    2. _KiGetTickCount proc
    3.  
    4.         cmp     [esp+4], KGDT_R3_CODE OR RPL_MASK
    5.         jnz     short @f
    6.  
    7. Kgtc00:
    8.         mov     eax,dword ptr cs:[_KeTickCount]
    9.         mul     dword ptr cs:[_ExpTickCountMultiplier]
    10.         shrd    eax,edx,24                  ; compute resultant tick count
    11.  
    12.         iretd
    Который почти полностью(в вычислительном плане) совпадает с исходником GetTickCount
     
  6. gaeprust

    gaeprust New Member

    Публикаций:
    0
    Регистрация:
    2 май 2011
    Сообщения:
    188
    Int 0x2A.
     
  7. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    сделал через KeTickCount
     
  8. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    int 2Ah и есть тиккаунт