什么是 dwLowDateTime 和 dwHighDateTime

What is dwLowDateTime and dwHighDateTime

我知道它们是 FileTime 结构中的变量,但是文件时间的低位和高位部分是什么?

那是遗留的东西。重点是通过拥有几个 32 位值来获得 64 位值。所以后记你最终会做:

FILETIME ft;
// get time here
__int64 fileTime64;
memcpy( &fileTime64, &ft, sizeof( __int64 ) );

或者,如 Microsoft 希望您那样做:

FILETIME ft;
// get time here
ULARGE_INTEGER ul;
ul.LowPart = ft.dwLowDateTime;
ul.HighPart = ft.dwHighDateTime;
__int64 fileTime64 = ul.QuadPart;

旧版编译器不支持 64 位类型。因此该结构将 64 位值拆分为两个 32 位部分。低位部分包含最低有效的 32 位。高位部分包含最重要的 32 位。

所以如果你有两个 32 位的部分,对应的 64 位值是

low + 2^32 * high

官方认可的从两个 32 位部分获取 64 位值的方法是通过 ULARGE_INTEGER 联合。

来自 FILETIME 文档:

It is not recommended that you add and subtract values from the FILETIME structure to obtain relative times. Instead, you should copy the low- and high-order parts of the file time to a ULARGE_INTEGER structure, perform 64-bit arithmetic on the QuadPart member, and copy the LowPart and HighPart members into the FILETIME structure.

Do not cast a pointer to a FILETIME structure to either a ULARGE_INTEGER* or __int64* value because it can cause alignment faults on 64-bit Windows.