项目标识符和指针到项目标识符列表

【勇芳软件工作室】汉化HomePreviousNext

shell命名空间中的对象被分配项目标识符和项目标识符列表。【项目标识符】可以唯一标识其父文件夹中的项目。【项目标识符列表】通过从桌面跟踪项目的路径来唯一标识shell命名空间中的项目。指向项目标识符列表的指针有时称为PIDL(发音为【小罐】),具有许多功能。

项目标识符和PIDL非常类似于文件系统中使用的文件名和路径。然而,它们共享这个重要的区别:项目标识符和PIDL是用户永远不会看到的二进制数据结构。可以向用户显示的项目名称(称为【显示名称】)在显示名称和文件名中有描述。

项目标识符由可变长度SHITEMID结构定义。此结构的前两个字节指定其大小,其余字节的格式取决于父文件夹,或更准确地说在实现父文件夹的IShellFolder接口的软件上。除了前两个字节,项目标识符不被严格定义,应用程序不应对其格式做出任何假设。要确定两个项目标识符是否相等,应用程序可以使用IShellFolder::CompareIDs成员函数。

ITEMIDLIST结构定义了项目标识符列表中的一个元素(该结构的唯一成员是SHITEMID结构)。项目标识符列表由一个或多个在字节边界上打包的连续ITEMIDLIST结构组成,后跟16位零值。应用程序可以通过检查每个SHITEMID结构中指定的大小来查找项目标识符列表,并在找到大小为零时停止。

项目标识符列表几乎总是使用shell的allocator(一个IMalloc接口,您可以使用SHGetMalloc函数检索)来分配。例如,一些shell函数创建一个项目标识符列表并返回一个PIDL。在这种情况下,通常应用程序有责任使用shell的分配器释放PIDL。请注意,SHGetMalloc函数检索OLE应用程序的任务分配器。