我在读NT日志的时候,取得了日志记录的产生时间是从1970年1月1号00:00:00到现在的总秒数。日志记录的结构形式如下(摘自MSDN)
The EVENTLOGRECORD structure contains information about an event record returned by the ReadEventLog function. typedef struct _EVENTLOGRECORD {
DWORD Length;
DWORD Reserved;
DWORD RecordNumber;
DWORD TimeGenerated;
DWORD TimeWritten;
DWORD EventID;
WORD EventType;
WORD NumStrings;
WORD EventCategory;
WORD ReservedFlags;
DWORD ClosingRecordNumber;
DWORD StringOffset;
DWORD UserSidLength;
DWORD UserSidOffset;
DWORD DataLength;
DWORD DataOffset;
//
// Followed by:
//
// TCHAR SourceName[]
// TCHAR Computername[]
// SID UserSid
// TCHAR Strings[]
// BYTE Data[]
// CHAR Pad[]
// DWORD Length;
//
} EVENTLOGRECORD, *PEVENTLOGRECORD;
其中TimeGenerated就是产生的时间,我用一个运行库函数localtime将这个数值转化为字符串,可这个函数的参数类型是time_t,这个类型实际上是一个long int,而DWORD实际上是一个unsigned long,我后来计算了一下,如果到2000.1.1,TimeGenerated的值应当是30*365*24*60*60=946080000,它已经超出了time_t所能表示的范围。
有那位朋友知道这是怎么回事,有没有什么API将TimeGenerated转化为字符串。
The EVENTLOGRECORD structure contains information about an event record returned by the ReadEventLog function. typedef struct _EVENTLOGRECORD {
DWORD Length;
DWORD Reserved;
DWORD RecordNumber;
DWORD TimeGenerated;
DWORD TimeWritten;
DWORD EventID;
WORD EventType;
WORD NumStrings;
WORD EventCategory;
WORD ReservedFlags;
DWORD ClosingRecordNumber;
DWORD StringOffset;
DWORD UserSidLength;
DWORD UserSidOffset;
DWORD DataLength;
DWORD DataOffset;
//
// Followed by:
//
// TCHAR SourceName[]
// TCHAR Computername[]
// SID UserSid
// TCHAR Strings[]
// BYTE Data[]
// CHAR Pad[]
// DWORD Length;
//
} EVENTLOGRECORD, *PEVENTLOGRECORD;
其中TimeGenerated就是产生的时间,我用一个运行库函数localtime将这个数值转化为字符串,可这个函数的参数类型是time_t,这个类型实际上是一个long int,而DWORD实际上是一个unsigned long,我后来计算了一下,如果到2000.1.1,TimeGenerated的值应当是30*365*24*60*60=946080000,它已经超出了time_t所能表示的范围。
有那位朋友知道这是怎么回事,有没有什么API将TimeGenerated转化为字符串。
怎么会超过呢?