1

我正在尝试解码 Windows 注册表中编码为 REG_BINARY 的日期。特别是这个日期:

SignaturesLastUpdated    REG_BINARY    720CB9EBE8CBCE01

应该在 2013 年。

知道如何手动解码吗?(即不使用任何内置的 C# 或 C++ 库)

4

1 回答 1

1

它是一个FILETIME 结构,定义为:

包含一个 64 位值,表示自 1601 年 1 月 1 日 (UTC) 以来的 100 纳秒间隔数。

该结构如下所示:

typedef struct _FILETIME {
  DWORD dwLowDateTime;
  DWORD dwHighDateTime;
} FILETIME, *PFILETIME, *LPFILETIME;

成员

dwLowDateTime 文件时间的低位部分。

dwHighDateTime 文件时间的高位部分。

以下是如何将其转换为 Unix 时间(在 Go 中):

type Filetime struct {    
    LowDateTime  uint32    
    HighDateTime uint32    
}

// Nanoseconds returns Filetime ft in nanoseconds
// since Epoch (00:00:00 UTC, January 1, 1970).    
func (ft *Filetime) Nanoseconds() int64 {    
    // 100-nanosecond intervals since January 1, 1601    
    nsec := int64(ft.HighDateTime)<<32 + int64(ft.LowDateTime)    
    // change starting time to the Epoch (00:00:00 UTC, January 1, 1970)    
    nsec -= 116444736000000000    
    // convert into nanoseconds    
    nsec *= 100    
    return nsec    
}
于 2019-01-31T12:01:12.180 回答