Структура ITEMIDLIST (shtypes.h)

Содержит список идентификаторов элементов.

Синтаксис

typedef struct _ITEMIDLIST {
  SHITEMID mkid;
} ITEMIDLIST;

Члены

mkid

Тип: SHITEMID

Список идентификаторов элементов.

Комментарии

Указатель на эту структуру, называемый PIDL, используется для идентификации объектов в пространстве имен оболочки. Дополнительные сведения о указателях на списки идентификаторов элементов (PIDL) и идентификаторы элементов см. в статье Общие сведения о пространстве имен оболочки.

Строгие типы ITEMIDLIST

В Windows Vista в качестве типов данных доступно несколько форм ITEMIDLIST . Три типа main:
  • IDLIST_ABSOLUTE: полный itemIDLIST относительно корня пространства имен. Она может быть многоуровневой.
  • IDLIST_RELATIVE: ITEMIDLIST относительно родительской папки. Она может быть многоуровневой.
  • ITEMID_CHILD: одноуровневый ITEMIDLIST относительно родительской папки. Он содержит ровно одну структуру SHITEMID .
Эти типы используются при компиляции кода с символом STRICT_TYPED_ITEMIDS перед включением файлов заголовков оболочки, как показано в следующем примере кода.

#define STRICT_TYPED_ITEMIDS    // Better type safety for IDLists

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

Значение каждого из этих типов можно изменить одним или несколькими из следующих модификаторов:

  • P: типом является указатель.
  • C. Тип является константой.
  • U: тип является неотровненным. Он соответствует границе DWORD в 32-разрядных архитектурах и границе QWORD в 64-разрядных архитектурах.
Ниже приведены некоторые примеры этих измененных типов.
  • PIDLIST_ABSOLUTE: элемент ITEMIDLIST является абсолютным и выделен, о чем свидетельствует его непостоянное значение. Это означает, что он должен быть освобожден с ILFree , когда он больше не нужен. Поскольку он является прямым указателем на выделенную память, он выравнивается.
  • PCIDLIST_ABSOLUTE: элемент ITEMIDLIST является абсолютным и константным. Обычно это используется, когда вы передаете абсолютный ITEMIDLIST в качестве параметра, но не являетесь его владельцем, и поэтому не можете изменять его.
  • PCUIDLIST_ABSOLUTE: элемент ITEMIDLIST является абсолютным, постоянным и неровным. Используется редко. Абсолютный ITEMIDLIST обычно выделяется в памяти, выровненной по границе DWORD в 32-разрядных архитектурах и границе QWORD в 64-разрядных архитектурах. Абсолютный 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