ITEMIDLIST 结构 (shtypes.h)

包含项标识符的列表。

语法

typedef struct _ITEMIDLIST {
  SHITEMID mkid;
} ITEMIDLIST;

成员

mkid

类型: SHITEMID

项标识符的列表。

注解

指向此结构的指针(称为 PIDL)用于标识 Shell 命名空间中的对象。 有关指向项标识符列表 (PIDL) 和项标识符的指针的详细信息,请参阅 Shell 命名空间简介

ITEMIDLIST 严格类型

从 Windows Vista 起, 有多种形式的 ITEMIDLIST 可用作数据类型。 三种main类型为:
  • IDLIST_ABSOLUTE:相对于命名空间根目录的完全限定的 ITEMIDLIST 。 它可以是多级。
  • IDLIST_RELATIVE:相对于父文件夹的 ITEMIDLIST 。 它可以是多级。
  • ITEMID_CHILD:相对于父文件夹的单级 ITEMIDLIST 。 它只包含一个 SHITEMID 结构。
如果在包含 Shell 头文件之前使用符号STRICT_TYPED_ITEMIDS编译代码,则使用这些类型,如以下示例代码所示。

#define STRICT_TYPED_ITEMIDS    // Better type safety for IDLists

#include <shlobj.h>             // Typical Shell header file

可以使用以下一个或多个修饰符来更改每种类型的含义:

  • P:类型为指针。
  • C:类型为常量。
  • U:类型未对齐。 它与 32 位体系结构中的 DWORD 边界和 64 位体系结构中的 QWORD 边界对齐。
这些修改后的类型的一些示例如下:
  • PIDLIST_ABSOLUTE: ITEMIDLIST 是绝对的,并且已分配,如其为非常量所示。 这意味着,当不再需要它时,它需要使用 ILFree 解除分配。 因为它是指向已分配内存的直接指针,因此它是对齐的。
  • PCIDLIST_ABSOLUTE: ITEMIDLIST 是绝对且常量。 这通常用于将绝对 ITEMIDLIST 作为参数传递,但不拥有它,因此不允许更改它。
  • PCUIDLIST_ABSOLUTE: ITEMIDLIST 为绝对、常量且未对齐。 这很少使用。 绝对 ITEMIDLIST 通常在内存中分配,这些内存与 32 位体系结构中的 DWORD 边界对齐,在 64 位体系结构中分配给 QWORD 边界。 仅当绝对 ITEMIDLIST 与其他数据(例如序列化格式)一起进行字节打包时,才会取消对齐。
  • PITEMID_CHILD: ITEMIDLIST 是相对于父文件夹分配的 子 ITEMIDLIST ,例如 IEnumIDList::Next 的结果。 它只包含一个 SHITEMID 结构。
  • PCUITEMID_CHILD:子 ITEMIDLIST 是相对的、常量的和未对齐的。 当你获取指向现有 PIDL 的一部分的指针时,通常会发生这种情况。 例如,如果你有一个绝对 PIDL 并调用 ILFindLastID,它将返回指向列表中最后一个子 SHITEMID 的指针。 它未对齐,因为字节打包的 PIDL 不确保其单个 SHITEMID 结构位于字节边界上。 对此类子 PIDL 的引用始终是恒定的,因为内存归绝对 PIDL 所有。
  • PCITEMID_CHILD:子 ITEMIDLIST 是常量且对齐的。 这很少使用,因为作为子 PIDL,它通常是较大 PIDL 的一部分,因此不在字节边界上对齐。
  • PUITEMID_CHILD:子 ITEMIDLIST 未对齐。 这很少使用,因为此 ITEMIDLIST 的内存归父 PIDL 所有,这是绝对的。 这意味着只能对父 PIDL 进行修改,因此子 PIDL 必须是常量。
此列表并未囊括所有方式。 其他类型也可以存在。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
标头 shtypes.h