欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

内核中的时间相关函数

程序员文章站 2022-03-09 21:45:08
...

获取系统当前时间
KeQuerySystemTime函数返回当前系统时间,这个时间是以格林尼治时间为准,从1601年1月1日起经过的时间。

void KeQuerySystemTime(
 OUT PLARGE_INTEGER CurrentTime
);

ExSystemTimeToLocalTime把系统时间转换成当前时区对应的时间,时区可以在控制面板中设置。

void ExSystemTimeToLocalTime(
IN  PLARGE_INTEGER SystemTime,	//系统时间
OUT  PLARGE_INTEGER LocalTime	//当前时区时间
);

ExLocalTimeToSystemTime把当前时区时间转换为系统时间。

void ExLocalTimeToSystemTime(
IN  PLARGE_INTEGER LocalTime, //当前时区时间
OUT PLARGE_INTEGER SystemTime	//系统时区
);

RtlTimeFieldsToTime可以将当前的年月日得到系统时间

NTSYSAPI BOOLEAN RtlTimeFieldsToTime(
IN  PTIME_FIELDS   TimeFields, //输入的年月日等信息
IN  PLARGE_INTEGER Time	//输出转换的系统时间
);

typedef struct TIME_FIELDS {
    CSHORT Year;
    CSHORT Month;
    CSHORT Day;
    CSHORT Hour;
    CSHORT Minute;
    CSHORT Second;
    CSHORT Milliseconds;
    CSHORT Weekday;
} TIME_FIELDS;

RtlTimeToTimeFields函数将当地时区时间转换为具体年月日等信息

NTSYSAPI VOID RtlTimeToTimeFields(
 IN  PLARGE_INTEGER Time,	//系统时间
 OUT PTIME_FIELDS   TimeFields	//输出的具体年月日信息
);

KeQuerySystemTime->ExSystemTimeToLocalTime->RtlTimeToTimeFields 就可以得到当地时区的具体时间信息。

VOID Time_Test()
{
	LARGE_INTEGER current_system_time;
	//得到当前系统时间
	KeQuerySystemTime(&current_system_time);

	LARGE_INTEGER current_local_time;
	//从系统时间转换成当地时区时间
	ExSystemTimeToLocalTime(&current_system_time,&current_local_time);

	TIME_FIELDS current_time_info;
	//由当地时区时间得到月日年信息
	RtlTimeToTimeFields(&current_local_time,&current_time_info);

	//显示年月日等信息
	KdPrint(("Current year:%d\n",current_time_info.Year));
	KdPrint(("Current month:%d\n",current_time_info.Month));
	KdPrint(("Current day:%d\n",current_time_info.Day));
	KdPrint(("Current Hour:%d\n",current_time_info.Hour));
	KdPrint(("Current Minute:%d\n",current_time_info.Minute));
	KdPrint(("Current Second:%d\n",current_time_info.Second));
	KdPrint(("Current Milliseconds:%d\n",current_time_info.Milliseconds));
	KdPrint(("Current Weekday:%d\n",current_time_info.Weekday));
}