2013-05-10 64 views
0

我正试图在Windows上为SMBIOS编写一个简单的解析器。SMBIOS枚举值。文档错误?

在阅读2.6.1版本的文档(2.6是笔记本电脑上的SMBIOS版本)时,我遇到了系统信息条目(类型1 - 第3.3.2节)。

在文档中,它表示唤醒类型是一个枚举值(即每个位表示唤醒类型是否存在,1或0的位字段)。

现在,在下面的小节3.3.2.2中,Enum被定义为位偏移量00h到08h,使其总共为9位值。 BYTE只保存8位。文档是错的还是我错过了什么?

我只想把BYTE出来的结构,做一个逐位,并找出与以下口罩唤醒类型:

#define SM_SI_OTHER    0x00000001 
#define SM_SI_UNKNOWN   0x00000010 
#define SM_SI_APM_TIMER   0x00000100 
#define SM_SI_MODERN_RING  0x00001000 
#define SM_SI_LAN_REMOTE  0x00010000 
#define SM_SI_POWER_SWITCH  0x00100000 
#define SM_SI_PCI_PME   0x01000000 
#define SM_SI_AC_POWER_RESTORED 0x10000000 

在这里,我错过了保留值。我应该怎么做?

下面是我使用的文档的链接:http://www.dmtf.org/sites/default/files/standards/documents/DSP0134_2.6.1.pdf

谢谢你,提前为您解答。

回答

1

我看着文件,它说这个字段是一个枚举,而不是一个掩码。

+0

这并没有真正回答我的问题... – 2013-05-10 11:33:21

+1

我认为你必须混淆枚举与位掩码。虽然枚举可以通过位掩码来完成,但它们通常不是。在这种情况下,唤醒类型一次只保存一个值。 1 =其他,2 =未知,3 =计时器等。 – Luke 2013-05-10 11:40:18

+0

哦。你是对的。我错过了。谢谢。 – 2013-05-10 11:48:23