Windows内核代码片段
+ -

Windows内核中获得当前TickCount

2021-08-30 247 0

在编程中,获得当前的系统日期和时间,或者是获得一个从启动开始的毫秒数,是很常见的需求。获得系统日期和时间往往是为了写日志。获得启动毫秒数很适合用来做一个随机数的种子。有时也使用时间相关的函数来寻找程序的性能瓶颈。

熟悉Win32应用程序开发的读者会知道有一个函数GetTickCount(),这个函数返回系统自启动之后经历的毫秒数。在驱动开发中有一个对应的函数KeQueryTickCount(),这个函数的原型如下:

VOID KeQueryTickCount(OUT PLARGE_INTEGER  TickCount);

遗憾的是,被返回到TickCount中的并不是一个简单的毫秒数。这是一个“滴答”数。但是一个“滴答”到底为多长的时间,在不同的硬件环境下可能有所不同。为此,必须结合另一个函数使用。下面这个函数获得一个“滴答”的具体的100纳秒数。

ULONG KeQueryTimeIncrement();

得知以上的关系之后,下面的代码可以求得实际的毫秒数:

void MyGetTickCount (PULONG msec)
{
    LARGE_INTEGER tick_count;
    ULONG myinc = KeQueryTimeIncrement();
    KeQueryTickCount(&tick_count);
    tick_count.QuadPart *= myinc;
    tick_count.QuadPart /=  10000;
    *msec = tick_count.LowPart;
}

这不是一个简单的过程。不过所幸的是,现在有代码可以拷贝了。

0 篇笔记 写笔记

Windows内核中获得当前TickCount
在编程中,获得当前的系统日期和时间,或者是获得一个从启动开始的毫秒数,是很常见的需求。获得系统日期和时间往往是为了写日志。获得启动毫秒数很适合用来做一个随机数的种子。有时也使用时间相关的函数来寻找程序的性能瓶颈。熟悉Win32应用程序开发的读者会知道有一个函数GetTickCount(),这个函数......
Windows内核中GetTickCount64
在应用层可以通过GetTickCount和GetTickCount64获取当前系统的滴答数,在Windows内核中没有直接可以使用的函数。所我以我们需要自行封装。Windows内核是100纳秒为单位的,所以可以自行封装以毫秒为单位的函数。//1msLONGLONG pnponGetTickCo......
比GetTickCount()能更靠谱一点的时钟计时timeGetTime()
比GetTickCount()能更靠谱一点的时钟计时,有大佬测试有多大优化吗?unsigned long get_sys_reference_time(){ // get the system reference time#if WINDOWS return timeGetTim......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!