Estrutura ITEMIDLIST (shtypes.h)

Contém uma lista de identificadores de item.

Sintaxe

typedef struct _ITEMIDLIST {
  SHITEMID mkid;
} ITEMIDLIST;

Membros

mkid

Tipo: SHITEMID

Uma lista de identificadores de item.

Comentários

Um ponteiro para essa estrutura, chamado PIDL, é usado para identificar objetos no namespace shell. Para obter mais informações sobre ponteiros para PIDLs (listas de identificadores de item) e identificadores de item, consulte Introdução ao Namespace do Shell.

Tipos estritos ITEMIDLIST

A partir do Windows Vista, várias formas de ITEMIDLIST estão disponíveis como tipos de dados. Os três tipos de main são:
  • IDLIST_ABSOLUTE: ITEMIDLIST totalmente qualificado em relação à raiz do namespace. Pode ser de vários níveis.
  • IDLIST_RELATIVE: ITEMIDLIST em relação a uma pasta pai. Pode ser de vários níveis.
  • ITEMID_CHILD: ITEMIDLIST de nível único em relação a uma pasta pai. Ele contém exatamente uma estrutura SHITEMID .
Esses tipos serão usados se você compilar seu código com o símbolo STRICT_TYPED_ITEMIDS antes de incluir os arquivos de cabeçalho do Shell, conforme mostrado no código de exemplo a seguir.

#define STRICT_TYPED_ITEMIDS    // Better type safety for IDLists

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

O significado de cada um desses tipos pode ser alterado com um ou mais dos seguintes modificadores:

  • P: O tipo é um ponteiro.
  • C: O tipo é constante.
  • U: o tipo não está atribuído. Ele se alinha a um limite DWORD em arquiteturas de 32 bits e um limite QWORD em arquiteturas de 64 bits.
Alguns exemplos desses tipos modificados são:
  • PIDLIST_ABSOLUTE: O ITEMIDLIST é absoluto e foi alocado, conforme indicado por ser não constante. Isso significa que ele precisa ser desalocado com ILFree quando não for mais necessário. Como é um ponteiro direto para a memória alocada, ele é alinhado.
  • PCIDLIST_ABSOLUTE: ITEMIDLIST é absoluto e constante. Normalmente, isso é usado quando você recebe um ITEMIDLIST absoluto como um parâmetro, mas não o possui e, portanto, não tem permissão para alterá-lo.
  • PCUIDLIST_ABSOLUTE: ITEMIDLIST é absoluto, constante e desalinhado. Isso raramente é usado. O ITEMIDLIST absoluto normalmente é alocado na memória alinhado a um limite DWORD em arquiteturas de 32 bits e a um limite de QWORD em arquiteturas de 64 bits. Um ITEMIDLIST absoluto só seria desalinhado se tivesse sido empacotado por bytes junto com outros dados, como em um formato de serialização.
  • PITEMID_CHILD: ITEMIDLIST é um ITEMIDLIST filho alocado em relação a uma pasta pai, como um resultado de IEnumIDList::Next. Ele contém exatamente uma estrutura SHITEMID .
  • PCUITEMID_CHILD: o ITEMIDLIST filho é relativo, constante e desalinhado. Isso geralmente ocorre quando você obtém um ponteiro para parte de um PIDL existente. Por exemplo, se você tiver um PIDL absoluto e chamar ILFindLastID, ele retornará o ponteiro para o último SHITEMID filho na lista. Ele não é assinado porque o PIDL embalado por bytes não garante que suas estruturas SHITEMID individuais caiam nos limites de bytes. Referências a PIDLs filho como essas são sempre constantes porque a memória pertence ao PIDL absoluto.
  • PCITEMID_CHILD: o ITEMIDLIST filho é constante e alinhado. Isso raramente é usado porque, como um PIDL filho, geralmente faz parte de um PIDL maior e, portanto, não está alinhado aos limites de bytes.
  • PUITEMID_CHILD: o ITEMIDLIST filho não está atribuído. Isso raramente é usado porque a memória para esse ITEMIDLIST pertence ao PIDL pai, o que é absoluto. Isso significa que as modificações só podem ser feitas no PIDL pai e, portanto, o PIDL filho precisaria ser constante.
Esta lista não é exaustiva. Outros tipos também podem existir.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho shtypes.h