除了前面介紹的計時器, 等待函式外, DDK 中還提供了豐富的時間處理函式, 這裡將對一些常用的時間函式進行介紹.
時間相關函式 :
獲取當前系統時間的內核函式是 KeQuerySystemTime. 這個時間是從 1601 年 1 月 1 日起經過的時間, 單位是 100ns. 並且以格林威治時間計時為準. 該函式宣告如下 :
第一個參數 CurrentTime 是返回當前的系統時間, 以格林威治計時.
ExSystemTimeToLocalTime 函式將系統時間轉換為當前時區對應的時間, 當前時區可以在控制台中設置, 其函式宣告如下 :
第一個參數為輸入系統時間, 以格林威治時間為準. 第二個參數是當前時區的時間.
ExLocalTimeToSystemTime 函式可以將當前時區的時間轉為系統時間, 即格林威治時間. 其函式宣告如下 :
第一個參數是當前時區時間, 以控制台中設置的時區為準, 第二個參數是輸出系統時間, 以格林威治時間為準.
RtlTimeFieldsToTime 函式可以由當前的年月日得到系統時間, 其函式宣告如下 :
第一個參數輸入年月日等資訊, 第二個參數為轉出的系統時間. 其中輸入的 TimeFields 是一個 TIME_FIELDS 的資料結構, 記錄年月日等資訊, 其宣告如下 :
- typedef struct TIME_FIELDS {
- CSHORT Year;
- CSHORT Month;
- CSHORT Day;
- CSHORT Hour;
- CSHORT Minute;
- CSHORT Second;
- CSHORT Milliseconds;
- CSHORT Weekday;
- } TIME_FIELDS;
* 參數 Month : 月, 取值範圍是 1-12
* 參數 Day : 日期, 取值範圍是 1-31
* 參數 Hour : 小時, 取值範圍是 0-23
* 參數 Minute : 分鐘, 取值範圍是 0-59.
* 參數 Second : s, 取值範圍是 0-59
* 參數 Milliseconds : ms, 取值範圍從 0-999
* 參數 Weekday : 禮拜幾, 取值範圍是 0-6, 代表周日到周六.
RtlTimeToTimeFields 函式將系統時間轉成具體的月日年等資訊, 其宣告如下 :
第一個參數是輸入的系統時間, 第二個參數是輸出的年月日資訊, 由 TIME_FIELDS 資料結構表示.
示例程式碼 :
下面的程式碼演示如何在驅動程式中使用這些時間相關函式, 這個例子首先得到當前的系統時間, 然後將當前系統時間轉換後得到當前時區的時間, 然後再將時區時間得到具體的年月日等資訊 :
底下是執行結果 :
沒有留言:
張貼留言