在Windows Driver層級的環境下取得時區差值與日光節約時間開啟與否

閱讀時間約 2 分鐘

因為某種因素,小弟必須要在Windows Driver層級,透過EWDK的環境下取得時區差值與日光節約時間開啟與否。不過KUSER_SHARED_DATA (ntddk.h) - Windows drivers | Microsoft Learn裡面寫得不清不楚,實在很難讓人聯想到其實Time Zone ID就是GetTimeZoneInformation 函式 (timezoneapi.h) - Win32 apps | Microsoft Learn裡面的定義。小弟一開始還以為是Time Zone IDs (Compact 2013) | Microsoft Learn,想不到一點關係都沒有,白花了一點時間研究。

把一些研究結果記錄下來,以後可以少走一些冤枉路~

#include <ntddk.h>
#include <wdm.h>
#include <wdf.h>

#define TIME_ZONE_ID_UNKNOWN 0
#define TIME_ZONE_ID_STANDARD 1
#define TIME_ZONE_ID_DAYLIGHT 2

BOOLEAN IsDaylightSavingTimeEnabled()
{
// Read the time zone ID
ULONG timeZoneId = SharedUserData->TimeZoneId;

// Determine if daylight saving time is enabled
BOOLEAN isDaylightSavingTimeEnabled = (timeZoneId == (ULONG)TIME_ZONE_ID_DAYLIGHT);

return isDaylightSavingTimeEnabled;
}

LONG GetTimezoneOffset()
{
LARGE_INTEGER systemTime;
LARGE_INTEGER localTime;

// Get system time
KeQuerySystemTime(&systemTime);

// Convert to local time
ExSystemTimeToLocalTime(&systemTime, &localTime);

// Calculate the time zone offset (in minutes)
LONG timezoneOffset = (LONG)((localTime.QuadPart - systemTime.QuadPart) / 600000000);

return timezoneOffset;
}
3會員
2內容數
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
創作者要怎麼好好休息 + 避免工作過量?《黑貓創作報#4》午安,最近累不累? 這篇不是虛假的關心。而是《黑貓創作報》發行以來可能最重要的一篇。 是的,我們這篇講怎麼補充能量,也就是怎麼休息。
Thumbnail
avatar
黑貓老師
2024-06-29
防曬產品係數測試報告彙整(2024年)從2014年起,自己對於市售防曬產品的效能產生了濃厚的興趣。因為當時候發現不少產品的防曬係數其實標示是有問題的,像是原本應該是人體測試的SPF與PA數值,實際上沒有做,只用機器測試的數據來充當,但這兩者卻有很大的差異。像是防曬係數其實有強度、廣度與平均度三個面向需要一起判斷,但多數廠商並沒有完整標示
Thumbnail
avatar
邱品齊皮膚科醫師
2023-04-27