Struttura ITEMIDLIST (shtypes.h)

Contiene un elenco di identificatori di elemento.

Sintassi

typedef struct _ITEMIDLIST {
  SHITEMID mkid;
} ITEMIDLIST;

Members

mkid

Tipo: SHITEMID

Elenco di identificatori di elemento.

Commenti

Un puntatore a questa struttura, denominato PIDL, viene usato per identificare gli oggetti nello spazio dei nomi shell. Per altre informazioni sui puntatori agli elenchi di identificatori di elemento (PIDLs) e agli identificatori di elemento, vedere Introduzione allo spazio dei nomi shell.

Tipi rigorosi ITEMIDLIST

A partire da Windows Vista, diverse forme di ITEMIDLIST sono disponibili come tipi di dati. I tre tipi principali sono:
  • IDLIST_ABSOLUTE: ITEMIDLIST completo rispetto alla radice dello spazio dei nomi. Può essere a più livelli.
  • IDLIST_RELATIVE: ITEMIDLIST rispetto a una cartella padre. Può essere a più livelli.
  • ITEMID_CHILD: ITEMIDLIST a livello singolo rispetto a una cartella padre. Contiene esattamente una struttura SHITEMID .
Questi tipi vengono usati se si compila il codice con il simbolo STRICT_TYPED_ITEMIDS prima di includere i file di intestazione shell, come illustrato nel codice di esempio seguente.

#define STRICT_TYPED_ITEMIDS    // Better type safety for IDLists

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

Il significato di ognuno di questi tipi può essere modificato con uno o più modificatori seguenti:

  • P: il tipo è un puntatore.
  • C: il tipo è costante.
  • U: il tipo non è idoneo. Si allinea a un limite DWORD in architetture a 32 bit e a un limite QWORD in architetture a 64 bit.
Alcuni esempi di questi tipi modificati sono:
  • PIDLIST_ABSOLUTE: ITEMIDLIST è assoluto ed è stato allocato, come indicato dal suo essere non costante. Ciò significa che deve essere deallocato con ILFree quando non è più necessario. Poiché è un puntatore diretto alla memoria allocata, è allineato.
  • PCIDLIST_ABSOLUTE: ITEMIDLIST è assoluto e costante. Questo viene in genere usato quando si passa un elemento ITEMIDLIST assoluto come parametro, ma non è autorizzato a modificarlo.
  • PCUIDLIST_ABSOLUTE: ITEMIDLIST è assoluto, costante e non idoneo. Questa operazione viene usata raramente. ITEMIDLIST assoluto vengono in genere allocati in memoria allineati a un limite DWORD in architetture a 32 bit e a un limite QWORD in architetture a 64 bit. Un elemento ITEMIDLIST assoluto non è idoneo solo se è stato compresso da byte insieme ad altri dati, ad esempio in un formato di serializzazione.
  • PITEMID_CHILD: ITEMIDLIST è un ELEMENTO ITEMIDLIST allocato relativo a una cartella padre, ad esempio un risultato di IEnumIDList::Next. Contiene esattamente una struttura SHITEMID .
  • PCUITEMID_CHILD: l'ELEMENTOIDLIST figlio è relativo, costante e non idoneo. Ciò si verifica spesso quando si ottiene un puntatore a parte di un PIDL esistente. Ad esempio, se si ha un PIDL assoluto e si chiama ILFindLastID, restituisce il puntatore all'ultimo SHITEMID figlio nell'elenco. Non è idoneo perché il piDL con byte non garantisce che le singole strutture SHITEMID rientrano nei limiti di byte. I riferimenti ai PID figlio, ad esempio questi sono sempre costanti perché la memoria è di proprietà del PIDL assoluto.
  • PCITEMID_CHILD: l'ELEMENTOIDLIST figlio è costante e allineato. Questa operazione viene usata raramente perché come PIDL figlio, è in genere una parte di un PIDL più grande e quindi non allineata ai limiti di byte.
  • PUITEMID_CHILD: l'elemento ITEMIDLIST figlio non è idoneo. Questa operazione viene usata raramente perché la memoria per questo ITEMIDLIST è di proprietà del PIDL padre, che è assoluto. Ciò significa che le modifiche possono essere apportate solo al PIDL padre e quindi il PIDL figlio deve essere costante.
L'elenco non è completo. Altri tipi possono esistere anche.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Intestazione shtypes.h