獲取包括 年 月 日 時(shí) 分 秒等,可以使用 TMIE_FIELDS 結(jié)構(gòu)
使用 KeQuerySystemTime 可以得到 格林威治時(shí)間
VOID KeQuerySystemTime (
_Out_ PLARGE_INTEGER CurrentTime
);
可以使用 ExSystemTimeToLocalTime 轉(zhuǎn)換成當(dāng)?shù)貢r(shí)間
VOID ExSystemTimeToLocalTime (
_In_ PLARGE_INTEGER SystemTime,
_Out_ PLARGE_INTEGER LocalTime
);
兩個(gè)函數(shù)都使用長(zhǎng)長(zhǎng)整形數(shù)據(jù)結(jié)構(gòu)表示 時(shí)間
使用 RtlTimeToTimeFields 來轉(zhuǎn)換為 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){
//獲得系統(tǒng)時(shí)間
LARGE_INTEGER utc0, utc8;
TIME_FIELDS timefields;
WCHAR timestr[32] = { 0 };
//獲得標(biāo)準(zhǔn)時(shí)間
KeQuerySystemTime(&utc0);
//轉(zhuǎn)換本地時(shí)間
ExSystemTimeToLocalTime(&utc0, &utc8);
//轉(zhuǎn)換為可理解的時(shí)間數(shù)據(jù)
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;
}
返回結(jié)果:
system time: 2016-12-31 18- 4-16