并非所有属性存储对象的客户端都使用这些方法。 某些客户端知道他们计划通过 PKEY 名称 () 直接请求的属性，或通过属性说明列表接收属性信息。 属性发现方法支持其他几个方案。 如果属性不需要参与这些方案，则无需枚举它。 因此，属性处理程序可以为未通过 IPropertyStore：：GetCount 和 IPropertyStore：：GetAt 方法发现的属性生成非VT_EMPTY值。
但是，如果满足以下任何条件，则应通过这些方法查看属性：
如果属性已编制索引，以便其可搜索：这意味着它包含在Windows搜索属性存储中， (isColumn = "true"属性描述架构) 或可用于全文搜索 (inInvertedIndex = "true") 。 如果没有这些标志或缺少属性说明，类型为“string”的属性将自动添加到倒排索引以启用搜索。 由于 (属性系统中已安装属性说明) 的已知属性列表非常大， (超过 800 个属性) ，因此请求属性系统中注册的每个属性的每个属性处理程序是不切实际的。 相反，索引过程会枚举其索引的每个项的属性处理程序中的相关属性，并使用枚举属性的值来生成全文索引。
如果当项的属性集重复时应复制该属性：若要实现“复制属性集”函数，源项使应通过 IPropertyStore：：GetCount 和 IPropertyStore：：GetAt 方法可见的属性。 不应包含不需要复制或不需要复制的属性。
如果属性值不是空 (VT_EMPTY) ： 为空的属性值不适用于客户端。 当客户端尝试返回空属性值时，将返回VT_EMPTY的值。 因此，不应枚举具有空值的属性。
如果在调用“remove properties”函数时应删除该属性： 此功能存在以保护隐私;它通过枚举发现属性处理程序中的所有值，并删除用户选择的每个值以供删除。
注意
如果某个特定属性处理程序支持固定架构 (且不打开元数据) ，则枚举属性不会传达特定属性处理程序支持的属性集。 相反，此类处理程序应记录它们支持的属性集。