获取包括 年 月 日 时 分 秒等,可以使用 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