Structure ITEMIDLIST (shtypes.h)

Contient une liste d’identificateurs d’élément.

Syntaxe

typedef struct _ITEMIDLIST {
  SHITEMID mkid;
} ITEMIDLIST;

Membres

mkid

Type : SHITEMID

Liste d’identificateurs d’élément.

Remarques

Un pointeur vers cette structure, appelé PIDL, est utilisé pour identifier les objets dans l’espace de noms Shell. Pour plus d’informations sur les pointeurs vers les listes d’identificateurs d’élément (PIDL) et les identificateurs d’élément, consultez Présentation de l’espace de noms Shell.

TYPES STRICTS ITEMIDLIST

À partir de Windows Vista, plusieurs formes de ITEMIDLIST sont disponibles en tant que types de données. Les trois types main sont les suivants :
  • IDLIST_ABSOLUTE : ITEMIDLIST complet par rapport à la racine de l’espace de noms. Il peut s’agir de plusieurs niveaux.
  • IDLIST_RELATIVE : ITEMIDLIST par rapport à un dossier parent. Il peut s’agir de plusieurs niveaux.
  • ITEMID_CHILD : ITEMIDLIST de niveau unique par rapport à un dossier parent. Il contient exactement une structure SHITEMID .
Ces types sont utilisés si vous compilez votre code avec le symbole STRICT_TYPED_ITEMIDS avant d’inclure les fichiers d’en-tête Shell, comme illustré dans l’exemple de code suivant.

#define STRICT_TYPED_ITEMIDS    // Better type safety for IDLists

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

La signification de chacun de ces types peut être modifiée avec un ou plusieurs des modificateurs suivants :

  • P : Le type est un pointeur.
  • C : Le type est constant.
  • U : le type n’est pas aligné. Il s’aligne sur une limite DWORD dans les architectures 32 bits et une limite QWORD dans les architectures 64 bits.
Voici quelques exemples de ces types modifiés :
  • PIDLIST_ABSOLUTE : l’ÉLÉMENTIDLIST est absolu et a été alloué, comme indiqué par son caractère non constant. Cela signifie qu’il doit être libéré avec ILFree lorsqu’il n’est plus nécessaire. Étant donné qu’il s’agit d’un pointeur direct vers la mémoire allouée, il est aligné.
  • PCIDLIST_ABSOLUTE : ITEMIDLIST est absolu et constant. Il est généralement utilisé lorsque vous passez un ITEMIDLIST absolu en tant que paramètre, mais que vous ne le possédez pas, et que vous ne pouvez donc pas le modifier.
  • PCUIDLIST_ABSOLUTE : ITEMIDLIST est absolu, constant et non aligné. C’est rarement utilisé. Absolute ITEMIDLIST est généralement alloué en mémoire alignée sur une limite DWORD dans les architectures 32 bits et sur une limite QWORD dans les architectures 64 bits. Un ITEMIDLIST absolu n’est pas aligné uniquement s’il a été empaqueté en octets avec d’autres données, par exemple dans un format de sérialisation.
  • PITEMID_CHILD : ITEMIDLIST est un ITEMIDLIST enfant alloué par rapport à un dossier parent, par exemple suite à IEnumIDList ::Next. Il contient exactement une structure SHITEMID .
  • PCUITEMID_CHILD : l’élément ITEMIDLIST enfant est relatif, constant et non aligné. Cela se produit souvent lorsque vous obtenez un pointeur vers une partie d’un PIDL existant. Par exemple, si vous avez un PIDL absolu et que vous appelez ILFindLastID, il retourne le pointeur vers le dernier SHITEMID enfant de la liste. Il n’est pas aligné, car le PIDL contenant des octets ne garantit pas que ses structures SHITEMID individuelles tombent sur les limites d’octets. Les références aux LISTES PIDL enfants telles que celles-ci sont toujours constantes, car la mémoire appartient au PIDL absolu.
  • PCITEMID_CHILD : l’élément ITEMIDLIST enfant est constant et aligné. Il est rarement utilisé, car en tant que PIDL enfant, il fait généralement partie d’un PIDL plus grand et, par conséquent, n’est pas aligné sur les limites d’octets.
  • PUITEMID_CHILD : l’ÉLÉMENTIDLIST enfant n’est pas aligné. Cela est rarement utilisé, car la mémoire de cet ITEMIDLIST appartient au PIDL parent, qui est absolu. Cela signifie que les modifications ne peuvent être apportées qu’au PIDL parent et que le PIDL enfant doit donc être constant.
Cette liste n’est pas exhaustive. D’autres types peuvent également exister.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
En-tête shtypes.h