ValueMap 和 Value 限定符

值映射是一个数组,链接到具有 Value 和 ValueMap 限定符的属性。

属性充当数组中的索引,包含表示数组中的值之一的值。 使用 MOF 代码,可以具有以下类型的值映射:

  • 数组映射到整数。

    可以使用 Value 限定符定义数组,并将数组直接链接到整数属性,如以下示例所示:

    [Values {"OK", "Error", "Degraded", "Unknown"}, Read]
    sint32 Status;
    

    在此示例中,Status 属性值是 Value 定义的字符串数组中的索引。 属性只能采用对应于 Value 数组中序号位置减 1 的值。 例如,将“Status”设置为“1”会映射到“Error”值。 索引属性只能采用与 Value 数组中的位置对应的值。 例如,如果数组包含 10 个条目,则索引属性可以存储 0 到 9,而不是 30 或 177。

  • 数组映射到另一个数组,而后者映射到整数。

    如果要创建不使用序号计数系统的索引,请使用 ValueMap 限定符。 ValueMap 限定符设置另一个包含任意索引编号系统的数组,如以下示例所示:

    [ValueMap {"1", "3", "99", "0"}, 
     Values {"OK", "Error", "Degraded", "Unknown"}, Read]
    sint32 Status;
    

    尽管必须将 ValueMap 的值置于引号中,但 WMI 会考虑这些值整数。 因此,在此示例中,可以将 Status 属性设置为 ValueMap 集中的整数:1、3、99 或 0。 WMI 将 ValueMap 字符串数组中的序号位置中的每个整数映射到 Value 数组中的相应位置。 例如,将“Statu” 设置为 0 会映射到“Unknown”。

  • 数组映射到另一个数组,而后者映射到字符串。

    如果不想使用整数为数组编制索引,则可以改用字符串来保存数组中的一个可能值。 为此,必须同时定义一个 Value 和 ValueMap 数组,这两个数组都包含字符串,如以下示例所示:

    [ValueMap {"OK", "Error", "Degraded", "Unknown"}, 
     Values {"OK", "Error", "Degraded", "Unknown"}, Read]
    string Status;
    

    使用字符串属性时,该属性的实际允许值是 ValueMap 数组中的条目。 例如,可以将“Status”设置为“OK”或“Unknown”。

应用程序应以有益的方式利用映射。 由提供程序来强制实施一个法定值范围。

备注

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

BitMap 和 BitValues