Estructura ITEMIDLIST (shtypes.h)

Contiene una lista de identificadores de elemento.

Sintaxis

typedef struct _ITEMIDLIST {
  SHITEMID mkid;
} ITEMIDLIST;

Miembros

mkid

Tipo: SHITEMID

Lista de identificadores de elemento.

Comentarios

Un puntero a esta estructura, denominado PIDL, se usa para identificar objetos en el espacio de nombres de Shell. Para obtener más información sobre los punteros a las listas de identificadores de elementos (PIDL) y a los identificadores de elementos, vea Introducción al espacio de nombres de Shell.

Tipos estrictos ITEMIDLIST

A partir de Windows Vista, hay varias formas de ITEMIDLIST disponibles como tipos de datos. Los tres tipos principales son:
  • IDLIST_ABSOLUTE: ITEMIDLIST completo en relación con la raíz del espacio de nombres. Puede ser de varios niveles.
  • IDLIST_RELATIVE: ITEMIDLIST relativo a una carpeta primaria. Puede ser de varios niveles.
  • ITEMID_CHILD: ITEMIDLIST de nivel único relativo a una carpeta primaria. Contiene exactamente una estructura SHITEMID .
Estos tipos se usan si compila el código con el símbolo STRICT_TYPED_ITEMIDS antes de incluir los archivos de encabezado de Shell, como se muestra en el código de ejemplo siguiente.

#define STRICT_TYPED_ITEMIDS    // Better type safety for IDLists

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

El significado de cada uno de estos tipos se puede modificar con uno o varios de los modificadores siguientes:

  • P: El tipo es un puntero.
  • C: el tipo es constante.
  • U: El tipo no está asignado. Se alinea con un límite DWORD en arquitecturas de 32 bits y un límite de QWORD en arquitecturas de 64 bits.
Algunos ejemplos de estos tipos modificados son:
  • PIDLIST_ABSOLUTE: ITEMIDLIST es absoluto y se ha asignado, como se indica en su no constante. Esto significa que debe desasignarse con ILFree cuando ya no sea necesario. Dado que es un puntero directo a la memoria asignada, está alineado.
  • PCIDLIST_ABSOLUTE: ITEMIDLIST es absoluta y constante. Esto se usa normalmente cuando se pasa un ITEMIDLIST absoluto como parámetro, pero no es propietario de él, por lo que no se permite cambiarlo.
  • PCUIDLIST_ABSOLUTE: ITEMIDLIST es absoluto, constante y no asignado. Esto rara vez se usa. ItemIDLIST absoluto se asigna normalmente en memoria alineada a un límite DWORD en arquitecturas de 32 bits y a un límite de QWORD en arquitecturas de 64 bits. Un ITEMIDLIST absoluto solo se anularía si se ha empaquetado por bytes junto con otros datos, como en un formato de serialización.
  • PITEMID_CHILD: ITEMIDLIST es un elemento secundario asignado ITEMIDLIST relativo a una carpeta primaria, como el resultado de IEnumIDList::Next. Contiene exactamente una estructura SHITEMID .
  • PCUITEMID_CHILD: ITEMIDLIST secundario es relativo, constante y no asignado. Esto suele ocurrir cuando se obtiene un puntero a parte de un PIDL existente. Por ejemplo, si tiene un PIDL absoluto y llama a ILFindLastID, devuelve el puntero al último SHITEMID secundario de la lista. No está asignado porque el PIDL empaquetado por bytes no garantiza que sus estructuras SHITEMID individuales se encuentran en los límites de bytes. Las referencias a LOS PIN secundarios, como estas, siempre son constantes porque la memoria es propiedad del PIDL absoluto.
  • PCITEMID_CHILD: ITEMIDLIST secundario es constante y alineado. Esto rara vez se usa porque como PIDL secundario, normalmente forma parte de un PIDL mayor y, por lo tanto, no se alinea en los límites de bytes.
  • PUITEMID_CHILD: el ITEMIDLIST secundario no está asignado. Esto rara vez se usa porque la memoria de este ITEMIDLIST es propiedad del PIDL primario, que es absoluta. Esto significa que las modificaciones solo se pueden realizar en el PIDL primario, por lo que el PIDL secundario tendría que ser constante.
Esta lista no es exhaustiva. Otros tipos también pueden existir.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado shtypes.h