如何解码Windows注册表中的REG_BINARY日期?

时间:2013-11-08 11:56:37

标签: windows date format registry decode

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

SignaturesLastUpdated    REG_BINARY    720CB9EBE8CBCE01

应该在2013年。

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

1 个答案:

答案 0 :(得分:1)

这是FILETIME structure,其定义为:

  

包含代表100纳秒数的64位值   自1601年1月1日(UTC)起间隔。

结构如下:

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    
}