可以按照以下步驟:
1. 用 KeQuerySystemTime() 獲得當前的 GMT System Time. 這是一個從 1601-01-01 以來的計數(單位是 100ns)。
2. 調用 ExSystemTimeToLocalTime() 將 GMT System Time 值轉換成當前時區的 Local System Time.
3. 用 RtlTimeToTimeFields() 將 System Time 值轉換成 年:月:日:時:分:秒 的形式,保存在一個 TIME_FIELDS 結構中。
typedef struct TIME_FIELDS
{
CSHORT Year;
CSHORT Month;
CSHORT Day;
CSHORT Hour;
CSHORT Minute;
CSHORT Second;
CSHORT Milliseconds;
CSHORT Weekday;
} TIME_FIELDS;
示例代碼,獲取時間串函數:
(本函數將會在後文中使用:Windows 驅動:向 DbgPrintf 一樣將調試信息輸出到文件 )
(PS:源代碼有更好的格式發表嗎)
//----------------------------------------------------------------------
//
// GetCurrentTimeString
//
// Get current time string. (format: %d-%02d-%02d %02d:%02d:%02d)
//
//----------------------------------------------------------------------
PCHAR
GetCurrentTimeString()
{
static CHAR szTime[128];
LARGE_INTEGER SystemTime;
LARGE_INTEGER LocalTime;
TIME_FIELDS timeFiled;
KeQuerySystemTime(&SystemTime);
ExSystemTimeToLocalTime(&SystemTime, &LocalTime);
RtlTimeToTimeFIElds(&LocalTime, &timeFiled);
sprintf(szTime, "%d-%02d-%02d %02d:%02d:%02d"
, timeFiled.Year
, timeFiled.Month
, timeFiled.Day
, timeFiled.Hour
, timeFiled.Minute
, timeFiled.Second
);
return szTime;
}