Структура 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 .
#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 |