内核中的时间相关函数
程序员文章站
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(¤t_system_time);
LARGE_INTEGER current_local_time;
//从系统时间转换成当地时区时间
ExSystemTimeToLocalTime(¤t_system_time,¤t_local_time);
TIME_FIELDS current_time_info;
//由当地时区时间得到月日年信息
RtlTimeToTimeFields(¤t_local_time,¤t_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));
}