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 结构。
#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 |