BitMap 和 BitValue 限定符

位图是链接到某个具有 BitMap 和 BitValue 限定符的属性的整数。 属性值的每个位都充当 BitValue 列表中值数组的索引。 由于属性值中的多个位可以同时“打开”,因此可以使用单个属性值来指示多个并发值。

例如,以下 MOF 代码示例将 FileType 属性确定为使用 BitMap 和 BitValues 限定符。 它进一步确定低阶位(位 0)对应于值“只读”。 下一位(位 1)对应于“隐藏”,依此类推。 (并非所有位都必须有意义。在这个八位系统中,两个高阶位(6 和 7)没有意义。)

[BitMap("0","1","2","3","4","5"),
 BitValues("Read Only",
           "Hidden",
           "System",
           "Volume Label",
           "Subdirectory",
           "Archive")]
byte FileType;

如果 FileType 属性报告了值“7”(位 0000 0111),则文件为“只读”、“系统”和“隐藏”文件。 如果 FileType 属性报告了值“18”(0x12,位 0001 0010),则它是一个隐藏的子目录。

有两种不同类型的位图在使用 MOF 代码:

  • 以低阶位(位 0)开始的连续有效位

    如果有效位从低阶位(位 0)开始,在不中断 BitValue 数组中所有项的情况下向上推进,则可定义一个位值数组而无需明确指定有效位。 以下 MOF 代码示例执行与上一示例相同的功能。

    [BitValues("Read Only",
               "Hidden",
               "System",
               "Volume Label",
               "Subdirectory",
               "Archive")]
    byte FileType;
    
  • 有效位前面有一个非有效位

    如果低阶位不重要,或者重要位的序列不连续,则必须同时指定 BitMap 和 BitValues 限定符。 以下 MOF 代码示例显示了这样一种情况:低阶位不重要,并且在有效位序列中存在间隙。

    [BitMap("1","4","5"),
     BitValues("Follow-up","Delivery receipt","Read receipt")]
    sint32 MailOptions;
    

    在这种情况下,设置低阶位(位 0)没有意义,会被系统忽略。 但是,设置位 1 (0x2) 表示此电子邮件已标记为跟进电子邮件,设置位 4 (0x8) 表示当电子邮件到达收件人邮箱时应向发件人发送送达回执,设置位 5 (0x10) 则是指定当收件人打开电子邮件时应向发件人发送已读回执。 设置所有三个有效位 (0x1A) 是指定电子邮件消息的所有三个条件。

备注

在决定是使用 BitMap/BitValues 还是 ValueMap/Values 限定符时,确定是否有任何被指示的值可以同时出现。 如果可以存在多个并发值,则必须使用 BitMap/BitValues。 如果所有值都是互斥的,则应使用 ValueMap/Values 限定符。

ValueMap 和 Value 限定符