4.3.2获得当前系统时间

获取包括 年 月 日 时 分 秒等,可以使用 TMIE_FIELDS 结构

使用 KeQuerySystemTime 可以得到 格林威治时间

VOID KeQuerySystemTime (

_Out_ PLARGE_INTEGER CurrentTime

);

可以使用 ExSystemTimeToLocalTime 转换成当地时间

VOID ExSystemTimeToLocalTime (

_In_ PLARGE_INTEGER SystemTime,

_Out_ PLARGE_INTEGER LocalTime

);

两个函数都使用长长整形数据结构表示 时间

使用 RtlTimeToTimeFields 来转换为 TMIE_FIELDS

NTSYSAPI VOID NTAPI RtlTimeToTimeFields (

_In_ PLARGE_INTEGER Time,

_Out_ PTIME_FIELDS TimeFields

);

例子是最好的教程:

#include

#include

VOID DriverUnload(PDRIVER_OBJECT driver){

DbgPrint("misaka: uninstall driver\r\n");

}

NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path){

//获得系统时间

LARGE_INTEGER utc0, utc8;

TIME_FIELDS timefields;

WCHAR timestr[32] = { 0 };

//获得标准时间

KeQuerySystemTime(&utc0);

//转换本地时间

ExSystemTimeToLocalTime(&utc0, &utc8);

//转换为可理解的时间数据

RtlTimeToTimeFields(&utc8, &timefields);

//打印到 timestr

RtlStringCchPrintfW(timestr, 32, L"%4d-%2d-%2d %2d-%2d-%2d", timefields.Year, timefields.Month, timefields.Day, timefields.Hour, timefields.Minute, timefields.Second);

//格式化字符串

UNICODE_STRING str = { 0 };

str.Buffer = timestr;

str.Length = str.MaximumLength = wcslen(timestr) * sizeof(WCHAR);

//输出到 DbgPrint

DbgPrint("system time: %wZ\r\n", str);

driver->DriverUnload = DriverUnload;

return STATUS_SUCCESS;

}

返回结果:

system time: 2016-12-31 18- 4-16

你可能感兴趣的:(4.3.2获得当前系统时间)