Windows下KSYSTEM_TIME与FILETIME的兼容性及转换可行性探讨
KSYSTEM_TIME 与 FILETIME 的类型转换问题
我在多个场景中使用过KUSER_SHARED_DATA,该结构体的部分初始成员为KSYSTEM_TIME类型,其布局设计是为了保证中断服务例程(ISR)无阻塞运行。
KSYSTEM_TIME定义(出自wdm.h)
typedef struct _KSYSTEM_TIME { ULONG LowPart; LONG High1Time; LONG High2Time; } KSYSTEM_TIME, *PKSYSTEM_TIME;
可以看到,除了第二个“高位”成员(出于ISR无阻塞的设计原因),它实际上等价于LARGE_INTEGER/LONGLONG。
FILETIME定义(出自winbase.h)
typedef struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime; } FILETIME;
该结构体所有成员均为无符号类型,实际上等价于ULARGE_INTEGER/ULONGLONG。
KSYSTEM_TIME可以为负值(例如用于KUSER_SHARED_DATA::TimeZoneBias时区偏移),但有符号版本的取值范围仅为无符号的一半,这限制了两个结构体的兼容性。
核心问题
若已知KSYSTEM_TIME表示的是时间而非时间差,是否可以将其字段强制转换为FILETIME类型?
注:
FileTimeToSystemTime/SystemTimeToFileTime所使用的SYSTEMTIME在概念上(非一一对应)更接近TIME_FIELDS结构体,不在本次问题讨论范围内。
内容的提问来源于stack exchange,提问作者0xC0000022L
相关产品推荐
相关产品推荐

