Windows驱动开发之获取系统时间
来源:互联网 发布:鼠标灵敏度测试软件 编辑:程序博客网 时间:2024/06/05 08:37
转载请注明来源:
enjoy5512的博客 : http://blog.csdn.net/enjoy5512
GitHub : https://github.com/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//==================================================================================//程序说明结束VOIDGetTime(){ 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));}
0 0
- Windows驱动开发之获取系统时间
- Windows 驱动:获取系统当前时间,生成格式字符串
- Windows 驱动:获取系统当前时间,生成格式字符串
- ios开发之获取系统开机时间
- 获取windows系统时间
- 获取Windows系统时间
- windows获取系统时间
- 【驱动开发】006 系统时间
- Windows内核编程基础篇之获取当前系统时间
- 获取/设置 windows 系统时间
- android开发之获取系统时间的方法
- 七、 在驱动中获取系统时间
- iphone开发 获取系统时间
- ios开发 获取系统时间
- ios开发 获取系统时间
- Windows系统获取系统的启动时间
- Windows Phone开发之获取屏幕分辨率 和 系统版本
- android之获取系统时间
- [转载]EasyDarwin开源流媒体服务器内存管理优化
- Mongodb 和 spring的整合开发 权限认证 mongotemplate的group mapReduce开发
- 查询方式实例演示
- 专题四 Problem S
- React Native指南汇集了各类react-native学习资源、开源App和组件
- Windows驱动开发之获取系统时间
- HDU-4651-Partition
- Spring注解
- [微信红包]您有一个好友红包未领取
- Hibernate联合主键怎样在xml中配置
- OpenCV坐标系与操作像素的四种方法
- 二维数组的列排序
- linphone-android-客户端APP-工程解读
- Axis2基础入门