admin 管理员组文章数量: 887006
转载请注明来源:
enjoy5512的博客 : http://blog.csdn/enjoy5512
GitHub : https://github/whu-enjoy
1. 获取系统开机时间
获得当前“滴答数”:
获得系统日前和时间往往是为了写日志,获得启动毫秒数则很适合用来做一个随机数的种子。有时也使用时间相关的函数来寻找程序的性能瓶颈。
在Win32开发中,我们使用GetTickCount()函数来返回系统自启动之后经历的毫秒数。在驱动开发中,对应的函数是 KeQueryTickCount():
VOID KeQueryTickCount(
OUT PLARGE_INTEGER TickCount
);
需要注意的是,返回到TickCount中的并不是一个简单的毫秒数,而是一个“滴答”数,这个数在不同硬件环境中是不一样的,所以,我们需要结合使用另一个函数:
ULONG KeQueryTimeIncrement(void);
2. 获取系统时间
获得当前系统时间:
使用KeQuerySystemTime()函数得到的当前时间是格林威治时间,接着使用ExSystemTimeToLocalTime()函数转换成当地时间:
VOID KeQuerySystemTime(
OUT PLARGE_INTEGER CurrentTime
);
VOID ExSystemTimeToLocalTime(
IN PLARGE_INTEGER SystemTime,
OUT PLARGE_INTEGER LocalTime
);
由于这两个函数使用的时间是长长整型,不便于阅读,因此,需通过函数RtlTimeToTimeFields转换成TIME_FIELDS:
VOID RtlTimeToTimeFields(
IN PLARGE_INTEGER Time,
IN PTIME_FIELDS TimeFields
);
3. 示例代码
//程序说明开始
//==================================================================================
// 功能 : 获取系统时间
// 参数 :
// (入口)
// (出口) 无
// 返回 : VOID
// 主要思路 :
// 调用举例 :
// 日期 : 2016年7月6日 22:58:19 - 2016年7月6日 23:42:41
//==================================================================================
//程序说明结束
VOID
GetTime()
{
LARGE_INTEGER TickCount = {0};
LARGE_INTEGER GelinTime = {0};
LARGE_INTEGER LocalTime = {0};
TIME_FIELDS NowFields;
ULONG Inc = 0;
ULONG Day = 0;
ULONG Hour = 0;
ULONG Minute = 0;
ULONG Second = 0;
Inc = KeQueryTimeIncrement();
KeQueryTickCount(&TickCount);
TickCount.QuadPart *= Inc;
TickCount.QuadPart /= 10000;
Day = TickCount.QuadPart / (1000*60*60*24);
Hour = TickCount.QuadPart % (1000*60*60*24) / (1000*60*60);
Minute = TickCount.QuadPart % (1000*60*60*24) % (1000*60*60) / (1000*60);
Second = TickCount.QuadPart % (1000*60*60*24) % (1000*60*60) % (1000*60) / 1000;
KdPrint(("系统启动了%2d天%2d小时%2d分钟%2d秒\n", Day, Hour, Minute, Second));
KeQuerySystemTime(&GelinTime);
ExSystemTimeToLocalTime(&GelinTime, &LocalTime);
RtlTimeToTimeFields(&LocalTime, &NowFields);
KdPrint(("系统当前时间 : %4d年%2d月%2d日 %2d:%2d:%2d\n",
NowFields.Year,
NowFields.Month,
NowFields.Day,
NowFields.Hour,
NowFields.Minute,
NowFields.Second));
}
版权声明:本文标题:Windows驱动开发之获取系统时间 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1731979217h1515266.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论